[Hotword] Making enabling/disabling the setting enable/disable the hotword extension.
This changes also allows external component extensions to be user modifiable. However, currently hotwording is the only such component which this affects since others are not typically accessible for changing.
BUG=349573
Review URL: https://codereview.chromium.org/196753002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258106 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 80f893b..894fdbb 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -1052,16 +1052,19 @@
system_->management_policy();
extensions::ExtensionList to_disable;
+ // TODO(rlp): Clean up this code. crbug.com/353266.
const ExtensionSet& enabled_set = registry_->enabled_extensions();
for (ExtensionSet::const_iterator extension = enabled_set.begin();
extension != enabled_set.end(); ++extension) {
- if (management_policy->UserMayModifySettings(extension->get(), NULL))
+ if (management_policy->UserMayModifySettings(extension->get(), NULL) &&
+ extension->get()->location() != Manifest::EXTERNAL_COMPONENT)
to_disable.push_back(*extension);
}
const ExtensionSet& terminated_set = registry_->terminated_extensions();
for (ExtensionSet::const_iterator extension = terminated_set.begin();
extension != terminated_set.end(); ++extension) {
- if (management_policy->UserMayModifySettings(extension->get(), NULL))
+ if (management_policy->UserMayModifySettings(extension->get(), NULL) &&
+ extension->get()->location() != Manifest::EXTERNAL_COMPONENT)
to_disable.push_back(*extension);
}
@@ -2604,8 +2607,13 @@
bool ExtensionService::ShouldEnableOnInstall(const Extension* extension) {
// Extensions installed by policy can't be disabled. So even if a previous
// installation disabled the extension, make sure it is now enabled.
- if (system_->management_policy()->MustRemainEnabled(extension, NULL))
+ // TODO(rlp): Clean up the special case for external components as noted
+ // in crbug.com/353266. For now, EXTERNAL_COMPONENT apps should be
+ // default enabled on install as before.
+ if (system_->management_policy()->MustRemainEnabled(extension, NULL) ||
+ extension->location() == Manifest::EXTERNAL_COMPONENT) {
return true;
+ }
if (extension_prefs_->IsExtensionDisabled(extension->id()))
return false;