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

Unified Diff: chrome/browser/extensions/extension_service.cc

Issue 714133002: Add more management policy checking after extension installed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix CrOS compile Created 6 years, 1 month 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: chrome/browser/extensions/extension_service.cc
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index d8e601beb50ac115f6528daf73bf231b02b4ae96..13ee90f7e46b60681e6cb75c9053d98556057ea3 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -1434,6 +1434,7 @@ void ExtensionService::AddComponentExtension(const Extension* extension) {
AddNewOrUpdatedExtension(extension,
Extension::ENABLED,
+ Extension::DISABLE_NONE,
extensions::kInstallFlagNone,
syncer::StringOrdinal(),
std::string());
@@ -1571,7 +1572,9 @@ void ExtensionService::OnExtensionInstalled(
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
const std::string& id = extension->id();
- bool initial_enable = ShouldEnableOnInstall(extension);
+ Extension::DisableReason initial_disable_reason = Extension::DISABLE_NONE;
+ bool initial_enable =
+ ShouldEnableOnInstall(extension, &initial_disable_reason);
std::string install_parameter;
const extensions::PendingExtensionInfo* pending_extension_info =
pending_extension_manager()->GetById(id);
@@ -1605,20 +1608,21 @@ void ExtensionService::OnExtensionInstalled(
// installing the extension.
if (extension_prefs_->IsExternalExtensionUninstalled(id)) {
initial_enable = true;
+ initial_disable_reason = Extension::DISABLE_NONE;
}
}
// Unsupported requirements overrides the management policy.
if (install_flags & extensions::kInstallFlagHasRequirementErrors) {
initial_enable = false;
- extension_prefs_->AddDisableReason(
- id, Extension::DISABLE_UNSUPPORTED_REQUIREMENT);
+ initial_disable_reason = Extension::DISABLE_UNSUPPORTED_REQUIREMENT;
// If the extension was disabled because of unsupported requirements but
// now supports all requirements after an update and there are not other
// disable reasons, enable it.
} else if (extension_prefs_->GetDisableReasons(id) ==
Extension::DISABLE_UNSUPPORTED_REQUIREMENT) {
initial_enable = true;
+ initial_disable_reason = Extension::DISABLE_NONE;
extension_prefs_->ClearDisableReasons(id);
}
@@ -1662,6 +1666,7 @@ void ExtensionService::OnExtensionInstalled(
extension_prefs_->SetDelayedInstallInfo(
extension,
initial_state,
+ initial_disable_reason,
install_flags,
extensions::ExtensionPrefs::DELAY_REASON_WAIT_FOR_IDLE,
page_ordinal,
@@ -1682,6 +1687,7 @@ void ExtensionService::OnExtensionInstalled(
extension_prefs_->SetDelayedInstallInfo(
extension,
initial_state,
+ initial_disable_reason,
install_flags,
extensions::ExtensionPrefs::DELAY_REASON_GC,
page_ordinal,
@@ -1692,6 +1698,7 @@ void ExtensionService::OnExtensionInstalled(
extension_prefs_->SetDelayedInstallInfo(
extension,
initial_state,
+ initial_disable_reason,
install_flags,
extensions::ExtensionPrefs::DELAY_REASON_WAIT_FOR_IMPORTS,
page_ordinal,
@@ -1701,6 +1708,7 @@ void ExtensionService::OnExtensionInstalled(
} else {
AddNewOrUpdatedExtension(extension,
initial_state,
+ initial_disable_reason,
install_flags,
page_ordinal,
install_parameter);
@@ -1732,13 +1740,15 @@ void ExtensionService::OnExtensionManagementSettingsChanged() {
void ExtensionService::AddNewOrUpdatedExtension(
const Extension* extension,
Extension::State initial_state,
+ Extension::DisableReason initial_disable_reason,
int install_flags,
const syncer::StringOrdinal& page_ordinal,
const std::string& install_parameter) {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
bool was_ephemeral = extension_prefs_->IsEphemeralApp(extension->id());
- extension_prefs_->OnExtensionInstalled(
- extension, initial_state, page_ordinal, install_flags, install_parameter);
+ extension_prefs_->OnExtensionInstalled(extension, initial_state,
+ initial_disable_reason, page_ordinal,
+ install_flags, install_parameter);
delayed_installs_.Remove(extension->id());
if (InstallVerifier::NeedsVerification(*extension))
system_->install_verifier()->VerifyExtension(extension->id());
@@ -2152,14 +2162,25 @@ void ExtensionService::Observe(int type,
}
}
-bool ExtensionService::ShouldEnableOnInstall(const Extension* extension) {
+bool ExtensionService::ShouldEnableOnInstall(
+ const Extension* extension,
+ Extension::DisableReason* disable_reason) {
+ // Extensions disabled by managemeny policy should always be disabled, even
+ // if it's force-installed.
+ if (system_->management_policy()->MustRemainDisabled(
+ extension, disable_reason, nullptr)) {
+ return false;
+ }
+
// 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))
+ if (system_->management_policy()->MustRemainEnabled(extension, nullptr))
return true;
- if (extension_prefs_->IsExtensionDisabled(extension->id()))
+ if (extension_prefs_->IsExtensionDisabled(extension->id())) {
+ *disable_reason = Extension::DISABLE_NONE;
Finnur 2014/11/11 22:58:03 It is a bit weird to set this only when this funct
binjin 2014/11/12 16:33:18 Yes, the |disable_reason| will be ignored if true
return false;
+ }
if (FeatureSwitch::prompt_for_external_extensions()->IsEnabled()) {
// External extensions are initially disabled. We prompt the user before
@@ -2168,6 +2189,7 @@ bool ExtensionService::ShouldEnableOnInstall(const Extension* extension) {
if (extension->GetType() != Manifest::TYPE_HOSTED_APP &&
Manifest::IsExternalLocation(extension->location()) &&
!extension_prefs_->IsExternalExtensionAcknowledged(extension->id())) {
+ *disable_reason = Extension::DISABLE_NONE;
return false;
}
}

Powered by Google App Engine
This is Rietveld 408576698