diff options
author | guohui@chromium.org <guohui@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-17 03:29:54 +0000 |
---|---|---|
committer | guohui@chromium.org <guohui@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-17 03:29:54 +0000 |
commit | 87abe9ea312744d8754b2ca0aa51ca32cff7189f (patch) | |
tree | c5f7668f4200676a5da2fffafb315f0e0801ecac | |
parent | 6a63c04206f3f671b7bc4dd48f975725ba2ac6cc (diff) | |
download | chromium_src-87abe9ea312744d8754b2ca0aa51ca32cff7189f.zip chromium_src-87abe9ea312744d8754b2ca0aa51ca32cff7189f.tar.gz chromium_src-87abe9ea312744d8754b2ca0aa51ca32cff7189f.tar.bz2 |
Set x-chrome-connected header on youtube
BUG=384531
Review URL: https://codereview.chromium.org/331963004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@277646 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/google/google_util.cc | 56 | ||||
-rw-r--r-- | chrome/browser/google/google_util.h | 7 | ||||
-rw-r--r-- | chrome/browser/google/google_util_unittest.cc | 51 | ||||
-rw-r--r-- | chrome/browser/metrics/variations/variations_http_header_provider.cc | 13 | ||||
-rw-r--r-- | chrome/browser/signin/signin_header_helper.cc | 12 |
5 files changed, 109 insertions, 30 deletions
diff --git a/chrome/browser/google/google_util.cc b/chrome/browser/google/google_util.cc index a68e938..f4d0681 100644 --- a/chrome/browser/google/google_util.cc +++ b/chrome/browser/google/google_util.cc @@ -40,6 +40,37 @@ bool IsPathHomePageBase(const std::string& path) { return (path == "/") || (path == "/webhp"); } +// True if |host| is "[www.]<domain_in_lower_case>.<TLD>" with a valid TLD. If +// |subdomain_permission| is ALLOW_SUBDOMAIN, we check against host +// "*.<domain_in_lower_case>.<TLD>" instead. +bool IsValidHostName(const std::string& host, + const std::string& domain_in_lower_case, + google_util::SubdomainPermission subdomain_permission) { + size_t tld_length = net::registry_controlled_domains::GetRegistryLength( + host, + net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES, + net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); + if ((tld_length == 0) || (tld_length == std::string::npos)) + return false; + // Removes the tld and the preceding dot. + std::string host_minus_tld(host, 0, host.length() - tld_length - 1); + if (LowerCaseEqualsASCII(host_minus_tld, domain_in_lower_case.c_str())) + return true; + if (subdomain_permission == google_util::ALLOW_SUBDOMAIN) + return EndsWith(host_minus_tld, "." + domain_in_lower_case, false); + return LowerCaseEqualsASCII(host_minus_tld, + ("www." + domain_in_lower_case).c_str()); +} + +// True if |url| is a valid URL with HTTP or HTTPS scheme. If |port_permission| +// is DISALLOW_NON_STANDARD_PORTS, this also requires |url| to use the standard +// port for its scheme (80 for HTTP, 443 for HTTPS). +bool IsValidURL(const GURL& url, google_util::PortPermission port_permission) { + return url.is_valid() && url.SchemeIsHTTPOrHTTPS() && + (url.port().empty() || + (port_permission == google_util::ALLOW_NON_STANDARD_PORTS)); +} + } // namespace @@ -139,26 +170,14 @@ bool IsGoogleHostname(const std::string& host, if (base_url.is_valid() && (host == base_url.host())) return true; - size_t tld_length = net::registry_controlled_domains::GetRegistryLength( - host, - net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES, - net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); - if ((tld_length == 0) || (tld_length == std::string::npos)) - return false; - std::string host_minus_tld(host, 0, host.length() - tld_length); - if (LowerCaseEqualsASCII(host_minus_tld, "google.")) - return true; - if (subdomain_permission == ALLOW_SUBDOMAIN) - return EndsWith(host_minus_tld, ".google.", false); - return LowerCaseEqualsASCII(host_minus_tld, "www.google."); + return IsValidHostName(host, "google", subdomain_permission); } bool IsGoogleDomainUrl(const GURL& url, SubdomainPermission subdomain_permission, PortPermission port_permission) { - return url.is_valid() && url.SchemeIsHTTPOrHTTPS() && - (url.port().empty() || (port_permission == ALLOW_NON_STANDARD_PORTS)) && - google_util::IsGoogleHostname(url.host(), subdomain_permission); + return IsValidURL(url, port_permission) && + IsGoogleHostname(url.host(), subdomain_permission); } bool IsGoogleHomePageUrl(const GURL& url) { @@ -188,4 +207,11 @@ bool IsGoogleSearchUrl(const GURL& url) { (!is_home_page_base && HasGoogleSearchQueryParam(url.query())); } +bool IsYoutubeDomainUrl(const GURL& url, + SubdomainPermission subdomain_permission, + PortPermission port_permission) { + return IsValidURL(url, port_permission) && + IsValidHostName(url.host(), "youtube", subdomain_permission); +} + } // namespace google_util diff --git a/chrome/browser/google/google_util.h b/chrome/browser/google/google_util.h index 67e2bb3..8037ebd 100644 --- a/chrome/browser/google/google_util.h +++ b/chrome/browser/google/google_util.h @@ -102,6 +102,13 @@ bool IsGoogleHomePageUrl(const GURL& url); // True if |url| represents a valid Google search URL. bool IsGoogleSearchUrl(const GURL& url); +// True if |url| is a valid youtube.<TLD> URL. If |port_permission| is +// DISALLOW_NON_STANDARD_PORTS, this also requires |url| to use the standard +// port for its scheme (80 for HTTP, 443 for HTTPS). +bool IsYoutubeDomainUrl(const GURL& url, + SubdomainPermission subdomain_permission, + PortPermission port_permission); + } // namespace google_util #endif // CHROME_BROWSER_GOOGLE_GOOGLE_UTIL_H__ diff --git a/chrome/browser/google/google_util_unittest.cc b/chrome/browser/google/google_util_unittest.cc index 7ff06bc..a731d40 100644 --- a/chrome/browser/google/google_util_unittest.cc +++ b/chrome/browser/google/google_util_unittest.cc @@ -354,3 +354,54 @@ TEST(GoogleUtilTest, GoogleBaseURLFixup) { EXPECT_EQ("http://www.foo.com/", google_util::CommandLineGoogleBaseURL().spec()); } + +TEST(GoogleUtilTest, YoutubeDomains) { + EXPECT_TRUE(IsYoutubeDomainUrl(GURL("http://www.youtube.com"), + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + EXPECT_TRUE(IsYoutubeDomainUrl(GURL("http://youtube.com"), + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + EXPECT_TRUE(IsYoutubeDomainUrl(GURL("http://youtube.com/path/main.html"), + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + EXPECT_FALSE(IsYoutubeDomainUrl(GURL("http://notyoutube.com"), + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + + // TLD checks. + EXPECT_TRUE(IsYoutubeDomainUrl(GURL("http://www.youtube.ca"), + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + EXPECT_TRUE(IsYoutubeDomainUrl(GURL("http://www.youtube.co.uk"), + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + EXPECT_FALSE(IsYoutubeDomainUrl(GURL("http://www.youtube.notrealtld"), + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + + // Subdomain checks. + EXPECT_TRUE(IsYoutubeDomainUrl(GURL("http://images.youtube.com"), + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + EXPECT_FALSE(IsYoutubeDomainUrl(GURL("http://images.youtube.com"), + google_util::DISALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + + // Port and scheme checks. + EXPECT_TRUE(IsYoutubeDomainUrl(GURL("http://www.youtube.com:80"), + google_util::DISALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + EXPECT_TRUE(IsYoutubeDomainUrl(GURL("https://www.youtube.com:443"), + google_util::DISALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + EXPECT_FALSE(IsYoutubeDomainUrl(GURL("http://www.youtube.com:123"), + google_util::DISALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); + EXPECT_TRUE(IsYoutubeDomainUrl(GURL("http://www.youtube.com:123"), + google_util::DISALLOW_SUBDOMAIN, + google_util::ALLOW_NON_STANDARD_PORTS)); + EXPECT_FALSE(IsYoutubeDomainUrl(GURL("file://www.youtube.com"), + google_util::DISALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); +} diff --git a/chrome/browser/metrics/variations/variations_http_header_provider.cc b/chrome/browser/metrics/variations/variations_http_header_provider.cc index 3068c24..4abed50 100644 --- a/chrome/browser/metrics/variations/variations_http_header_provider.cc +++ b/chrome/browser/metrics/variations/variations_http_header_provider.cc @@ -252,17 +252,8 @@ bool VariationsHttpHeaderProvider::ShouldAppendHeaders(const GURL& url) { return true; } - // The below mirrors logic in IsGoogleDomainUrl(), but for youtube.<TLD>. - const size_t tld_length = net::registry_controlled_domains::GetRegistryLength( - host, - net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES, - net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); - if ((tld_length == 0) || (tld_length == std::string::npos)) - return false; - - const std::string host_minus_tld(host, 0, host.length() - tld_length); - return LowerCaseEqualsASCII(host_minus_tld, "youtube.") || - EndsWith(host_minus_tld, ".youtube.", false); + return google_util::IsYoutubeDomainUrl(url, google_util::ALLOW_SUBDOMAIN, + google_util::ALLOW_NON_STANDARD_PORTS); } } // namespace chrome_variations diff --git a/chrome/browser/signin/signin_header_helper.cc b/chrome/browser/signin/signin_header_helper.cc index 864e489..fd7dee0 100644 --- a/chrome/browser/signin/signin_header_helper.cc +++ b/chrome/browser/signin/signin_header_helper.cc @@ -167,10 +167,14 @@ bool AppendMirrorRequestHeaderIfPossible( bool is_google_url = !switches::IsEnableWebBasedSignin() && is_new_profile_management && - google_util::IsGoogleDomainUrl( - url, - google_util::ALLOW_SUBDOMAIN, - google_util::DISALLOW_NON_STANDARD_PORTS); + (google_util::IsGoogleDomainUrl( + url, + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS) || + google_util::IsYoutubeDomainUrl( + url, + google_util::ALLOW_SUBDOMAIN, + google_util::DISALLOW_NON_STANDARD_PORTS)); if (!is_google_url && !IsDriveOrigin(origin)) return false; |