Index: chrome/browser/extensions/extension_service.cc |
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc |
index 42cb3fa69ea9ea451229871e5df976d830fb9cd7..e27b2389849751e5be933a6c1a38d50441d3ff2a 100644 |
--- a/chrome/browser/extensions/extension_service.cc |
+++ b/chrome/browser/extensions/extension_service.cc |
@@ -2006,13 +2006,17 @@ void ExtensionService::AddExtension(const Extension* extension) { |
} |
bool is_extension_upgrade = false; |
- if (const Extension* old = GetInstalledExtension(extension->id())) { |
- is_extension_upgrade = true; |
- DCHECK_NE(extension, old); |
+ bool is_extension_installed = false; |
+ const Extension* old = GetInstalledExtension(extension->id()); |
+ if (old) { |
+ is_extension_installed = true; |
+ int version_compare_result = |
+ extension->version()->CompareTo(*(old->version())); |
+ is_extension_upgrade = version_compare_result > 0; |
// Other than for unpacked extensions, CrxInstaller should have guaranteed |
// that we aren't downgrading. |
if (!Manifest::IsUnpackedLocation(extension->location())) |
- CHECK_GE(extension->version()->CompareTo(*(old->version())), 0); |
+ CHECK_GE(version_compare_result, 0); |
} |
SetBeingUpgraded(extension, is_extension_upgrade); |
@@ -2027,9 +2031,9 @@ void ExtensionService::AddExtension(const Extension* extension) { |
// Check if the extension's privileges have changed and mark the |
// extension disabled if necessary. |
- CheckPermissionsIncrease(extension, is_extension_upgrade); |
+ CheckPermissionsIncrease(extension, is_extension_installed); |
- if (is_extension_upgrade && !reloading) { |
+ if (is_extension_installed && !reloading) { |
// To upgrade an extension in place, unload the old one and then load the |
// new one. ReloadExtension disables the extension, which is sufficient. |
UnloadExtension(extension->id(), extension_misc::UNLOAD_REASON_UPDATE); |
@@ -2132,7 +2136,7 @@ void ExtensionService::UpdateActivePermissions(const Extension* extension) { |
} |
void ExtensionService::CheckPermissionsIncrease(const Extension* extension, |
- bool is_extension_upgrade) { |
+ bool is_extension_installed) { |
UpdateActivePermissions(extension); |
// We keep track of all permissions the user has granted each extension. |
@@ -2159,7 +2163,7 @@ void ExtensionService::CheckPermissionsIncrease(const Extension* extension, |
int disable_reasons = extension_prefs_->GetDisableReasons(extension->id()); |
bool auto_grant_permission = |
- (!is_extension_upgrade && extension->was_installed_by_default()) || |
+ (!is_extension_installed && extension->was_installed_by_default()) || |
chrome::IsRunningInForcedAppMode(); |
// Silently grant all active permissions to default apps only on install. |
// After install they should behave like other apps. |
@@ -2187,7 +2191,7 @@ void ExtensionService::CheckPermissionsIncrease(const Extension* extension, |
extension->GetActivePermissions().get(), extension->GetType()); |
} |
- if (is_extension_upgrade) { |
+ if (is_extension_installed) { |
// If the extension was already disabled, suppress any alerts for becoming |
// disabled on permissions increase. |
bool previously_disabled = |