Index: extensions/common/url_pattern.cc |
diff --git a/extensions/common/url_pattern.cc b/extensions/common/url_pattern.cc |
index 91ba65bec02583f4666ea4a68e76c96fe3ef66e6..7313e125a81ec4357bd05d979a67267089264b4d 100644 |
--- a/extensions/common/url_pattern.cc |
+++ b/extensions/common/url_pattern.cc |
@@ -445,24 +445,28 @@ |
if (!match_subdomains_) |
return false; |
+ // If |host_| is a recognized TLD, this will be 0. We don't include private |
+ // TLDs, so that, e.g., *.appspot.com does not imply all hosts. |
+ size_t registry_length = net::registry_controlled_domains::GetRegistryLength( |
+ host_, |
+ net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES, |
+ net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); |
// If there was more than just a TLD in the host (e.g., *.foobar.com), it |
- // doesn't imply all hosts. We don't include private TLDs, so that, e.g., |
- // *.appspot.com does not imply all hosts. |
- if (net::registry_controlled_domains::HostHasRegistryControlledDomain( |
- host_, net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES, |
- net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES)) |
+ // doesn't imply all hosts. |
+ if (registry_length > 0) |
return false; |
// At this point the host could either be just a TLD ("com") or some unknown |
// TLD-like string ("notatld"). To disambiguate between them construct a |
- // fake URL, and check the registry. |
- // |
- // If we recognized this TLD, then this is a pattern like *.com, and it |
- // should imply all hosts. |
- return net::registry_controlled_domains::HostHasRegistryControlledDomain( |
- "notatld." + host_, |
+ // fake URL, and check the registry. This returns 0 if the TLD is |
+ // unrecognized, or the length of the recognized TLD. |
+ registry_length = net::registry_controlled_domains::GetRegistryLength( |
+ base::StringPrintf("foo.%s", host_.c_str()), |
net::registry_controlled_domains::EXCLUDE_UNKNOWN_REGISTRIES, |
net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); |
+ // If we recognized this TLD, then this is a pattern like *.com, and it |
+ // should imply all hosts. Otherwise, this doesn't imply all hosts. |
+ return registry_length > 0; |
} |
bool URLPattern::MatchesSingleOrigin() const { |