Index: chrome/browser/extensions/chrome_content_verifier_delegate.cc |
diff --git a/chrome/browser/extensions/chrome_content_verifier_delegate.cc b/chrome/browser/extensions/chrome_content_verifier_delegate.cc |
index 0ef3815fef229ba9e69b9a38b14b02050fcba191..8088dc0bc13d63326263493c3082dad876837d18 100644 |
--- a/chrome/browser/extensions/chrome_content_verifier_delegate.cc |
+++ b/chrome/browser/extensions/chrome_content_verifier_delegate.cc |
@@ -6,7 +6,6 @@ |
#include <algorithm> |
#include <set> |
-#include <string> |
#include <vector> |
#include "base/base_switches.h" |
@@ -102,8 +101,7 @@ ContentVerifierDelegate::Mode ChromeContentVerifierDelegate::GetDefaultMode() { |
ChromeContentVerifierDelegate::ChromeContentVerifierDelegate( |
content::BrowserContext* context) |
- : context_(context), default_mode_(GetDefaultMode()) { |
-} |
+ : context_(context), default_mode_(GetDefaultMode()) {} |
ChromeContentVerifierDelegate::~ChromeContentVerifierDelegate() { |
} |
@@ -171,10 +169,19 @@ void ChromeContentVerifierDelegate::VerifyFailed( |
if (!extension) |
return; |
ExtensionSystem* system = ExtensionSystem::Get(context_); |
+ ExtensionService* service = system->extension_service(); |
Mode mode = ShouldBeVerified(*extension); |
if (mode >= ContentVerifierDelegate::ENFORCE) { |
if (!system->management_policy()->UserMayModifySettings(extension, NULL)) { |
- LogFailureForPolicyForceInstall(extension_id); |
+ PendingExtensionManager* pending_manager = |
+ service->pending_extension_manager(); |
+ if (pending_manager->IsPolicyReinstallExpected(extension_id)) |
+ return; |
+ LOG(WARNING) << "Corruption detected in policy extension " << extension_id |
+ << " installed at: " << extension->path().value(); |
+ pending_manager->ExpectPolicyReinstall(extension_id); |
+ service->DisableExtension(extension_id, Extension::DISABLE_CORRUPTED); |
+ service->CheckForExternalUpdates(); |
return; |
} |
DLOG(WARNING) << "Disabling extension " << extension_id << " ('" |
@@ -182,8 +189,7 @@ void ChromeContentVerifierDelegate::VerifyFailed( |
<< "') due to content verification failure. In tests you " |
<< "might want to use a ScopedIgnoreContentVerifierForTest " |
<< "instance to prevent this."; |
- system->extension_service()->DisableExtension(extension_id, |
- Extension::DISABLE_CORRUPTED); |
+ service->DisableExtension(extension_id, Extension::DISABLE_CORRUPTED); |
ExtensionPrefs::Get(context_)->IncrementCorruptedDisableCount(); |
UMA_HISTOGRAM_BOOLEAN("Extensions.CorruptExtensionBecameDisabled", true); |
UMA_HISTOGRAM_ENUMERATION("Extensions.CorruptExtensionDisabledReason", |
@@ -194,13 +200,5 @@ void ChromeContentVerifierDelegate::VerifyFailed( |
} |
} |
-void ChromeContentVerifierDelegate::LogFailureForPolicyForceInstall( |
- const std::string& extension_id) { |
- if (!base::ContainsKey(corrupt_policy_extensions_, extension_id)) { |
- corrupt_policy_extensions_.insert(extension_id); |
- UMA_HISTOGRAM_BOOLEAN("Extensions.CorruptPolicyExtensionWouldBeDisabled", |
- true); |
- } |
-} |
} // namespace extensions |