1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "googleurl/src/gurl.h"
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "net/base/registry_controlled_domain.h"
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing/gtest/include/gtest/gtest.h"
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "effective_tld_names_unittest1.cc"
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#undef TOTAL_KEYWORDS
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#undef MIN_WORD_LENGTH
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#undef MAX_WORD_LENGTH
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#undef MIN_HASH_VALUE
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#undef MAX_HASH_VALUE
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "effective_tld_names_unittest2.cc"
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace net {
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace {
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass TestRegistryControlledDomainService :
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    public RegistryControlledDomainService {
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott public:
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Sets the given data.
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  static void UseDomainData(FindDomainPtr function) {
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    RegistryControlledDomainService::UseFindDomainFunction(function);
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Creates a new dedicated instance to be used for testing, deleting any
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // previously-set one.
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  static void UseDedicatedInstance() {
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    delete static_cast<TestRegistryControlledDomainService*>(
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott        SetInstance(new TestRegistryControlledDomainService()));
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Restores RegistryControlledDomainService to using its default instance,
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // deleting any previously-set test instance.
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  static void UseDefaultInstance() {
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    delete static_cast<TestRegistryControlledDomainService*>(SetInstance(NULL));
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott};
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass RegistryControlledDomainTest : public testing::Test {
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott protected:
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual void SetUp() {
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    TestRegistryControlledDomainService::UseDedicatedInstance();
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  virtual void TearDown() {
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott    TestRegistryControlledDomainService::UseDefaultInstance();
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  }
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott};
52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstd::string GetDomainFromURL(const std::string& url) {
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return TestRegistryControlledDomainService::GetDomainAndRegistry(GURL(url));
56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstd::string GetDomainFromHost(const std::wstring& host) {
59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return TestRegistryControlledDomainService::GetDomainAndRegistry(host);
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottsize_t GetRegistryLengthFromURL(const std::string& url,
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                bool allow_unknown_registries) {
64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return TestRegistryControlledDomainService::GetRegistryLength(GURL(url),
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott      allow_unknown_registries);
66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottsize_t GetRegistryLengthFromHost(const std::wstring& host,
69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                 bool allow_unknown_registries) {
70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return TestRegistryControlledDomainService::GetRegistryLength(host,
71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott      allow_unknown_registries);
72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottbool CompareDomains(const std::string& url1, const std::string& url2) {
75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  GURL g1 = GURL(url1);
76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  GURL g2 = GURL(url2);
77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  return TestRegistryControlledDomainService::SameDomainOrHost(g1, g2);
78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(RegistryControlledDomainTest, TestGetDomainAndRegistry) {
81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  TestRegistryControlledDomainService::UseDomainData(
82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott      Perfect_Hash_Test1::FindDomain);
83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Test GURL version of GetDomainAndRegistry().
85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("baz.jp", GetDomainFromURL("http://a.baz.jp/file.html"));   // 1
86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("baz.jp.", GetDomainFromURL("http://a.baz.jp./file.html")); // 1
87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://ac.jp"));                      // 2
88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://a.bar.jp"));                   // 3
89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://bar.jp"));                     // 3
90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://baz.bar.jp"));                 // 3 4
91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("a.b.baz.bar.jp", GetDomainFromURL("http://a.b.baz.bar.jp"));
92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                                                        // 4
93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("pref.bar.jp", GetDomainFromURL("http://baz.pref.bar.jp")); // 5
94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("b.bar.baz.com.", GetDomainFromURL("http://a.b.bar.baz.com."));
95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                                                        // 6
96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("a.d.c", GetDomainFromURL("http://a.d.c"));                 // 7
97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("a.d.c", GetDomainFromURL("http://.a.d.c"));                // 7
98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("a.d.c", GetDomainFromURL("http://..a.d.c"));               // 7
99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("b.c", GetDomainFromURL("http://a.b.c"));                   // 7 8
100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("baz.com", GetDomainFromURL("http://baz.com"));             // none
101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("baz.com.", GetDomainFromURL("http://baz.com."));           // none
102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL(""));
104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://"));
105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("file:///C:/file.html"));
106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://foo.com.."));
107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://..."));
108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://192.168.0.1"));
109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://localhost"));
110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http://localhost."));
111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromURL("http:////Comment"));
112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Test std::wstring version of GetDomainAndRegistry().  Uses the same
114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // underpinnings as the GURL version, so this is really more of a check of
115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // CanonicalizeHost().
116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("baz.jp", GetDomainFromHost(L"a.baz.jp"));                 // 1
117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("baz.jp.", GetDomainFromHost(L"a.baz.jp."));               // 1
118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L"ac.jp"));                          // 2
119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L"a.bar.jp"));                       // 3
120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L"bar.jp"));                         // 3
121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L"baz.bar.jp"));                     // 3 4
122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("a.b.baz.bar.jp", GetDomainFromHost(L"a.b.baz.bar.jp"));   // 3 4
123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("pref.bar.jp", GetDomainFromHost(L"baz.pref.bar.jp"));     // 5
124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("b.bar.baz.com.", GetDomainFromHost(L"a.b.bar.baz.com.")); // 6
125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("a.d.c", GetDomainFromHost(L"a.d.c"));                     // 7
126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("a.d.c", GetDomainFromHost(L".a.d.c"));                    // 7
127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("a.d.c", GetDomainFromHost(L"..a.d.c"));                   // 7
128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("b.c", GetDomainFromHost(L"a.b.c"));                       // 7 8
129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("baz.com", GetDomainFromHost(L"baz.com"));                 // none
130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("baz.com.", GetDomainFromHost(L"baz.com."));               // none
131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L""));
133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L"foo.com.."));
134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L"..."));
135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L"192.168.0.1"));
136c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L"localhost."));
137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ("", GetDomainFromHost(L".localhost."));
138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(RegistryControlledDomainTest, TestGetRegistryLength) {
141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  TestRegistryControlledDomainService::UseDomainData(
142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott      Perfect_Hash_Test1::FindDomain);
143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
144c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Test GURL version of GetRegistryLength().
145c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(2U, GetRegistryLengthFromURL("http://a.baz.jp/file.html", false));
146c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                                                        // 1
147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://a.baz.jp./file.html", false));
148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                                                        // 1
149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://ac.jp", false));       // 2
150c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://a.bar.jp", false));    // 3
151c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://bar.jp", false));      // 3
152c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://baz.bar.jp", false));  // 3 4
153c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(12U, GetRegistryLengthFromURL("http://a.b.baz.bar.jp", false));
154c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                                                        // 4
155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(6U, GetRegistryLengthFromURL("http://baz.pref.bar.jp", false));
156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                                                        // 5
157c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(11U, GetRegistryLengthFromURL("http://a.b.bar.baz.com", false));
158c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                                                        // 6
159c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://a.d.c", false));       // 7
160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://.a.d.c", false));      // 7
161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://..a.d.c", false));     // 7
162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(1U, GetRegistryLengthFromURL("http://a.b.c", false));       // 7 8
163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://baz.com", false));     // none
164c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://baz.com.", false));    // none
165c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://baz.com", true));      // none
166c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(4U, GetRegistryLengthFromURL("http://baz.com.", true));     // none
167c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
168c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(std::string::npos, GetRegistryLengthFromURL("", false));
169c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(std::string::npos, GetRegistryLengthFromURL("http://", false));
170c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(std::string::npos,
171c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott            GetRegistryLengthFromURL("file:///C:/file.html", false));
172c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://foo.com..", false));
173c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://...", false));
174c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://192.168.0.1", false));
175c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost", false));
176c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost", true));
177c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.", false));
178c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.", true));
179c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http:////Comment", false));
180c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
181c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Test std::wstring version of GetRegistryLength().  Uses the same
182c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // underpinnings as the GURL version, so this is really more of a check of
183c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // CanonicalizeHost().
184c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(2U, GetRegistryLengthFromHost(L"a.baz.jp", false));         // 1
185c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromHost(L"a.baz.jp.", false));        // 1
186c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"ac.jp", false));            // 2
187c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"a.bar.jp", false));         // 3
188c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"bar.jp", false));           // 3
189c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"baz.bar.jp", false));       // 3 4
190c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(12U, GetRegistryLengthFromHost(L"a.b.baz.bar.jp", false));  // 4
191c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(6U, GetRegistryLengthFromHost(L"baz.pref.bar.jp", false));  // 5
192c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(11U, GetRegistryLengthFromHost(L"a.b.bar.baz.com", false));
193c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott                                                                        // 6
194c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromHost(L"a.d.c", false));            // 7
195c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromHost(L".a.d.c", false));           // 7
196c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromHost(L"..a.d.c", false));          // 7
197c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(1U, GetRegistryLengthFromHost(L"a.b.c", false));            // 7 8
198c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"baz.com", false));          // none
199c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"baz.com.", false));         // none
200c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromHost(L"baz.com", true));           // none
201c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(4U, GetRegistryLengthFromHost(L"baz.com.", true));          // none
202c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
203c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(std::string::npos, GetRegistryLengthFromHost(L"", false));
204c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"foo.com..", false));
205c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"..", false));
206c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"192.168.0.1", false));
207c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"localhost", false));
208c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"localhost", true));
209c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"localhost.", false));
210c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromHost(L"localhost.", true));
211c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
212c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
213c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(RegistryControlledDomainTest, TestSameDomainOrHost) {
214c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  TestRegistryControlledDomainService::UseDomainData(
215c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott      Perfect_Hash_Test2::FindDomain);
216c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
217731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_TRUE(CompareDomains("http://a.b.bar.jp/file.html",
218731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             "http://a.b.bar.jp/file.html")); // b.bar.jp
219731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_TRUE(CompareDomains("http://a.b.bar.jp/file.html",
220731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             "http://b.b.bar.jp/file.html")); // b.bar.jp
221731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_FALSE(CompareDomains("http://a.foo.jp/file.html",    // foo.jp
222731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                              "http://a.not.jp/file.html"));  // not.jp
223731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_FALSE(CompareDomains("http://a.foo.jp/file.html",    // foo.jp
224731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                              "http://a.foo.jp./file.html")); // foo.jp.
225731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_FALSE(CompareDomains("http://a.com/file.html",       // a.com
226731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                              "http://b.com/file.html"));     // b.com
227731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_TRUE(CompareDomains("http://a.x.com/file.html",
228731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             "http://b.x.com/file.html"));    // x.com
229731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_TRUE(CompareDomains("http://a.x.com/file.html",
230731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             "http://.x.com/file.html"));     // x.com
231731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_TRUE(CompareDomains("http://a.x.com/file.html",
232731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             "http://..b.x.com/file.html"));  // x.com
233731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_TRUE(CompareDomains("http://intranet/file.html",
234731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             "http://intranet/file.html"));   // intranet
235731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_TRUE(CompareDomains("http://127.0.0.1/file.html",
236731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                             "http://127.0.0.1/file.html"));  // 127.0.0.1
237731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_FALSE(CompareDomains("http://192.168.0.1/file.html", // 192.168.0.1
238731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                              "http://127.0.0.1/file.html")); // 127.0.0.1
239731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  EXPECT_FALSE(CompareDomains("file:///C:/file.html",
240731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                              "file:///C:/file.html"));       // no host
241c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
242c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
243c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST_F(RegistryControlledDomainTest, TestDefaultData) {
244c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  TestRegistryControlledDomainService::UseDefaultInstance();
245c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
246c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  // Note that no data is set: we're using the default rules.
247c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://google.com", false));
248c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://stanford.edu", false));
249c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://ustreas.gov", false));
250c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://icann.net", false));
251c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://ferretcentral.org", false));
252c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(0U, GetRegistryLengthFromURL("http://nowhere.foo", false));
253c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_EQ(3U, GetRegistryLengthFromURL("http://nowhere.foo", true));
254c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
255c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}  // namespace
257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}  // namespace net
258