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

Unified Diff: components/google/core/browser/google_util.cc

Issue 2498113003: Add verification that google URL has a valid TLD. (Closed)
Patch Set: Remove a blank line Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: components/google/core/browser/google_util.cc
diff --git a/components/google/core/browser/google_util.cc b/components/google/core/browser/google_util.cc
index f3e8fd432b8e35afac9835c7e8727b6ff0ac2f27..a16d55eaafdd0daa4d89de8523ad121be7cc5f84 100644
--- a/components/google/core/browser/google_util.cc
+++ b/components/google/core/browser/google_util.cc
@@ -17,6 +17,7 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "components/google/core/browser/google_switches.h"
+#include "components/google/core/browser/google_tld_list.h"
#include "components/google/core/browser/google_url_tracker.h"
#include "components/url_formatter/url_fixer.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
@@ -46,13 +47,16 @@ bool IsPathHomePageBase(base::StringPiece path) {
// True if the given canonical |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.
+// against host "*.<domain_in_lower_case>.<TLD>" instead. Will return the TLD
+// string in |tld|, if specified and the |host| can be parsed.
bool IsValidHostName(base::StringPiece host,
base::StringPiece domain_in_lower_case,
- SubdomainPermission subdomain_permission) {
+ SubdomainPermission subdomain_permission,
+ base::StringPiece* tld) {
// Fast path to avoid searching the registry set.
if (host.find(domain_in_lower_case) == base::StringPiece::npos)
return false;
+
size_t tld_length =
net::registry_controlled_domains::GetCanonicalHostRegistryLength(
host, net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES,
@@ -63,6 +67,10 @@ bool IsValidHostName(base::StringPiece host,
// Removes the tld and the preceding dot.
base::StringPiece host_minus_tld =
host.substr(0, host.length() - tld_length - 1);
+
+ if (tld)
+ *tld = host.substr(host.length() - tld_length);
+
if (base::LowerCaseEqualsASCII(host_minus_tld, domain_in_lower_case))
return true;
@@ -92,7 +100,13 @@ bool IsCanonicalHostGoogleHostname(base::StringPiece canonical_host,
if (base_url.is_valid() && (canonical_host == base_url.host_piece()))
return true;
- return IsValidHostName(canonical_host, "google", subdomain_permission);
+ base::StringPiece tld;
+ if (!IsValidHostName(canonical_host, "google", subdomain_permission, &tld))
+ return false;
+
+ CR_DEFINE_STATIC_LOCAL(std::set<std::string>, google_tlds,
+ ({GOOGLE_TLD_LIST}));
+ return base::ContainsKey(google_tlds, tld.as_string());
}
} // namespace
@@ -233,7 +247,8 @@ bool IsYoutubeDomainUrl(const GURL& url,
SubdomainPermission subdomain_permission,
PortPermission port_permission) {
return IsValidURL(url, port_permission) &&
- IsValidHostName(url.host_piece(), "youtube", subdomain_permission);
+ IsValidHostName(url.host_piece(), "youtube", subdomain_permission,
+ nullptr);
}
} // namespace google_util
« no previous file with comments | « components/google/core/browser/google_tld_list.h ('k') | components/google/core/browser/google_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698