Home | History | Annotate | Download | only in registry_controlled_domains
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
      6 #include "testing/gtest/include/gtest/gtest.h"
      7 #include "url/gurl.h"
      8 
      9 #include "effective_tld_names_unittest1.cc"
     10 static const char* const Perfect_Hash_Test1_stringpool = stringpool1;
     11 #undef TOTAL_KEYWORDS
     12 #undef MIN_WORD_LENGTH
     13 #undef MAX_WORD_LENGTH
     14 #undef MIN_HASH_VALUE
     15 #undef MAX_HASH_VALUE
     16 #include "effective_tld_names_unittest2.cc"
     17 static const char* const Perfect_Hash_Test2_stringpool = stringpool2;
     18 
     19 namespace net {
     20 namespace registry_controlled_domains {
     21 namespace {
     22 
     23 std::string GetDomainFromURL(const std::string& url) {
     24   return GetDomainAndRegistry(GURL(url), EXCLUDE_PRIVATE_REGISTRIES);
     25 }
     26 
     27 std::string GetDomainFromHost(const std::string& host) {
     28   return GetDomainAndRegistry(host, EXCLUDE_PRIVATE_REGISTRIES);
     29 }
     30 
     31 size_t GetRegistryLengthFromURL(
     32     const std::string& url,
     33     UnknownRegistryFilter unknown_filter) {
     34   return GetRegistryLength(GURL(url),
     35                            unknown_filter,
     36                            EXCLUDE_PRIVATE_REGISTRIES);
     37 }
     38 
     39 size_t GetRegistryLengthFromURLIncludingPrivate(
     40     const std::string& url,
     41     UnknownRegistryFilter unknown_filter) {
     42   return GetRegistryLength(GURL(url),
     43                            unknown_filter,
     44                            INCLUDE_PRIVATE_REGISTRIES);
     45 }
     46 
     47 size_t GetRegistryLengthFromHost(
     48     const std::string& host,
     49     UnknownRegistryFilter unknown_filter) {
     50   return GetRegistryLength(host, unknown_filter, EXCLUDE_PRIVATE_REGISTRIES);
     51 }
     52 
     53 bool CompareDomains(const std::string& url1, const std::string& url2) {
     54   GURL g1 = GURL(url1);
     55   GURL g2 = GURL(url2);
     56   return SameDomainOrHost(g1, g2, EXCLUDE_PRIVATE_REGISTRIES);
     57 }
     58 
     59 }  // namespace
     60 
     61 class RegistryControlledDomainTest : public testing::Test {
     62  protected:
     63   void UseDomainData(FindDomainPtr function, const char* const stringpool) {
     64     SetFindDomainFunctionAndStringPoolForTesting(function, stringpool);
     65   }
     66 
     67   virtual void TearDown() {
     68     SetFindDomainFunctionAndStringPoolForTesting(NULL, NULL);
     69   }
     70 };
     71 
     72 TEST_F(RegistryControlledDomainTest, TestGetDomainAndRegistry) {
     73   UseDomainData(Perfect_Hash_Test1::FindDomain, Perfect_Hash_Test1_stringpool);
     74 
     75   // Test GURL version of GetDomainAndRegistry().
     76   EXPECT_EQ("baz.jp", GetDomainFromURL("http://a.baz.jp/file.html"));    // 1
     77   EXPECT_EQ("baz.jp.", GetDomainFromURL("http://a.baz.jp./file.html"));  // 1
     78   EXPECT_EQ("", GetDomainFromURL("http://ac.jp"));                       // 2
     79   EXPECT_EQ("", GetDomainFromURL("http://a.bar.jp"));                    // 3
     80   EXPECT_EQ("", GetDomainFromURL("http://bar.jp"));                      // 3
     81   EXPECT_EQ("", GetDomainFromURL("http://baz.bar.jp"));                  // 3 4
     82   EXPECT_EQ("a.b.baz.bar.jp", GetDomainFromURL("http://a.b.baz.bar.jp"));
     83                                                                          // 4
     84   EXPECT_EQ("pref.bar.jp", GetDomainFromURL("http://baz.pref.bar.jp"));  // 5
     85   EXPECT_EQ("b.bar.baz.com.", GetDomainFromURL("http://a.b.bar.baz.com."));
     86                                                                          // 6
     87   EXPECT_EQ("a.d.c", GetDomainFromURL("http://a.d.c"));                  // 7
     88   EXPECT_EQ("a.d.c", GetDomainFromURL("http://.a.d.c"));                 // 7
     89   EXPECT_EQ("a.d.c", GetDomainFromURL("http://..a.d.c"));                // 7
     90   EXPECT_EQ("b.c", GetDomainFromURL("http://a.b.c"));                    // 7 8
     91   EXPECT_EQ("baz.com", GetDomainFromURL("http://baz.com"));              // none
     92   EXPECT_EQ("baz.com.", GetDomainFromURL("http://baz.com."));            // none
     93 
     94   EXPECT_EQ("", GetDomainFromURL(std::string()));
     95   EXPECT_EQ("", GetDomainFromURL("http://"));
     96   EXPECT_EQ("", GetDomainFromURL("file:///C:/file.html"));
     97   EXPECT_EQ("", GetDomainFromURL("http://foo.com.."));
     98   EXPECT_EQ("", GetDomainFromURL("http://..."));
     99   EXPECT_EQ("", GetDomainFromURL("http://192.168.0.1"));
    100   EXPECT_EQ("", GetDomainFromURL("http://localhost"));
    101   EXPECT_EQ("", GetDomainFromURL("http://localhost."));
    102   EXPECT_EQ("", GetDomainFromURL("http:////Comment"));
    103 
    104   // Test std::string version of GetDomainAndRegistry().  Uses the same
    105   // underpinnings as the GURL version, so this is really more of a check of
    106   // CanonicalizeHost().
    107   EXPECT_EQ("baz.jp", GetDomainFromHost("a.baz.jp"));                  // 1
    108   EXPECT_EQ("baz.jp.", GetDomainFromHost("a.baz.jp."));                // 1
    109   EXPECT_EQ("", GetDomainFromHost("ac.jp"));                           // 2
    110   EXPECT_EQ("", GetDomainFromHost("a.bar.jp"));                        // 3
    111   EXPECT_EQ("", GetDomainFromHost("bar.jp"));                          // 3
    112   EXPECT_EQ("", GetDomainFromHost("baz.bar.jp"));                      // 3 4
    113   EXPECT_EQ("a.b.baz.bar.jp", GetDomainFromHost("a.b.baz.bar.jp"));    // 3 4
    114   EXPECT_EQ("pref.bar.jp", GetDomainFromHost("baz.pref.bar.jp"));      // 5
    115   EXPECT_EQ("b.bar.baz.com.", GetDomainFromHost("a.b.bar.baz.com."));  // 6
    116   EXPECT_EQ("a.d.c", GetDomainFromHost("a.d.c"));                      // 7
    117   EXPECT_EQ("a.d.c", GetDomainFromHost(".a.d.c"));                     // 7
    118   EXPECT_EQ("a.d.c", GetDomainFromHost("..a.d.c"));                    // 7
    119   EXPECT_EQ("b.c", GetDomainFromHost("a.b.c"));                        // 7 8
    120   EXPECT_EQ("baz.com", GetDomainFromHost("baz.com"));                  // none
    121   EXPECT_EQ("baz.com.", GetDomainFromHost("baz.com."));                // none
    122 
    123   EXPECT_EQ("", GetDomainFromHost(std::string()));
    124   EXPECT_EQ("", GetDomainFromHost("foo.com.."));
    125   EXPECT_EQ("", GetDomainFromHost("..."));
    126   EXPECT_EQ("", GetDomainFromHost("192.168.0.1"));
    127   EXPECT_EQ("", GetDomainFromHost("localhost."));
    128   EXPECT_EQ("", GetDomainFromHost(".localhost."));
    129 }
    130 
    131 TEST_F(RegistryControlledDomainTest, TestGetRegistryLength) {
    132   UseDomainData(Perfect_Hash_Test1::FindDomain, Perfect_Hash_Test1_stringpool);
    133 
    134   // Test GURL version of GetRegistryLength().
    135   EXPECT_EQ(2U, GetRegistryLengthFromURL("http://a.baz.jp/file.html",
    136                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 1
    137   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://a.baz.jp./file.html",
    138                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 1
    139   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://ac.jp",
    140                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 2
    141   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://a.bar.jp",
    142                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 3
    143   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://bar.jp",
    144                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 3
    145   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://baz.bar.jp",
    146                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 3 4
    147   EXPECT_EQ(12U, GetRegistryLengthFromURL("http://a.b.baz.bar.jp",
    148                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 4
    149   EXPECT_EQ(6U, GetRegistryLengthFromURL("http://baz.pref.bar.jp",
    150                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 5
    151   EXPECT_EQ(11U, GetRegistryLengthFromURL("http://a.b.bar.baz.com",
    152                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 6
    153   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://a.d.c",
    154                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 7
    155   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://.a.d.c",
    156                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 7
    157   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://..a.d.c",
    158                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 7
    159   EXPECT_EQ(1U, GetRegistryLengthFromURL("http://a.b.c",
    160                                          EXCLUDE_UNKNOWN_REGISTRIES)); // 7 8
    161   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://baz.com",
    162                                          EXCLUDE_UNKNOWN_REGISTRIES)); // none
    163   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://baz.com.",
    164                                          EXCLUDE_UNKNOWN_REGISTRIES)); // none
    165   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://baz.com",
    166                                          INCLUDE_UNKNOWN_REGISTRIES)); // none
    167   EXPECT_EQ(4U, GetRegistryLengthFromURL("http://baz.com.",
    168                                          INCLUDE_UNKNOWN_REGISTRIES)); // none
    169 
    170   EXPECT_EQ(std::string::npos,
    171       GetRegistryLengthFromURL(std::string(), EXCLUDE_UNKNOWN_REGISTRIES));
    172   EXPECT_EQ(std::string::npos,
    173       GetRegistryLengthFromURL("http://", EXCLUDE_UNKNOWN_REGISTRIES));
    174   EXPECT_EQ(std::string::npos,
    175       GetRegistryLengthFromURL("file:///C:/file.html",
    176                                EXCLUDE_UNKNOWN_REGISTRIES));
    177   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://foo.com..",
    178                                          EXCLUDE_UNKNOWN_REGISTRIES));
    179   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://...",
    180                                          EXCLUDE_UNKNOWN_REGISTRIES));
    181   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://192.168.0.1",
    182                                          EXCLUDE_UNKNOWN_REGISTRIES));
    183   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost",
    184                                          EXCLUDE_UNKNOWN_REGISTRIES));
    185   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost",
    186                                          INCLUDE_UNKNOWN_REGISTRIES));
    187   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.",
    188                                          EXCLUDE_UNKNOWN_REGISTRIES));
    189   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.",
    190                                          INCLUDE_UNKNOWN_REGISTRIES));
    191   EXPECT_EQ(0U, GetRegistryLengthFromURL("http:////Comment",
    192                                          EXCLUDE_UNKNOWN_REGISTRIES));
    193 
    194   // Test std::string version of GetRegistryLength().  Uses the same
    195   // underpinnings as the GURL version, so this is really more of a check of
    196   // CanonicalizeHost().
    197   EXPECT_EQ(2U, GetRegistryLengthFromHost("a.baz.jp",
    198                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 1
    199   EXPECT_EQ(3U, GetRegistryLengthFromHost("a.baz.jp.",
    200                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 1
    201   EXPECT_EQ(0U, GetRegistryLengthFromHost("ac.jp",
    202                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 2
    203   EXPECT_EQ(0U, GetRegistryLengthFromHost("a.bar.jp",
    204                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 3
    205   EXPECT_EQ(0U, GetRegistryLengthFromHost("bar.jp",
    206                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 3
    207   EXPECT_EQ(0U, GetRegistryLengthFromHost("baz.bar.jp",
    208                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 3 4
    209   EXPECT_EQ(12U, GetRegistryLengthFromHost("a.b.baz.bar.jp",
    210                                            EXCLUDE_UNKNOWN_REGISTRIES)); // 4
    211   EXPECT_EQ(6U, GetRegistryLengthFromHost("baz.pref.bar.jp",
    212                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 5
    213   EXPECT_EQ(11U, GetRegistryLengthFromHost("a.b.bar.baz.com",
    214                                            EXCLUDE_UNKNOWN_REGISTRIES)); // 6
    215   EXPECT_EQ(3U, GetRegistryLengthFromHost("a.d.c",
    216                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 7
    217   EXPECT_EQ(3U, GetRegistryLengthFromHost(".a.d.c",
    218                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 7
    219   EXPECT_EQ(3U, GetRegistryLengthFromHost("..a.d.c",
    220                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 7
    221   EXPECT_EQ(1U, GetRegistryLengthFromHost("a.b.c",
    222                                           EXCLUDE_UNKNOWN_REGISTRIES));  // 7 8
    223   EXPECT_EQ(0U, GetRegistryLengthFromHost("baz.com",
    224                                           EXCLUDE_UNKNOWN_REGISTRIES));  // none
    225   EXPECT_EQ(0U, GetRegistryLengthFromHost("baz.com.",
    226                                           EXCLUDE_UNKNOWN_REGISTRIES));  // none
    227   EXPECT_EQ(3U, GetRegistryLengthFromHost("baz.com",
    228                                           INCLUDE_UNKNOWN_REGISTRIES));  // none
    229   EXPECT_EQ(4U, GetRegistryLengthFromHost("baz.com.",
    230                                           INCLUDE_UNKNOWN_REGISTRIES));  // none
    231 
    232   EXPECT_EQ(std::string::npos,
    233       GetRegistryLengthFromHost(std::string(), EXCLUDE_UNKNOWN_REGISTRIES));
    234   EXPECT_EQ(0U, GetRegistryLengthFromHost("foo.com..",
    235                                           EXCLUDE_UNKNOWN_REGISTRIES));
    236   EXPECT_EQ(0U, GetRegistryLengthFromHost("..",
    237                                           EXCLUDE_UNKNOWN_REGISTRIES));
    238   EXPECT_EQ(0U, GetRegistryLengthFromHost("192.168.0.1",
    239                                           EXCLUDE_UNKNOWN_REGISTRIES));
    240   EXPECT_EQ(0U, GetRegistryLengthFromHost("localhost",
    241                                           EXCLUDE_UNKNOWN_REGISTRIES));
    242   EXPECT_EQ(0U, GetRegistryLengthFromHost("localhost",
    243                                           INCLUDE_UNKNOWN_REGISTRIES));
    244   EXPECT_EQ(0U, GetRegistryLengthFromHost("localhost.",
    245                                           EXCLUDE_UNKNOWN_REGISTRIES));
    246   EXPECT_EQ(0U, GetRegistryLengthFromHost("localhost.",
    247                                           INCLUDE_UNKNOWN_REGISTRIES));
    248 }
    249 
    250 TEST_F(RegistryControlledDomainTest, TestSameDomainOrHost) {
    251   UseDomainData(Perfect_Hash_Test2::FindDomain, Perfect_Hash_Test2_stringpool);
    252 
    253   EXPECT_TRUE(CompareDomains("http://a.b.bar.jp/file.html",
    254                              "http://a.b.bar.jp/file.html"));  // b.bar.jp
    255   EXPECT_TRUE(CompareDomains("http://a.b.bar.jp/file.html",
    256                              "http://b.b.bar.jp/file.html"));  // b.bar.jp
    257   EXPECT_FALSE(CompareDomains("http://a.foo.jp/file.html",     // foo.jp
    258                               "http://a.not.jp/file.html"));   // not.jp
    259   EXPECT_FALSE(CompareDomains("http://a.foo.jp/file.html",     // foo.jp
    260                               "http://a.foo.jp./file.html"));  // foo.jp.
    261   EXPECT_FALSE(CompareDomains("http://a.com/file.html",        // a.com
    262                               "http://b.com/file.html"));      // b.com
    263   EXPECT_TRUE(CompareDomains("http://a.x.com/file.html",
    264                              "http://b.x.com/file.html"));     // x.com
    265   EXPECT_TRUE(CompareDomains("http://a.x.com/file.html",
    266                              "http://.x.com/file.html"));      // x.com
    267   EXPECT_TRUE(CompareDomains("http://a.x.com/file.html",
    268                              "http://..b.x.com/file.html"));   // x.com
    269   EXPECT_TRUE(CompareDomains("http://intranet/file.html",
    270                              "http://intranet/file.html"));    // intranet
    271   EXPECT_TRUE(CompareDomains("http://127.0.0.1/file.html",
    272                              "http://127.0.0.1/file.html"));   // 127.0.0.1
    273   EXPECT_FALSE(CompareDomains("http://192.168.0.1/file.html",  // 192.168.0.1
    274                               "http://127.0.0.1/file.html"));  // 127.0.0.1
    275   EXPECT_FALSE(CompareDomains("file:///C:/file.html",
    276                               "file:///C:/file.html"));        // no host
    277 }
    278 
    279 TEST_F(RegistryControlledDomainTest, TestDefaultData) {
    280   // Note that no data is set: we're using the default rules.
    281   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://google.com",
    282                                          EXCLUDE_UNKNOWN_REGISTRIES));
    283   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://stanford.edu",
    284                                          EXCLUDE_UNKNOWN_REGISTRIES));
    285   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://ustreas.gov",
    286                                          EXCLUDE_UNKNOWN_REGISTRIES));
    287   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://icann.net",
    288                                          EXCLUDE_UNKNOWN_REGISTRIES));
    289   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://ferretcentral.org",
    290                                          EXCLUDE_UNKNOWN_REGISTRIES));
    291   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://nowhere.foo",
    292                                          EXCLUDE_UNKNOWN_REGISTRIES));
    293   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://nowhere.foo",
    294                                          INCLUDE_UNKNOWN_REGISTRIES));
    295 }
    296 
    297 TEST_F(RegistryControlledDomainTest, TestPrivateRegistryHandling) {
    298   UseDomainData(Perfect_Hash_Test1::FindDomain, Perfect_Hash_Test1_stringpool);
    299 
    300   // Testing the same dataset for INCLUDE_PRIVATE_REGISTRIES and
    301   // EXCLUDE_PRIVATE_REGISTRIES arguments.
    302   // For the domain data used for this test, the private registries are
    303   // 'priv.no' and 'private'.
    304 
    305   // Non-private registries.
    306   EXPECT_EQ(2U, GetRegistryLengthFromURL("http://priv.no",
    307                                          EXCLUDE_UNKNOWN_REGISTRIES));
    308   EXPECT_EQ(2U, GetRegistryLengthFromURL("http://foo.priv.no",
    309                                          EXCLUDE_UNKNOWN_REGISTRIES));
    310   EXPECT_EQ(2U, GetRegistryLengthFromURL("http://foo.jp",
    311                                          EXCLUDE_UNKNOWN_REGISTRIES));
    312   EXPECT_EQ(2U, GetRegistryLengthFromURL("http://www.foo.jp",
    313                                          EXCLUDE_UNKNOWN_REGISTRIES));
    314   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://private",
    315                                          EXCLUDE_UNKNOWN_REGISTRIES));
    316   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://foo.private",
    317                                          EXCLUDE_UNKNOWN_REGISTRIES));
    318   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://private",
    319                                          INCLUDE_UNKNOWN_REGISTRIES));
    320   EXPECT_EQ(7U, GetRegistryLengthFromURL("http://foo.private",
    321                                          INCLUDE_UNKNOWN_REGISTRIES));
    322 
    323   // Private registries.
    324   EXPECT_EQ(0U,
    325       GetRegistryLengthFromURLIncludingPrivate("http://priv.no",
    326                                                EXCLUDE_UNKNOWN_REGISTRIES));
    327   EXPECT_EQ(7U,
    328       GetRegistryLengthFromURLIncludingPrivate("http://foo.priv.no",
    329                                                EXCLUDE_UNKNOWN_REGISTRIES));
    330   EXPECT_EQ(2U,
    331       GetRegistryLengthFromURLIncludingPrivate("http://foo.jp",
    332                                                EXCLUDE_UNKNOWN_REGISTRIES));
    333   EXPECT_EQ(2U,
    334       GetRegistryLengthFromURLIncludingPrivate("http://www.foo.jp",
    335                                                EXCLUDE_UNKNOWN_REGISTRIES));
    336   EXPECT_EQ(0U,
    337       GetRegistryLengthFromURLIncludingPrivate("http://private",
    338                                                EXCLUDE_UNKNOWN_REGISTRIES));
    339   EXPECT_EQ(7U,
    340       GetRegistryLengthFromURLIncludingPrivate("http://foo.private",
    341                                                EXCLUDE_UNKNOWN_REGISTRIES));
    342   EXPECT_EQ(0U,
    343       GetRegistryLengthFromURLIncludingPrivate("http://private",
    344                                                INCLUDE_UNKNOWN_REGISTRIES));
    345   EXPECT_EQ(7U,
    346       GetRegistryLengthFromURLIncludingPrivate("http://foo.private",
    347                                                INCLUDE_UNKNOWN_REGISTRIES));
    348 }
    349 
    350 
    351 }  // namespace registry_controlled_domains
    352 }  // namespace net
    353