| 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,
|
|
|