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

Unified Diff: chrome/browser/chrome_elf_init_win.cc

Issue 311893005: Can now adjust the number of retries before the blacklist is disabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adding setup failure counter, UMA recording and unit tests Created 6 years, 6 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/chrome_elf_init_win.cc
diff --git a/chrome/browser/chrome_elf_init_win.cc b/chrome/browser/chrome_elf_init_win.cc
index 042f3d1a4063383134df0cf06f5f238598af6837..71d54d41f33db4a18d8ed61a9325fe2b768f3333 100644
--- a/chrome/browser/chrome_elf_init_win.cc
+++ b/chrome/browser/chrome_elf_init_win.cc
@@ -18,6 +18,8 @@
const char kBrowserBlacklistTrialName[] = "BrowserBlacklist";
const char kBrowserBlacklistTrialDisabledGroupName[] = "NoBlacklist";
+const DWORD kBeaconAttempts = 2;
+
namespace {
// How long to wait, in seconds, before reporting for the second (and last
@@ -103,6 +105,17 @@ void InitializeChromeElf() {
base::TimeDelta::FromSeconds(kBlacklistReportingDelaySec));
}
+void GetBlacklistFailedCount(DWORD* failed_count) {
+ base::win::RegKey key(HKEY_CURRENT_USER,
+ blacklist::kRegistryBeaconPath,
+ KEY_QUERY_VALUE | KEY_SET_VALUE);
+ bool count_exists = key.HasValue(blacklist::kBeaconFailedCount);
+ if (!count_exists)
+ key.WriteValue(blacklist::kBeaconFailedCount, static_cast<DWORD>(0));
+
+ key.ReadValueDW(blacklist::kBeaconFailedCount, failed_count);
+}
+
void BrowserBlacklistBeaconSetup() {
base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER,
blacklist::kRegistryBeaconPath,
@@ -118,6 +131,16 @@ void BrowserBlacklistBeaconSetup() {
if (blacklist_state == blacklist::BLACKLIST_ENABLED) {
RecordBlacklistSetupEvent(BLACKLIST_SETUP_RAN_SUCCESSFULLY);
+
+ // The blacklist was enabled successfully so we record the event (along with
+ // the number of failed previous attempts) and reset the failure count.
+ DWORD failed_attempt_count = 0;
+ GetBlacklistFailedCount(&failed_attempt_count);
+ UMA_HISTOGRAM_COUNTS("Blacklist.RetryWorked", failed_attempt_count);
+
+ blacklist_registry_key.WriteValue(blacklist::kBeaconFailedCount,
+ static_cast<DWORD>(0));
+
} else {
switch (blacklist_state) {
case blacklist::BLACKLIST_SETUP_RUNNING:
@@ -131,11 +154,24 @@ void BrowserBlacklistBeaconSetup() {
break;
}
- // Since some part of the blacklist failed, mark it as disabled
- // for this version.
+ // Some part of the blacklist failed. If this has occured some minimum
+ // number of times in a row we give up, disable it, and record the
+ // disabling event with UMA.
if (blacklist_state != blacklist::BLACKLIST_DISABLED) {
- blacklist_registry_key.WriteValue(blacklist::kBeaconState,
- blacklist::BLACKLIST_DISABLED);
+ DWORD failed_attempt_count = 0;
+ GetBlacklistFailedCount(&failed_attempt_count);
+ failed_attempt_count = failed_attempt_count + 1;
+
+ if (failed_attempt_count >= kBeaconAttempts) {
+ blacklist_registry_key.WriteValue(blacklist::kBeaconState,
+ blacklist::BLACKLIST_DISABLED);
+ UMA_HISTOGRAM_COUNTS("Blacklist.Disabled", true);
+ } else {
+ blacklist_registry_key.WriteValue(blacklist::kBeaconFailedCount,
+ failed_attempt_count);
+ blacklist_registry_key.WriteValue(blacklist::kBeaconState,
+ blacklist::BLACKLIST_ENABLED);
+ }
}
}
@@ -145,7 +181,8 @@ void BrowserBlacklistBeaconSetup() {
&blacklist_version);
if (blacklist_version != TEXT(CHROME_VERSION_STRING)) {
- // The blacklist hasn't been enabled for this version yet, so enable it.
+ // The blacklist hasn't been enabled for this version yet, so enable it
+ // and reset the failure count to zero.
LONG set_version = blacklist_registry_key.WriteValue(
blacklist::kBeaconVersion,
TEXT(CHROME_VERSION_STRING));
@@ -154,6 +191,9 @@ void BrowserBlacklistBeaconSetup() {
blacklist::kBeaconState,
blacklist::BLACKLIST_ENABLED);
+ blacklist_registry_key.WriteValue(blacklist::kBeaconFailedCount,
+ static_cast<DWORD>(0));
+
// Only report the blacklist as getting setup when both registry writes
// succeed, since otherwise the blacklist wasn't properly setup.
if (set_version == ERROR_SUCCESS && set_state == ERROR_SUCCESS)

Powered by Google App Engine
This is Rietveld 408576698