Index: chrome/browser/extensions/pending_extension_manager.cc |
diff --git a/chrome/browser/extensions/pending_extension_manager.cc b/chrome/browser/extensions/pending_extension_manager.cc |
index ee7759b10229fd1c1c3b6b28818bcef4deae38ab..515f01e3a019d665048fdfb5875701054cef59d4 100644 |
--- a/chrome/browser/extensions/pending_extension_manager.cc |
+++ b/chrome/browser/extensions/pending_extension_manager.cc |
@@ -7,6 +7,8 @@ |
#include <algorithm> |
#include "base/logging.h" |
+#include "base/metrics/histogram.h" |
+#include "base/stl_util.h" |
#include "base/version.h" |
#include "chrome/common/extensions/extension_constants.h" |
#include "content/public/browser/browser_thread.h" |
@@ -53,6 +55,13 @@ const PendingExtensionInfo* PendingExtensionManager::GetById( |
} |
bool PendingExtensionManager::Remove(const std::string& id) { |
+ if (base::ContainsKey(expected_policy_reinstalls_, id)) { |
+ base::TimeDelta latency = |
+ base::TimeTicks::Now() - expected_policy_reinstalls_[id]; |
+ UMA_HISTOGRAM_LONG_TIMES("Extensions.CorruptPolicyExtensionResolved", |
+ latency); |
+ expected_policy_reinstalls_.erase(id); |
+ } |
PendingExtensionList::iterator iter; |
for (iter = pending_extension_list_.begin(); |
iter != pending_extension_list_.end(); |
@@ -86,6 +95,17 @@ bool PendingExtensionManager::HasPendingExtensionFromSync() const { |
return false; |
} |
+void PendingExtensionManager::ExpectPolicyReinstallForCorruption( |
+ const ExtensionId& id) { |
+ expected_policy_reinstalls_[id] = base::TimeTicks::Now(); |
+ UMA_HISTOGRAM_BOOLEAN("Extensions.CorruptPolicyExtensionDetected", true); |
+} |
+ |
+bool PendingExtensionManager::IsPolicyReinstallForCorruptionExpected( |
+ const ExtensionId& id) const { |
+ return base::ContainsKey(expected_policy_reinstalls_, id); |
+} |
+ |
bool PendingExtensionManager::AddFromSync( |
const std::string& id, |
const GURL& update_url, |