Index: chrome/browser/extensions/permissions_updater.cc |
diff --git a/chrome/browser/extensions/permissions_updater.cc b/chrome/browser/extensions/permissions_updater.cc |
index 385d5e9b95e7f2518a93e6dd8da62308792ad452..f4c2eb7de0834b6b4036aed4a8d1b37ed92c3d6c 100644 |
--- a/chrome/browser/extensions/permissions_updater.cc |
+++ b/chrome/browser/extensions/permissions_updater.cc |
@@ -164,11 +164,23 @@ void PermissionsUpdater::GrantActivePermissions(const Extension* extension) { |
} |
void PermissionsUpdater::InitializePermissions(const Extension* extension) { |
- scoped_refptr<const PermissionSet> active_permissions = |
- ExtensionPrefs::Get(browser_context_) |
- ->GetActivePermissions(extension->id()); |
- scoped_refptr<const PermissionSet> bounded_active = |
- GetBoundedActivePermissions(extension, active_permissions); |
+ InitializePermissions(extension, INIT_FLAG_NONE); |
+} |
+ |
+void PermissionsUpdater::InitializePermissions(const Extension* extension, |
+ InitFlag init_flag) { |
+ scoped_refptr<const PermissionSet> active_permissions(NULL); |
+ scoped_refptr<const PermissionSet> bounded_active(NULL); |
+ // If |extension| is a transient dummy extension, we do not want to look for |
+ // it in preferences. |
+ if (init_flag & INIT_FLAG_TRANSIENT) { |
+ bounded_active = active_permissions = |
+ extension->permissions_data()->active_permissions(); |
+ } else { |
+ active_permissions = ExtensionPrefs::Get(browser_context_) |
+ ->GetActivePermissions(extension->id()); |
+ bounded_active = GetBoundedActivePermissions(extension, active_permissions); |
+ } |
// Withhold permissions only if the switch applies to this extension and the |
// extension doesn't have the preference to allow scripting on all urls. |
@@ -214,7 +226,11 @@ void PermissionsUpdater::InitializePermissions(const Extension* extension) { |
ManifestPermissionSet(), |
withheld_explicit_hosts, |
withheld_scriptable_hosts); |
- SetPermissions(extension, bounded_active, withheld); |
+ |
+ if (init_flag & INIT_FLAG_TRANSIENT) |
+ SetPermissionsWithoutPrefs(extension, bounded_active, withheld); |
+ else |
+ SetPermissions(extension, bounded_active, withheld); |
} |
void PermissionsUpdater::WithholdImpliedAllHosts(const Extension* extension) { |
@@ -290,6 +306,16 @@ void PermissionsUpdater::SetPermissions( |
extension->id(), active.get()); |
} |
+void PermissionsUpdater::SetPermissionsWithoutPrefs( |
+ const Extension* extension, |
+ const scoped_refptr<const PermissionSet>& active, |
+ scoped_refptr<const PermissionSet> withheld) { |
+ withheld = withheld.get() |
+ ? withheld |
+ : extension->permissions_data()->withheld_permissions(); |
+ extension->permissions_data()->SetPermissions(active, withheld); |
+} |
+ |
void PermissionsUpdater::DispatchEvent( |
const std::string& extension_id, |
const char* event_name, |