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

Side by Side Diff: chrome/browser/win/chrome_elf_init.cc

Issue 2163803003: [chrome_elf] Removing blacklist finch for dynamic dll changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review fixes. Created 4 years, 4 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/win/chrome_elf_init.h ('k') | chrome/browser/win/chrome_elf_init_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/win/chrome_elf_init.h" 5 #include "chrome/browser/win/chrome_elf_init.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 88
89 } // namespace 89 } // namespace
90 90
91 void InitializeChromeElf() { 91 void InitializeChromeElf() {
92 if (base::FieldTrialList::FindFullName(kBrowserBlacklistTrialName) == 92 if (base::FieldTrialList::FindFullName(kBrowserBlacklistTrialName) ==
93 kBrowserBlacklistTrialDisabledGroupName) { 93 kBrowserBlacklistTrialDisabledGroupName) {
94 // Disable the blacklist for all future runs by removing the beacon. 94 // Disable the blacklist for all future runs by removing the beacon.
95 base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER); 95 base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER);
96 blacklist_registry_key.DeleteKey(blacklist::kRegistryBeaconPath); 96 blacklist_registry_key.DeleteKey(blacklist::kRegistryBeaconPath);
97 } else { 97 } else {
98 AddFinchBlacklistToRegistry();
99 BrowserBlacklistBeaconSetup(); 98 BrowserBlacklistBeaconSetup();
100 } 99 }
101 100
102 // Report all successful blacklist interceptions. 101 // Report all successful blacklist interceptions.
103 ReportSuccessfulBlocks(); 102 ReportSuccessfulBlocks();
104 103
105 // Schedule another task to report all successful interceptions later. 104 // Schedule another task to report all successful interceptions later.
106 // This time delay should be long enough to catch any dlls that attempt to 105 // This time delay should be long enough to catch any dlls that attempt to
107 // inject after Chrome has started up. 106 // inject after Chrome has started up.
108 content::BrowserThread::PostDelayedTask( 107 content::BrowserThread::PostDelayedTask(
109 content::BrowserThread::UI, 108 content::BrowserThread::UI,
110 FROM_HERE, 109 FROM_HERE,
111 base::Bind(&ReportSuccessfulBlocks), 110 base::Bind(&ReportSuccessfulBlocks),
112 base::TimeDelta::FromSeconds(kBlacklistReportingDelaySec)); 111 base::TimeDelta::FromSeconds(kBlacklistReportingDelaySec));
113 } 112 }
114 113
115 // Note that running multiple chrome instances with distinct user data
116 // directories could lead to deletion (and/or replacement) of the finch
117 // blacklist registry data in one instance before the second has a chance to
118 // read those values.
119 void AddFinchBlacklistToRegistry() {
120 base::win::RegKey finch_blacklist_registry_key(
121 HKEY_CURRENT_USER, blacklist::kRegistryFinchListPath, KEY_SET_VALUE);
122
123 // No point in trying to continue if the registry key isn't valid.
124 if (!finch_blacklist_registry_key.Valid())
125 return;
126
127 // Delete and recreate the key to clear the registry.
128 finch_blacklist_registry_key.DeleteKey(L"");
129 finch_blacklist_registry_key.Create(
130 HKEY_CURRENT_USER, blacklist::kRegistryFinchListPath, KEY_SET_VALUE);
131
132 std::map<std::string, std::string> params;
133 std::string value = variations::GetVariationParamValue(
134 kBrowserBlacklistTrialName, blacklist::kRegistryFinchListValueNameStr);
135 if (value.empty())
136 return;
137 base::string16 value_wcs = base::UTF8ToWide(value);
138
139 // The dll names are comma-separated in this param value. We need to turn
140 // this into REG_MULTI_SZ format (double-null terminates).
141 // Note that the strings are wide character in registry.
142 value_wcs.push_back(L'\0');
143 value_wcs.push_back(L'\0');
144 std::replace(value_wcs.begin(), value_wcs.end(), L',', L'\0');
145
146 finch_blacklist_registry_key.WriteValue(
147 blacklist::kRegistryFinchListValueName, value_wcs.data(),
148 (value_wcs.size() * sizeof(wchar_t)), REG_MULTI_SZ);
149 }
150
151 void BrowserBlacklistBeaconSetup() { 114 void BrowserBlacklistBeaconSetup() {
152 base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER, 115 base::win::RegKey blacklist_registry_key(HKEY_CURRENT_USER,
153 blacklist::kRegistryBeaconPath, 116 blacklist::kRegistryBeaconPath,
154 KEY_QUERY_VALUE | KEY_SET_VALUE); 117 KEY_QUERY_VALUE | KEY_SET_VALUE);
155 118
156 // No point in trying to continue if the registry key isn't valid. 119 // No point in trying to continue if the registry key isn't valid.
157 if (!blacklist_registry_key.Valid()) 120 if (!blacklist_registry_key.Valid())
158 return; 121 return;
159 122
160 // Record the results of the last blacklist setup. 123 // Record the results of the last blacklist setup.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 169
207 blacklist_registry_key.WriteValue(blacklist::kBeaconAttemptCount, 170 blacklist_registry_key.WriteValue(blacklist::kBeaconAttemptCount,
208 static_cast<DWORD>(0)); 171 static_cast<DWORD>(0));
209 172
210 // Only report the blacklist as getting setup when both registry writes 173 // Only report the blacklist as getting setup when both registry writes
211 // succeed, since otherwise the blacklist wasn't properly setup. 174 // succeed, since otherwise the blacklist wasn't properly setup.
212 if (set_version == ERROR_SUCCESS && set_state == ERROR_SUCCESS) 175 if (set_version == ERROR_SUCCESS && set_state == ERROR_SUCCESS)
213 RecordBlacklistSetupEvent(BLACKLIST_SETUP_ENABLED); 176 RecordBlacklistSetupEvent(BLACKLIST_SETUP_ENABLED);
214 } 177 }
215 } 178 }
OLDNEW
« no previous file with comments | « chrome/browser/win/chrome_elf_init.h ('k') | chrome/browser/win/chrome_elf_init_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698