| 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..6a68371beee3eaf40cc2d27d316724ca6ea0baa1 100644
|
| --- a/chrome/browser/extensions/permissions_updater.cc
|
| +++ b/chrome/browser/extensions/permissions_updater.cc
|
| @@ -110,7 +110,12 @@ void SegregateUrlPermissions(const URLPatternSet& url_patterns,
|
| } // namespace
|
|
|
| PermissionsUpdater::PermissionsUpdater(content::BrowserContext* browser_context)
|
| - : browser_context_(browser_context) {
|
| + : browser_context_(browser_context), init_flag_(INIT_FLAG_NONE) {
|
| +}
|
| +
|
| +PermissionsUpdater::PermissionsUpdater(content::BrowserContext* browser_context,
|
| + InitFlag init_flag)
|
| + : browser_context_(browser_context), init_flag_(init_flag) {
|
| }
|
|
|
| PermissionsUpdater::~PermissionsUpdater() {}
|
| @@ -164,17 +169,28 @@ 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);
|
| -
|
| - // Withhold permissions only if the switch applies to this extension and the
|
| - // extension doesn't have the preference to allow scripting on all urls.
|
| + 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 if the switch applies to this extension.
|
| + // Non-transient extensions also must not have the preference to allow
|
| + // scripting on all urls.
|
| bool should_withhold_permissions =
|
| - util::ScriptsMayRequireActionForExtension(extension) &&
|
| - !util::AllowedScriptingOnAllUrls(extension->id(), browser_context_);
|
| + util::ScriptsMayRequireActionForExtension(extension);
|
| + if ((init_flag_ & INIT_FLAG_TRANSIENT) == 0) {
|
| + should_withhold_permissions &=
|
| + !util::AllowedScriptingOnAllUrls(extension->id(), browser_context_);
|
| + }
|
|
|
| URLPatternSet granted_explicit_hosts;
|
| URLPatternSet withheld_explicit_hosts;
|
| @@ -286,8 +302,10 @@ void PermissionsUpdater::SetPermissions(
|
| withheld = withheld.get() ? withheld
|
| : extension->permissions_data()->withheld_permissions();
|
| extension->permissions_data()->SetPermissions(active, withheld);
|
| - ExtensionPrefs::Get(browser_context_)->SetActivePermissions(
|
| - extension->id(), active.get());
|
| + if ((init_flag_ & INIT_FLAG_TRANSIENT) == 0) {
|
| + ExtensionPrefs::Get(browser_context_)
|
| + ->SetActivePermissions(extension->id(), active.get());
|
| + }
|
| }
|
|
|
| void PermissionsUpdater::DispatchEvent(
|
| @@ -311,6 +329,7 @@ void PermissionsUpdater::NotifyPermissionsUpdated(
|
| EventType event_type,
|
| const Extension* extension,
|
| const PermissionSet* changed) {
|
| + DCHECK((init_flag_ & INIT_FLAG_TRANSIENT) == 0);
|
| if (!changed || changed->IsEmpty())
|
| return;
|
|
|
|
|