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

Side by Side Diff: chrome/browser/metrics/variations/variations_http_header_provider.cc

Issue 307743003: Add more Google domains to the list of domains which should have (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix more comments from avd 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/metrics/variations/variations_http_header_provider.h" 5 #include "chrome/browser/metrics/variations/variations_http_header_provider.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/memory/singleton.h" 10 #include "base/memory/singleton.h"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/string_split.h" 13 #include "base/strings/string_split.h"
14 #include "base/strings/string_util.h" 14 #include "base/strings/string_util.h"
15 #include "chrome/browser/google/google_util.h" 15 #include "chrome/browser/google/google_util.h"
16 #include "chrome/common/metrics/proto/chrome_experiments.pb.h" 16 #include "chrome/common/metrics/proto/chrome_experiments.pb.h"
17 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 17 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
18 #include "net/http/http_request_headers.h" 18 #include "net/http/http_request_headers.h"
19 #include "url/gurl.h" 19 #include "url/gurl.h"
20 20
21 namespace chrome_variations { 21 namespace chrome_variations {
22 22
23 namespace {
24
25 const char* kSuffixesToSetHeadersFor[] = {
26 "android.com",
27 "doubleclick.com",
28 "doubleclick.net",
29 "ggpht.com",
30 "googleadservices.com",
31 "googleapis.com",
32 "googlesyndication.com",
33 "googleusercontent.com",
34 "googlevideo.com",
35 "gstatic.com",
36 "ytimg.com",
37 };
38
39 } // namespace
40
23 VariationsHttpHeaderProvider* VariationsHttpHeaderProvider::GetInstance() { 41 VariationsHttpHeaderProvider* VariationsHttpHeaderProvider::GetInstance() {
24 return Singleton<VariationsHttpHeaderProvider>::get(); 42 return Singleton<VariationsHttpHeaderProvider>::get();
25 } 43 }
26 44
27 void VariationsHttpHeaderProvider::AppendHeaders( 45 void VariationsHttpHeaderProvider::AppendHeaders(
28 const GURL& url, 46 const GURL& url,
29 bool incognito, 47 bool incognito,
30 bool uma_enabled, 48 bool uma_enabled,
31 net::HttpRequestHeaders* headers) { 49 net::HttpRequestHeaders* headers) {
32 // Note the criteria for attaching Chrome experiment headers: 50 // Note the criteria for attaching Chrome experiment headers:
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 if (trigger_id) 106 if (trigger_id)
89 default_trigger_id_set_.insert(variation_id); 107 default_trigger_id_set_.insert(variation_id);
90 else 108 else
91 default_variation_ids_set_.insert(variation_id); 109 default_variation_ids_set_.insert(variation_id);
92 } 110 }
93 return true; 111 return true;
94 } 112 }
95 113
96 VariationsHttpHeaderProvider::VariationsHttpHeaderProvider() 114 VariationsHttpHeaderProvider::VariationsHttpHeaderProvider()
97 : variation_ids_cache_initialized_(false) { 115 : variation_ids_cache_initialized_(false) {
116 for (size_t i = 0; i < arraysize(kSuffixesToSetHeadersFor); ++i) {
117 suffixes_to_set_headers_for_.insert(kSuffixesToSetHeadersFor[i]);
118 }
98 } 119 }
99 120
100 VariationsHttpHeaderProvider::~VariationsHttpHeaderProvider() { 121 VariationsHttpHeaderProvider::~VariationsHttpHeaderProvider() {
101 } 122 }
102 123
103 void VariationsHttpHeaderProvider::OnFieldTrialGroupFinalized( 124 void VariationsHttpHeaderProvider::OnFieldTrialGroupFinalized(
104 const std::string& trial_name, 125 const std::string& trial_name,
105 const std::string& group_name) { 126 const std::string& group_name) {
106 VariationID new_id = 127 VariationID new_id =
107 GetGoogleVariationID(GOOGLE_WEB_PROPERTIES, trial_name, group_name); 128 GetGoogleVariationID(GOOGLE_WEB_PROPERTIES, trial_name, group_name);
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 230
210 std::string hashed; 231 std::string hashed;
211 base::Base64Encode(serialized, &hashed); 232 base::Base64Encode(serialized, &hashed);
212 // If successful, swap the header value with the new one. 233 // If successful, swap the header value with the new one.
213 // Note that the list of IDs and the header could be temporarily out of sync 234 // Note that the list of IDs and the header could be temporarily out of sync
214 // if IDs are added as the header is recreated. The receiving servers are OK 235 // if IDs are added as the header is recreated. The receiving servers are OK
215 // with such discrepancies. 236 // with such discrepancies.
216 variation_ids_header_ = hashed; 237 variation_ids_header_ = hashed;
217 } 238 }
218 239
219 // static
220 bool VariationsHttpHeaderProvider::ShouldAppendHeaders(const GURL& url) { 240 bool VariationsHttpHeaderProvider::ShouldAppendHeaders(const GURL& url) {
221 if (google_util::IsGoogleDomainUrl(url, google_util::ALLOW_SUBDOMAIN, 241 if (google_util::IsGoogleDomainUrl(url, google_util::ALLOW_SUBDOMAIN,
222 google_util::ALLOW_NON_STANDARD_PORTS)) { 242 google_util::ALLOW_NON_STANDARD_PORTS)) {
223 return true; 243 return true;
224 } 244 }
225 245
226 if (!url.is_valid() || !url.SchemeIsHTTPOrHTTPS()) 246 if (!url.is_valid() || !url.SchemeIsHTTPOrHTTPS())
227 return false; 247 return false;
228 248
229 // Some domains don't have international TLD extensions, so testing for them 249 // Some domains don't have international TLD extensions, so testing for them
230 // is very straight forward. 250 // is very straight forward.
231 const std::string host = url.host(); 251 const std::string host = url.host();
232 if (EndsWith(host, ".doubleclick.net", false) || 252 size_t suffix_start = host.length();
233 EndsWith(host, ".googlesyndication.com", false) || 253 bool found_first_dot = false;
234 LowerCaseEqualsASCII(host, "www.googleadservices.com")) { 254 for (size_t i = host.length(); i > 0; --i) {
Alexei Svitkine (slow) 2014/05/30 17:23:10 Can you use string::find_last_of() instead? (the
Ryan Hamilton 2014/05/30 19:04:38 I tried that, but it doesn't seem to work. Here's
Alexei Svitkine (slow) 2014/05/30 19:06:19 I see. Perhaps just call it twice then?
Ryan Hamilton 2014/05/30 19:24:57 Heh, sure. Done.
235 return true; 255 if (host[i - 1] != '.') {
256 continue;
257 }
258
259 if (!found_first_dot) {
260 found_first_dot = true;
261 continue;
262 }
263
264 suffix_start = i;
265 break;
266 }
267
268 if (suffix_start != host.length()) {
269 std::string suffix = StringToLowerASCII(host.substr(suffix_start));
Alexei Svitkine (slow) 2014/05/30 17:23:10 Wait, what if it's not ASCII?
Ryan Hamilton 2014/05/30 19:04:38 All of the suffixes in "suffixes_to_set_headers_fo
270 if (ContainsKey(suffixes_to_set_headers_for_, suffix)) {
Alexei Svitkine (slow) 2014/05/30 17:23:10 Nit: No {}'s
Ryan Hamilton 2014/05/30 19:04:38 Done.
271 return true;
272 }
236 } 273 }
237 274
238 // The below mirrors logic in IsGoogleDomainUrl(), but for youtube.<TLD>. 275 // The below mirrors logic in IsGoogleDomainUrl(), but for youtube.<TLD>.
239 const size_t tld_length = net::registry_controlled_domains::GetRegistryLength( 276 const size_t tld_length = net::registry_controlled_domains::GetRegistryLength(
240 host, 277 host,
241 net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES, 278 net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES,
242 net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); 279 net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES);
243 if ((tld_length == 0) || (tld_length == std::string::npos)) 280 if ((tld_length == 0) || (tld_length == std::string::npos))
244 return false; 281 return false;
245 282
246 const std::string host_minus_tld(host, 0, host.length() - tld_length); 283 const std::string host_minus_tld(host, 0, host.length() - tld_length);
247 return LowerCaseEqualsASCII(host_minus_tld, "youtube.") || 284 return LowerCaseEqualsASCII(host_minus_tld, "youtube.") ||
248 EndsWith(host_minus_tld, ".youtube.", false); 285 EndsWith(host_minus_tld, ".youtube.", false);
249 } 286 }
250 287
251 } // namespace chrome_variations 288 } // namespace chrome_variations
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698