| 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) {
|
| + 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));
|
| + if (ContainsKey(suffixes_to_set_headers_for_, suffix)) {
|
| + return true;
|
| + }
|
| }
|
|
|
| // The below mirrors logic in IsGoogleDomainUrl(), but for youtube.<TLD>.
|
|
|