Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index 11e7842a981f6bf5e92142765f4f59333d86e36d..03c05633a45b6a9f565be199a828a759791e86de 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -2128,7 +2128,8 @@ void ExtensionService::UpdateActiveExtensionsInCrashReporter() { |
void ExtensionService::OnExtensionInstalled( |
const Extension* extension, |
bool from_webstore, |
- const syncer::StringOrdinal& page_ordinal) { |
+ const syncer::StringOrdinal& page_ordinal, |
+ bool has_requirement_errors) { |
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
// Ensure extension is deleted unless we transfer ownership. |
@@ -2175,6 +2176,20 @@ void ExtensionService::OnExtensionInstalled( |
} |
} |
+ // Unsupported requirements overrides the management policy. |
+ if (has_requirement_errors) { |
+ initial_enable = false; |
+ extension_prefs_->AddDisableReason( |
+ id, 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; |
+ extension_prefs_->ClearDisableReasons(id); |
+ } |
+ |
int include_mask = INCLUDE_ENABLED; |
include_mask |= INCLUDE_DISABLED; |
// Do not record the install histograms for upgrades. |