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 79465b8eef99940cdc21294cd3e76db0a5cd66c1..5e310a1a2cb17e580c50755817cf5f781c1390e5 100644 |
--- a/chrome/browser/chrome_elf_init_win.cc |
+++ b/chrome/browser/chrome_elf_init_win.cc |
@@ -12,13 +12,14 @@ |
#include "chrome_elf/blacklist/blacklist.h" |
#include "chrome_elf/chrome_elf_constants.h" |
#include "chrome_elf/dll_hash/dll_hash.h" |
+#include "components/variations/variations_associated_data.h" |
#include "content/public/browser/browser_thread.h" |
#include "version.h" // NOLINT |
-namespace { |
- |
const char kBrowserBlacklistTrialName[] = "BrowserBlacklist"; |
-const char kBrowserBlacklistTrialEnabledGroupName[] = "Enabled"; |
+const char kBrowserBlacklistTrialDisabledGroupName[] = "NoBlacklist"; |
+ |
+namespace { |
// How long to wait, in seconds, before reporting for the second (and last |
// time), what dlls were blocked from the browser process. |
@@ -82,12 +83,13 @@ void ReportSuccessfulBlocks() { |
void InitializeChromeElf() { |
if (base::FieldTrialList::FindFullName(kBrowserBlacklistTrialName) == |
- kBrowserBlacklistTrialEnabledGroupName) { |
- BrowserBlacklistBeaconSetup(); |
- } else { |
+ kBrowserBlacklistTrialDisabledGroupName) { |
// Disable the blacklist for all future runs by removing the beacon. |
base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER); |
blacklist_registry_key.DeleteKey(blacklist::kRegistryBeaconPath); |
+ } else { |
+ AddFinchBlacklistToRegistry(); |
+ BrowserBlacklistBeaconSetup(); |
} |
// Report all successful blacklist interceptions. |
@@ -103,6 +105,39 @@ void InitializeChromeElf() { |
base::TimeDelta::FromSeconds(kBlacklistReportingDelaySec)); |
} |
+void AddFinchBlacklistToRegistry() { |
+ std::map<std::string, std::string> params; |
+ if (chrome_variations::GetVariationParams(kBrowserBlacklistTrialName, |
+ ¶ms)) { |
+ std::map<std::string, std::string>::iterator it = params.begin(); |
+ while (it != params.end()) { |
+ base::win::RegKey finch_blacklist_registry_key(HKEY_CURRENT_USER, |
+ blacklist::kRegistryFinchListPath, |
+ KEY_QUERY_VALUE | KEY_SET_VALUE); |
+ |
+ // No point in trying to continue if the registry key isn't valid. |
+ if (!finch_blacklist_registry_key.Valid()) |
+ return; |
+ |
+ // TODO: use ansi or utf8? |
+ char* name_str = (it->first).c_str(); |
+ char* val_str = (it->second).c_str(); |
+ size_t name_len = MultiByteToWideChar(CP_UTF8, 0,name_str,-1, NULL, 0); |
+ size_t val_len = MultiByteToWideChar(CP_UTF8, 0,val_str, -1, NULL, 0); |
+ wchar_t* name = new wchar_t[name_len]; |
+ wchar_t* val = new wchar_t[val_len]; |
+ MultiByteToWideChar(CP_UTF8, 0, name_str, -1, name, name_len); |
+ MultiByteToWideChar(CP_UTF8, 0, val_str, -1, value, val_len); |
+ finch_blacklist_registry_key.WriteValue(name, val); |
+ |
+ delete[] name; |
+ delete[] val; |
+ |
+ ++it; |
+ } |
+ } |
+} |
+ |
void BrowserBlacklistBeaconSetup() { |
base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER, |
blacklist::kRegistryBeaconPath, |