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

Unified Diff: net/base/registry_controlled_domains/registry_controlled_domain.h

Issue 15140003: Add support for split Public Suffix List distinctions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased again Created 7 years, 7 months 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: net/base/registry_controlled_domains/registry_controlled_domain.h
diff --git a/net/base/registry_controlled_domains/registry_controlled_domain.h b/net/base/registry_controlled_domains/registry_controlled_domain.h
index f1d9a1185ce6f88d0134ea34782447eb67d075df..a427490c480844e020222e775fee824f9c8c2f33 100644
--- a/net/base/registry_controlled_domains/registry_controlled_domain.h
+++ b/net/base/registry_controlled_domains/registry_controlled_domain.h
@@ -123,95 +123,115 @@ class GURL;
struct DomainRule;
namespace net {
+namespace registry_controlled_domains {
+
+// This enum is a required parameter to all public methods declared for this
+// service. The Public Suffix List (http://publicsuffix.org/) this service
+// uses as a data source splits all effective-TLDs into two groups. The main
+// group describes registries that are acknowledged by ICANN. The second group
+// contains a list of private additions for domains that enable external users
+// to create subdomains, such as appspot.com.
+// The RegistryFilter enum lets you choose whether you want to include the
+// private additions in your lookup.
+// See this for example use cases:
+// https://wiki.mozilla.org/Public_Suffix_List/Use_Cases
+enum NET_EXPORT PrivateRegistryFilter {
+ EXCLUDE_PRIVATE_REGISTRIES = 0,
+ INCLUDE_PRIVATE_REGISTRIES
+};
-class NET_EXPORT RegistryControlledDomainService {
- public:
- // Returns the registered, organization-identifying host and all its registry
- // information, but no subdomains, from the given GURL. Returns an empty
- // string if the GURL is invalid, has no host (e.g. a file: URL), has multiple
- // trailing dots, is an IP address, has only one subcomponent (i.e. no dots
- // other than leading/trailing ones), or is itself a recognized registry
- // identifier. If no matching rule is found in the effective-TLD data (or in
- // the default data, if the resource failed to load), the last subcomponent of
- // the host is assumed to be the registry.
- //
- // Examples:
- // http://www.google.com/file.html -> "google.com" (com)
- // http://..google.com/file.html -> "google.com" (com)
- // http://google.com./file.html -> "google.com." (com)
- // http://a.b.co.uk/file.html -> "b.co.uk" (co.uk)
- // file:///C:/bar.html -> "" (no host)
- // http://foo.com../file.html -> "" (multiple trailing dots)
- // http://192.168.0.1/file.html -> "" (IP address)
- // http://bar/file.html -> "" (no subcomponents)
- // http://co.uk/file.html -> "" (host is a registry)
- // http://foo.bar/file.html -> "foo.bar" (no rule; assume bar)
- static std::string GetDomainAndRegistry(const GURL& gurl);
-
- // Like the GURL version, but takes a host (which is canonicalized internally)
- // instead of a full GURL.
- static std::string GetDomainAndRegistry(const std::string& host);
-
- // This convenience function returns true if the two GURLs both have hosts
- // and one of the following is true:
- // * They each have a known domain and registry, and it is the same for both
- // URLs. Note that this means the trailing dot, if any, must match too.
- // * They don't have known domains/registries, but the hosts are identical.
- // Effectively, callers can use this function to check whether the input URLs
- // represent hosts "on the same site".
- static bool SameDomainOrHost(const GURL& gurl1, const GURL& gurl2);
-
- // Finds the length in bytes of the registrar portion of the host in the
- // given GURL. Returns std::string::npos if the GURL is invalid or has no
- // host (e.g. a file: URL). Returns 0 if the GURL has multiple trailing dots,
- // is an IP address, has no subcomponents, or is itself a recognized registry
- // identifier. If no matching rule is found in the effective-TLD data (or in
- // the default data, if the resource failed to load), returns 0 if
- // |allow_unknown_registries| is false, or the length of the last subcomponent
- // if |allow_unknown_registries| is true.
- //
- // Examples:
- // http://www.google.com/file.html -> 3 (com)
- // http://..google.com/file.html -> 3 (com)
- // http://google.com./file.html -> 4 (com)
- // http://a.b.co.uk/file.html -> 5 (co.uk)
- // file:///C:/bar.html -> std::string::npos (no host)
- // http://foo.com../file.html -> 0 (multiple trailing
- // dots)
- // http://192.168.0.1/file.html -> 0 (IP address)
- // http://bar/file.html -> 0 (no subcomponents)
- // http://co.uk/file.html -> 0 (host is a registry)
- // http://foo.bar/file.html -> 0 or 3, depending (no rule; assume
- // bar)
- static size_t GetRegistryLength(const GURL& gurl,
- bool allow_unknown_registries);
-
- // Like the GURL version, but takes a host (which is canonicalized internally)
- // instead of a full GURL.
- static size_t GetRegistryLength(const std::string& host,
- bool allow_unknown_registries);
-
- private:
- friend class RegistryControlledDomainTest;
-
- // Internal workings of the static public methods. See above.
- static std::string GetDomainAndRegistryImpl(const std::string& host);
- static size_t GetRegistryLengthImpl(const std::string& host,
- bool allow_unknown_registries);
-
- typedef const struct DomainRule* (*FindDomainPtr)(const char *, unsigned int);
-
- // Used for unit tests, so that a different perfect hash map from the full
- // list is used. Set to NULL to use the Default function.
- static void UseFindDomainFunction(FindDomainPtr function);
-
- // Function that returns a DomainRule given a domain.
- static FindDomainPtr find_domain_function_;
-
-
- DISALLOW_IMPLICIT_CONSTRUCTORS(RegistryControlledDomainService);
+// This enum is a required parameter to the GetRegistryLength functions
+// declared for this service. Whenever there is no matching rule in the
+// effective-TLD data (or in the default data, if the resource failed to
+// load), the result will be dependent on which enum value was passed in.
+// If EXCLUDE_UNKNOWN_REGISTRIES was passed in, the resulting registry length
+// will be 0. If INCLUDE_UNKNOWN_REGISTRIES was passed in, the resulting
+// registry length will be the length of the last subcomponent (eg. 3 for
+// foobar.baz).
+enum NET_EXPORT UnknownRegistryFilter {
+ EXCLUDE_UNKNOWN_REGISTRIES = 0,
+ INCLUDE_UNKNOWN_REGISTRIES
};
+// Returns the registered, organization-identifying host and all its registry
+// information, but no subdomains, from the given GURL. Returns an empty
+// string if the GURL is invalid, has no host (e.g. a file: URL), has multiple
+// trailing dots, is an IP address, has only one subcomponent (i.e. no dots
+// other than leading/trailing ones), or is itself a recognized registry
+// identifier. If no matching rule is found in the effective-TLD data (or in
+// the default data, if the resource failed to load), the last subcomponent of
+// the host is assumed to be the registry.
+//
+// Examples:
+// http://www.google.com/file.html -> "google.com" (com)
+// http://..google.com/file.html -> "google.com" (com)
+// http://google.com./file.html -> "google.com." (com)
+// http://a.b.co.uk/file.html -> "b.co.uk" (co.uk)
+// file:///C:/bar.html -> "" (no host)
+// http://foo.com../file.html -> "" (multiple trailing dots)
+// http://192.168.0.1/file.html -> "" (IP address)
+// http://bar/file.html -> "" (no subcomponents)
+// http://co.uk/file.html -> "" (host is a registry)
+// http://foo.bar/file.html -> "foo.bar" (no rule; assume bar)
+NET_EXPORT std::string GetDomainAndRegistry(const GURL& gurl,
+ PrivateRegistryFilter filter);
+
+// Like the GURL version, but takes a host (which is canonicalized internally)
+// instead of a full GURL.
+NET_EXPORT std::string GetDomainAndRegistry(const std::string& host,
+ PrivateRegistryFilter filter);
+
+// This convenience function returns true if the two GURLs both have hosts
+// and one of the following is true:
+// * They each have a known domain and registry, and it is the same for both
+// URLs. Note that this means the trailing dot, if any, must match too.
+// * They don't have known domains/registries, but the hosts are identical.
+// Effectively, callers can use this function to check whether the input URLs
+// represent hosts "on the same site".
+NET_EXPORT bool SameDomainOrHost(const GURL& gurl1, const GURL& gurl2,
+ PrivateRegistryFilter filter);
+
+// Finds the length in bytes of the registrar portion of the host in the
+// given GURL. Returns std::string::npos if the GURL is invalid or has no
+// host (e.g. a file: URL). Returns 0 if the GURL has multiple trailing dots,
+// is an IP address, has no subcomponents, or is itself a recognized registry
+// identifier. The result is also dependent on the UnknownRegistryFilter.
+// If no matching rule is found in the effective-TLD data (or in
+// the default data, if the resource failed to load), returns 0 if
+// |unknown_filter| is EXCLUDE_UNKNOWN_REGISTRIES, or the length of the last
+// subcomponent if |unknown_filter| is INCLUDE_UNKNOWN_REGISTRIES.
+//
+// Examples:
+// http://www.google.com/file.html -> 3 (com)
+// http://..google.com/file.html -> 3 (com)
+// http://google.com./file.html -> 4 (com)
+// http://a.b.co.uk/file.html -> 5 (co.uk)
+// file:///C:/bar.html -> std::string::npos (no host)
+// http://foo.com../file.html -> 0 (multiple trailing
+// dots)
+// http://192.168.0.1/file.html -> 0 (IP address)
+// http://bar/file.html -> 0 (no subcomponents)
+// http://co.uk/file.html -> 0 (host is a registry)
+// http://foo.bar/file.html -> 0 or 3, depending (no rule; assume
+// bar)
+NET_EXPORT size_t GetRegistryLength(const GURL& gurl,
+ UnknownRegistryFilter unknown_filter,
+ PrivateRegistryFilter private_filter);
+
+// Like the GURL version, but takes a host (which is canonicalized internally)
+// instead of a full GURL.
+NET_EXPORT size_t GetRegistryLength(const std::string& host,
+ UnknownRegistryFilter unknown_filter,
+ PrivateRegistryFilter private_filter);
+
+typedef const struct DomainRule* (*FindDomainPtr)(const char *, unsigned int);
+
+// Used for unit tests, so that a different perfect hash map from the full
+// list is used. Set to NULL to use the Default function.
+NET_EXPORT_PRIVATE void SetFindDomainFunctionForTesting(
+ FindDomainPtr fn);
+
+} // namespace registry_controlled_domains
} // namespace net
#endif // NET_BASE_REGISTRY_CONTROLLED_DOMAINS_REGISTRY_CONTROLLED_DOMAIN_H_

Powered by Google App Engine
This is Rietveld 408576698