Chromium Code Reviews| Index: chrome/browser/metrics/variations/variations_http_header_provider.cc |
| diff --git a/chrome/browser/metrics/variations/variations_http_header_provider.cc b/chrome/browser/metrics/variations/variations_http_header_provider.cc |
| index 90fde20a0df46a7ae25e8f91559fb7d89f735aa0..725852e4f7a8bb4fe81916ceeb176e9de9818c07 100644 |
| --- a/chrome/browser/metrics/variations/variations_http_header_provider.cc |
| +++ b/chrome/browser/metrics/variations/variations_http_header_provider.cc |
| @@ -20,6 +20,24 @@ |
| namespace chrome_variations { |
| +namespace { |
| + |
| +const char* kSuffixesToSetHeadersFor[] = { |
| + "android.com", |
| + "doubleclick.com", |
| + "doubleclick.net", |
| + "ggpht.com", |
| + "googleadservices.com", |
| + "googleapis.com", |
| + "googlesyndication.com", |
| + "googleusercontent.com", |
| + "googlevideo.com", |
| + "gstatic.com", |
| + "ytimg.com", |
| +}; |
| + |
| +} // namespace |
| + |
| VariationsHttpHeaderProvider* VariationsHttpHeaderProvider::GetInstance() { |
| return Singleton<VariationsHttpHeaderProvider>::get(); |
| } |
| @@ -95,6 +113,9 @@ bool VariationsHttpHeaderProvider::SetDefaultVariationIds( |
| VariationsHttpHeaderProvider::VariationsHttpHeaderProvider() |
| : variation_ids_cache_initialized_(false) { |
| + for (size_t i = 0; i < arraysize(kSuffixesToSetHeadersFor); ++i) { |
| + suffixes_to_set_headers_for_.insert(kSuffixesToSetHeadersFor[i]); |
| + } |
| } |
| VariationsHttpHeaderProvider::~VariationsHttpHeaderProvider() { |
| @@ -216,7 +237,6 @@ void VariationsHttpHeaderProvider::UpdateVariationIDsHeaderValue() { |
| variation_ids_header_ = hashed; |
| } |
| -// static |
| bool VariationsHttpHeaderProvider::ShouldAppendHeaders(const GURL& url) { |
| if (google_util::IsGoogleDomainUrl(url, google_util::ALLOW_SUBDOMAIN, |
| google_util::ALLOW_NON_STANDARD_PORTS)) { |
| @@ -229,10 +249,27 @@ bool VariationsHttpHeaderProvider::ShouldAppendHeaders(const GURL& url) { |
| // Some domains don't have international TLD extensions, so testing for them |
| // is very straight forward. |
| const std::string host = url.host(); |
| - if (EndsWith(host, ".doubleclick.net", false) || |
| - EndsWith(host, ".googlesyndication.com", false) || |
| - LowerCaseEqualsASCII(host, "www.googleadservices.com")) { |
| - return true; |
| + size_t suffix_start = host.length(); |
| + bool found_first_dot = false; |
| + 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.
|
| + if (host[i - 1] != '.') { |
| + continue; |
| + } |
| + |
| + if (!found_first_dot) { |
| + found_first_dot = true; |
| + continue; |
| + } |
| + |
| + suffix_start = i; |
| + break; |
| + } |
| + |
| + if (suffix_start != host.length()) { |
| + 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
|
| + 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.
|
| + return true; |
| + } |
| } |
| // The below mirrors logic in IsGoogleDomainUrl(), but for youtube.<TLD>. |