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

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

Issue 2299203004: Attempt to repair corrupt enterprise policy force-installed extensions (Closed)
Patch Set: switched to using installsource, addressed review comments Created 4 years, 3 months 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/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..1f41b0695ed1a11420061c20d404e28218433a96 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->IsPolicyReinstallForCorruptionExpected(extension_id))
+ return;
+ LOG(WARNING) << "Corruption detected in policy extension " << extension_id
+ << " installed at: " << extension->path().value();
+ pending_manager->ExpectPolicyReinstallForCorruption(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

Powered by Google App Engine
This is Rietveld 408576698