summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorguohui@chromium.org <guohui@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-17 03:29:54 +0000
committerguohui@chromium.org <guohui@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-17 03:29:54 +0000
commit87abe9ea312744d8754b2ca0aa51ca32cff7189f (patch)
treec5f7668f4200676a5da2fffafb315f0e0801ecac
parent6a63c04206f3f671b7bc4dd48f975725ba2ac6cc (diff)
downloadchromium_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.cc56
-rw-r--r--chrome/browser/google/google_util.h7
-rw-r--r--chrome/browser/google/google_util_unittest.cc51
-rw-r--r--chrome/browser/metrics/variations/variations_http_header_provider.cc13
-rw-r--r--chrome/browser/signin/signin_header_helper.cc12
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;