Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(222)

Unified Diff: extensions/renderer/dispatcher.cc

Issue 348313003: Create withheld permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Test fix Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/renderer/dispatcher.cc
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc
index 44b2fd0f96e818a1bf056574ab16224c2ad99ab8..19335bc518fef6d7a1432d947e5c76509d1ee9e0 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -271,7 +271,7 @@ void Dispatcher::DidCreateScriptContext(
// Initialize origin permissions for content scripts, which can't be
// initialized in |OnActivateExtension|.
if (context_type == Feature::CONTENT_SCRIPT_CONTEXT)
- InitOriginPermissions(extension);
+ UpdateOriginPermissions(extension);
{
scoped_ptr<ModuleSystem> module_system(
@@ -506,7 +506,7 @@ void Dispatcher::WebKitInitialized() {
const Extension* extension = extensions_.GetByID(*iter);
CHECK(extension);
- InitOriginPermissions(extension);
+ UpdateOriginPermissions(extension);
}
EnableCustomElementWhiteList();
@@ -565,7 +565,7 @@ void Dispatcher::OnActivateExtension(const std::string& extension_id) {
extensions::DOMActivityLogger::AttachToWorld(
extensions::DOMActivityLogger::kMainWorldId, extension_id);
- InitOriginPermissions(extension);
+ UpdateOriginPermissions(extension);
}
UpdateActiveExtensions();
@@ -732,38 +732,17 @@ void Dispatcher::OnUnloaded(const std::string& id) {
void Dispatcher::OnUpdatePermissions(
const ExtensionMsg_UpdatePermissions_Params& params) {
- int reason_id = params.reason_id;
- const std::string& extension_id = params.extension_id;
- const APIPermissionSet& apis = params.apis;
- const ManifestPermissionSet& manifest_permissions =
- params.manifest_permissions;
- const URLPatternSet& explicit_hosts = params.explicit_hosts;
- const URLPatternSet& scriptable_hosts = params.scriptable_hosts;
-
- const Extension* extension = extensions_.GetByID(extension_id);
+ const Extension* extension = extensions_.GetByID(params.extension_id);
if (!extension)
return;
- scoped_refptr<const PermissionSet> delta = new PermissionSet(
- apis, manifest_permissions, explicit_hosts, scriptable_hosts);
- scoped_refptr<const PermissionSet> old_active =
- extension->permissions_data()->active_permissions();
- UpdatedExtensionPermissionsInfo::Reason reason =
- static_cast<UpdatedExtensionPermissionsInfo::Reason>(reason_id);
-
- const PermissionSet* new_active = NULL;
- switch (reason) {
- case UpdatedExtensionPermissionsInfo::ADDED:
- new_active = PermissionSet::CreateUnion(old_active.get(), delta.get());
- break;
- case UpdatedExtensionPermissionsInfo::REMOVED:
- new_active =
- PermissionSet::CreateDifference(old_active.get(), delta.get());
- break;
- }
+ scoped_refptr<const PermissionSet> active =
+ params.active_permissions.ToPermissionSet();
+ scoped_refptr<const PermissionSet> withheld =
+ params.withheld_permissions.ToPermissionSet();
- extension->permissions_data()->SetActivePermissions(new_active);
- UpdateOriginPermissions(reason, extension, explicit_hosts);
+ extension->permissions_data()->SetPermissions(active, withheld);
+ UpdateOriginPermissions(extension);
UpdateBindings(extension->id());
}
@@ -792,21 +771,14 @@ void Dispatcher::UpdateActiveExtensions() {
delegate_->OnActiveExtensionsUpdated(active_extensions);
}
-void Dispatcher::InitOriginPermissions(const Extension* extension) {
+void Dispatcher::UpdateOriginPermissions(const Extension* extension) {
+ const URLPatternSet& hosts =
+ extension->permissions_data()->GetEffectiveHostPermissions();
+ WebSecurityPolicy::resetOriginAccessWhitelists();
delegate_->InitOriginPermissions(extension,
IsExtensionActive(extension->id()));
- UpdateOriginPermissions(
- UpdatedExtensionPermissionsInfo::ADDED,
- extension,
- extension->permissions_data()->GetEffectiveHostPermissions());
-}
-
-void Dispatcher::UpdateOriginPermissions(
- UpdatedExtensionPermissionsInfo::Reason reason,
- const Extension* extension,
- const URLPatternSet& origins) {
- for (URLPatternSet::const_iterator i = origins.begin(); i != origins.end();
- ++i) {
+ for (URLPatternSet::const_iterator iter = hosts.begin(); iter != hosts.end();
+ ++iter) {
const char* schemes[] = {
url::kHttpScheme,
url::kHttpsScheme,
@@ -815,14 +787,12 @@ void Dispatcher::UpdateOriginPermissions(
url::kFtpScheme,
};
for (size_t j = 0; j < arraysize(schemes); ++j) {
- if (i->MatchesScheme(schemes[j])) {
- ((reason == UpdatedExtensionPermissionsInfo::REMOVED)
- ? WebSecurityPolicy::removeOriginAccessWhitelistEntry
- : WebSecurityPolicy::addOriginAccessWhitelistEntry)(
+ if (iter->MatchesScheme(schemes[j])) {
+ WebSecurityPolicy::addOriginAccessWhitelistEntry(
extension->url(),
WebString::fromUTF8(schemes[j]),
- WebString::fromUTF8(i->host()),
- i->match_subdomains());
+ WebString::fromUTF8(iter->host()),
+ iter->match_subdomains());
}
}
}

Powered by Google App Engine
This is Rietveld 408576698