| Index: net/base/registry_controlled_domains/registry_controlled_domain.cc
|
| diff --git a/net/base/registry_controlled_domains/registry_controlled_domain.cc b/net/base/registry_controlled_domains/registry_controlled_domain.cc
|
| index 5af090a891a0d51876a025e4e2d559fc10407839..5f29f89f27cacdd71154db87177dd39ab6a224da 100644
|
| --- a/net/base/registry_controlled_domains/registry_controlled_domain.cc
|
| +++ b/net/base/registry_controlled_domains/registry_controlled_domain.cc
|
| @@ -54,6 +54,7 @@
|
| #include "url/gurl.h"
|
| #include "url/origin.h"
|
| #include "url/third_party/mozilla/url_parse.h"
|
| +#include "url/url_util.h"
|
|
|
| namespace net {
|
| namespace registry_controlled_domains {
|
| @@ -190,10 +191,9 @@ base::StringPiece GetDomainAndRegistryImpl(
|
| // TODO(pkalinnikov): Eliminate this helper by exposing StringPiece as the
|
| // interface type for all the APIs.
|
| base::StringPiece GetDomainAndRegistryAsStringPiece(
|
| - const GURL& gurl,
|
| + base::StringPiece host,
|
| PrivateRegistryFilter filter) {
|
| - base::StringPiece host = gurl.host_piece();
|
| - if (host.empty() || gurl.HostIsIPAddress())
|
| + if (host.empty() || url::HostIsIPAddress(host))
|
| return base::StringPiece();
|
| return GetDomainAndRegistryImpl(host, filter);
|
| }
|
| @@ -309,11 +309,31 @@ size_t DoPermissiveGetHostRegistryLength(base::BasicStringPiece<Str> host,
|
| return canonical_rcd_len;
|
| }
|
|
|
| +bool SameDomainOrHost(base::StringPiece host1,
|
| + base::StringPiece host2,
|
| + PrivateRegistryFilter filter) {
|
| + // Quickly reject cases where either host is empty.
|
| + if (host1.empty() || host2.empty())
|
| + return false;
|
| +
|
| + // Check for exact host matches, which is faster than looking up the domain
|
| + // and registry.
|
| + if (host1 == host2)
|
| + return true;
|
| +
|
| + // Check for a domain and registry match.
|
| + const base::StringPiece& domain1 =
|
| + GetDomainAndRegistryAsStringPiece(host1, filter);
|
| + return !domain1.empty() &&
|
| + (domain1 == GetDomainAndRegistryAsStringPiece(host2, filter));
|
| +}
|
| +
|
| } // namespace
|
|
|
| std::string GetDomainAndRegistry(const GURL& gurl,
|
| PrivateRegistryFilter filter) {
|
| - return GetDomainAndRegistryAsStringPiece(gurl, filter).as_string();
|
| + return GetDomainAndRegistryAsStringPiece(gurl.host_piece(), filter)
|
| + .as_string();
|
| }
|
|
|
| std::string GetDomainAndRegistry(base::StringPiece host,
|
| @@ -329,34 +349,20 @@ bool SameDomainOrHost(
|
| const GURL& gurl1,
|
| const GURL& gurl2,
|
| PrivateRegistryFilter filter) {
|
| - // Quickly reject cases where either host is empty.
|
| - if (!gurl1.has_host() || !gurl2.has_host())
|
| - return false;
|
| -
|
| - // Check for exact host matches, which is faster than looking up the domain
|
| - // and registry.
|
| - if (gurl1.host_piece() == gurl2.host_piece())
|
| - return true;
|
| -
|
| - // Check for a domain and registry match.
|
| - const base::StringPiece& domain1 =
|
| - GetDomainAndRegistryAsStringPiece(gurl1, filter);
|
| - return !domain1.empty() &&
|
| - (domain1 == GetDomainAndRegistryAsStringPiece(gurl2, filter));
|
| + return SameDomainOrHost(gurl1.host_piece(), gurl2.host_piece(), filter);
|
| }
|
|
|
| bool SameDomainOrHost(const url::Origin& origin1,
|
| const url::Origin& origin2,
|
| PrivateRegistryFilter filter) {
|
| - return SameDomainOrHost(origin1.GetURL(), origin2.GetURL(), filter);
|
| + return SameDomainOrHost(origin1.host(), origin2.host(), filter);
|
| }
|
|
|
| bool SameDomainOrHost(const url::Origin& origin1,
|
| const base::Optional<url::Origin>& origin2,
|
| PrivateRegistryFilter filter) {
|
| - if (!origin2.has_value())
|
| - return false;
|
| - return SameDomainOrHost(origin1, origin2.value(), filter);
|
| + return origin2.has_value() &&
|
| + SameDomainOrHost(origin1, origin2.value(), filter);
|
| }
|
|
|
| size_t GetRegistryLength(
|
|
|