Chromium Code Reviews| Index: chrome/browser/extensions/extension_util.cc |
| diff --git a/chrome/browser/extensions/extension_util.cc b/chrome/browser/extensions/extension_util.cc |
| index 4a861653b6ebb4e3906532324f16a8e501d3f259..e4b5e82644e4cc05f464b5b6541b76373324fe5f 100644 |
| --- a/chrome/browser/extensions/extension_util.cc |
| +++ b/chrome/browser/extensions/extension_util.cc |
| @@ -54,6 +54,10 @@ const char kExtensionAllowedOnAllUrlsPrefName[] = |
| // allowed on all urls" pref. |
| const char kHasSetScriptOnAllUrlsPrefName[] = "has_set_script_all_urls"; |
| +// The entry into the prefs used to flag an extension as installed by custodian. |
| +// It is relevant only for supervised users |
| +const char kWasInstalledByCustodianPrefName[] = "was_installed_by_custodian"; |
| + |
| // Returns true if |extension| should always be enabled in incognito mode. |
| bool IsWhitelistedForIncognito(const Extension* extension) { |
| const Feature* feature = FeatureProvider::GetBehaviorFeature( |
| @@ -220,6 +224,42 @@ void SetAllowFileAccess(const std::string& extension_id, |
| ReloadExtensionIfEnabled(extension_id, context); |
| } |
| +void SetWasInstalledByCustodian(const std::string& extension_id, |
| + content::BrowserContext* context, |
| + bool installed_by_custodian) { |
| + ExtensionPrefs::Get(context)->UpdateExtensionPref( |
| + extension_id, kWasInstalledByCustodianPrefName, |
| + new base::FundamentalValue(installed_by_custodian)); |
|
Marc Treib
2016/06/17 16:34:22
If installed_by_custodian is false, then we should
mamir
2016/06/19 11:43:09
Done.
|
| + ExtensionRegistry* registry = ExtensionRegistry::Get(context); |
| + |
| + // If the installed_by_custodian flag is reset, do nothing. |
|
Marc Treib
2016/06/17 16:34:22
Hm. Is this correct? Might we need to unload the e
mamir
2016/06/19 11:43:09
The unload would happen in the callback of "MayLoa
Marc Treib
2016/06/20 12:42:28
But UserMayLoad won't get called, right?
mamir
2016/06/20 12:46:46
in which case?
ahaaa, you refer to when the flag i
Marc Treib
2016/06/20 15:01:30
Yes. If the flag is set from "true" to "false" her
mamir
2016/06/20 16:08:08
Done.
|
| + if (!installed_by_custodian) |
| + return; |
| + |
| + // If it is already enabled, do nothing; |
| + if (registry->enabled_extensions().Contains(extension_id)) |
| + return; |
| + |
| + // If the extension is not installed, it may need to be reloaded. |
| + // Example is a pre-installed extension that was unloaded when a |
| + // supervised user flag has been received. |
| + const Extension* extension = registry->GetInstalledExtension(extension_id); |
| + if (!extension) { |
| + ExtensionService* service = |
| + ExtensionSystem::Get(context)->extension_service(); |
| + service->ReloadExtension(extension_id); |
| + } |
| +} |
| + |
| +bool WasInstalledByCustodian(const std::string& extension_id, |
| + content::BrowserContext* context) { |
| + bool installed_by_custodian = false; |
| + ExtensionPrefs* prefs = ExtensionPrefs::Get(context); |
| + prefs->ReadPrefAsBoolean(extension_id, kWasInstalledByCustodianPrefName, |
| + &installed_by_custodian); |
| + return installed_by_custodian; |
| +} |
| + |
| bool AllowedScriptingOnAllUrls(const std::string& extension_id, |
| content::BrowserContext* context) { |
| bool allowed = false; |
| @@ -378,8 +418,9 @@ bool CanHostedAppsOpenInWindows() { |
| #endif |
| } |
| -bool IsExtensionSupervised(const Extension* extension, const Profile* profile) { |
| - return extension->was_installed_by_custodian() && profile->IsSupervised(); |
| +bool IsExtensionSupervised(const Extension* extension, Profile* profile) { |
| + return WasInstalledByCustodian(extension->id(), profile) && |
| + profile->IsSupervised(); |
| } |
| bool NeedCustodianApprovalForPermissionIncrease(const Profile* profile) { |