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

Side by Side Diff: net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc

Issue 2459493002: Revert of Reduce buggy usage of the registry controlled domain service. (Closed)
Patch Set: Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/strings/utf_string_conversions.h"
6 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 5 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
7 #include "testing/gtest/include/gtest/gtest.h" 6 #include "testing/gtest/include/gtest/gtest.h"
8 #include "url/gurl.h" 7 #include "url/gurl.h"
9 #include "url/origin.h" 8 #include "url/origin.h"
10 #include "url/url_features.h"
11 9
12 namespace { 10 namespace {
13
14 namespace test1 { 11 namespace test1 {
15 #include "net/base/registry_controlled_domains/effective_tld_names_unittest1-inc .cc" 12 #include "net/base/registry_controlled_domains/effective_tld_names_unittest1-inc .cc"
16 } 13 }
17 namespace test2 { 14 namespace test2 {
18 #include "net/base/registry_controlled_domains/effective_tld_names_unittest2-inc .cc" 15 #include "net/base/registry_controlled_domains/effective_tld_names_unittest2-inc .cc"
19 } 16 }
20 namespace test3 { 17 namespace test3 {
21 #include "net/base/registry_controlled_domains/effective_tld_names_unittest3-inc .cc" 18 #include "net/base/registry_controlled_domains/effective_tld_names_unittest3-inc .cc"
22 } 19 }
23 namespace test4 { 20 namespace test4 {
24 #include "net/base/registry_controlled_domains/effective_tld_names_unittest4-inc .cc" 21 #include "net/base/registry_controlled_domains/effective_tld_names_unittest4-inc .cc"
25 } 22 }
26 namespace test5 { 23 namespace test5 {
27 #include "net/base/registry_controlled_domains/effective_tld_names_unittest5-inc .cc" 24 #include "net/base/registry_controlled_domains/effective_tld_names_unittest5-inc .cc"
28 } 25 }
29 namespace test6 { 26 namespace test6 {
30 #include "net/base/registry_controlled_domains/effective_tld_names_unittest6-inc .cc" 27 #include "net/base/registry_controlled_domains/effective_tld_names_unittest6-inc .cc"
31 } 28 }
32
33 } // namespace 29 } // namespace
34 30
35 namespace net { 31 namespace net {
36 namespace registry_controlled_domains { 32 namespace registry_controlled_domains {
37
38 namespace { 33 namespace {
39 34
40 std::string GetDomainFromURL(const std::string& url) { 35 std::string GetDomainFromURL(const std::string& url) {
41 return GetDomainAndRegistry(GURL(url), EXCLUDE_PRIVATE_REGISTRIES); 36 return GetDomainAndRegistry(GURL(url), EXCLUDE_PRIVATE_REGISTRIES);
42 } 37 }
43 38
44 std::string GetDomainFromHost(const std::string& host) { 39 std::string GetDomainFromHost(const std::string& host) {
45 return GetDomainAndRegistry(host, EXCLUDE_PRIVATE_REGISTRIES); 40 return GetDomainAndRegistry(host, EXCLUDE_PRIVATE_REGISTRIES);
46 } 41 }
47 42
48 size_t GetRegistryLengthFromURL( 43 size_t GetRegistryLengthFromURL(
49 const std::string& url, 44 const std::string& url,
50 UnknownRegistryFilter unknown_filter) { 45 UnknownRegistryFilter unknown_filter) {
51 return GetRegistryLength(GURL(url), 46 return GetRegistryLength(GURL(url),
52 unknown_filter, 47 unknown_filter,
53 EXCLUDE_PRIVATE_REGISTRIES); 48 EXCLUDE_PRIVATE_REGISTRIES);
54 } 49 }
55 50
56 size_t GetRegistryLengthFromURLIncludingPrivate( 51 size_t GetRegistryLengthFromURLIncludingPrivate(
57 const std::string& url, 52 const std::string& url,
58 UnknownRegistryFilter unknown_filter) { 53 UnknownRegistryFilter unknown_filter) {
59 return GetRegistryLength(GURL(url), 54 return GetRegistryLength(GURL(url),
60 unknown_filter, 55 unknown_filter,
61 INCLUDE_PRIVATE_REGISTRIES); 56 INCLUDE_PRIVATE_REGISTRIES);
62 } 57 }
63 58
64 size_t PermissiveGetHostRegistryLength(base::StringPiece host) { 59 size_t GetRegistryLengthFromHost(
65 return PermissiveGetHostRegistryLength(host, EXCLUDE_UNKNOWN_REGISTRIES, 60 const std::string& host,
66 EXCLUDE_PRIVATE_REGISTRIES); 61 UnknownRegistryFilter unknown_filter) {
62 return GetRegistryLength(host, unknown_filter, EXCLUDE_PRIVATE_REGISTRIES);
67 } 63 }
68 64
69 // Only called when using ICU (avoids unused static function error). 65 size_t GetRegistryLengthFromHostIncludingPrivate(
70 #if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) 66 const std::string& host,
71 size_t PermissiveGetHostRegistryLength(base::StringPiece16 host) { 67 UnknownRegistryFilter unknown_filter) {
72 return PermissiveGetHostRegistryLength(host, EXCLUDE_UNKNOWN_REGISTRIES, 68 return GetRegistryLength(host, unknown_filter, INCLUDE_PRIVATE_REGISTRIES);
73 EXCLUDE_PRIVATE_REGISTRIES);
74 }
75 #endif
76
77 size_t GetCanonicalHostRegistryLength(const std::string& host,
78 UnknownRegistryFilter unknown_filter) {
79 return GetCanonicalHostRegistryLength(host, unknown_filter,
80 EXCLUDE_PRIVATE_REGISTRIES);
81 }
82
83 size_t GetCanonicalHostRegistryLengthIncludingPrivate(const std::string& host) {
84 return GetCanonicalHostRegistryLength(host, EXCLUDE_UNKNOWN_REGISTRIES,
85 INCLUDE_PRIVATE_REGISTRIES);
86 } 69 }
87 70
88 } // namespace 71 } // namespace
89 72
90 class RegistryControlledDomainTest : public testing::Test { 73 class RegistryControlledDomainTest : public testing::Test {
91 protected: 74 protected:
92 template <typename Graph> 75 template <typename Graph>
93 void UseDomainData(const Graph& graph) { 76 void UseDomainData(const Graph& graph) {
94 SetFindDomainGraph(graph, sizeof(Graph)); 77 SetFindDomainGraph(graph, sizeof(Graph));
95 } 78 }
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.", 209 EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.",
227 EXCLUDE_UNKNOWN_REGISTRIES)); 210 EXCLUDE_UNKNOWN_REGISTRIES));
228 EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.", 211 EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.",
229 INCLUDE_UNKNOWN_REGISTRIES)); 212 INCLUDE_UNKNOWN_REGISTRIES));
230 EXPECT_EQ(0U, GetRegistryLengthFromURL("http:////Comment", 213 EXPECT_EQ(0U, GetRegistryLengthFromURL("http:////Comment",
231 EXCLUDE_UNKNOWN_REGISTRIES)); 214 EXCLUDE_UNKNOWN_REGISTRIES));
232 215
233 // Test std::string version of GetRegistryLength(). Uses the same 216 // Test std::string version of GetRegistryLength(). Uses the same
234 // underpinnings as the GURL version, so this is really more of a check of 217 // underpinnings as the GURL version, so this is really more of a check of
235 // CanonicalizeHost(). 218 // CanonicalizeHost().
236 EXPECT_EQ(2U, GetCanonicalHostRegistryLength( 219 EXPECT_EQ(2U, GetRegistryLengthFromHost("a.baz.jp",
237 "a.baz.jp", EXCLUDE_UNKNOWN_REGISTRIES)); // 1 220 EXCLUDE_UNKNOWN_REGISTRIES)); // 1
238 EXPECT_EQ(3U, GetCanonicalHostRegistryLength( 221 EXPECT_EQ(3U, GetRegistryLengthFromHost("a.baz.jp.",
239 "a.baz.jp.", EXCLUDE_UNKNOWN_REGISTRIES)); // 1 222 EXCLUDE_UNKNOWN_REGISTRIES)); // 1
240 EXPECT_EQ(0U, GetCanonicalHostRegistryLength( 223 EXPECT_EQ(0U, GetRegistryLengthFromHost("ac.jp",
241 "ac.jp", EXCLUDE_UNKNOWN_REGISTRIES)); // 2 224 EXCLUDE_UNKNOWN_REGISTRIES)); // 2
242 EXPECT_EQ(0U, GetCanonicalHostRegistryLength( 225 EXPECT_EQ(0U, GetRegistryLengthFromHost("a.bar.jp",
243 "a.bar.jp", EXCLUDE_UNKNOWN_REGISTRIES)); // 3 226 EXCLUDE_UNKNOWN_REGISTRIES)); // 3
244 EXPECT_EQ(0U, GetCanonicalHostRegistryLength( 227 EXPECT_EQ(0U, GetRegistryLengthFromHost("bar.jp",
245 "bar.jp", EXCLUDE_UNKNOWN_REGISTRIES)); // 3 228 EXCLUDE_UNKNOWN_REGISTRIES)); // 3
246 EXPECT_EQ(0U, GetCanonicalHostRegistryLength( 229 EXPECT_EQ(0U, GetRegistryLengthFromHost("baz.bar.jp",
247 "baz.bar.jp", EXCLUDE_UNKNOWN_REGISTRIES)); // 3 4 230 EXCLUDE_UNKNOWN_REGISTRIES)); // 3 4
248 EXPECT_EQ(12U, GetCanonicalHostRegistryLength( 231 EXPECT_EQ(12U, GetRegistryLengthFromHost("a.b.baz.bar.jp",
249 "a.b.baz.bar.jp", EXCLUDE_UNKNOWN_REGISTRIES)); // 4 232 EXCLUDE_UNKNOWN_REGISTRIES)); // 4
250 EXPECT_EQ(6U, GetCanonicalHostRegistryLength( 233 EXPECT_EQ(6U, GetRegistryLengthFromHost("baz.pref.bar.jp",
251 "baz.pref.bar.jp", EXCLUDE_UNKNOWN_REGISTRIES)); // 5 234 EXCLUDE_UNKNOWN_REGISTRIES)); // 5
252 EXPECT_EQ(11U, GetCanonicalHostRegistryLength( 235 EXPECT_EQ(11U, GetRegistryLengthFromHost("a.b.bar.baz.com",
253 "a.b.bar.baz.com", EXCLUDE_UNKNOWN_REGISTRIES)); // 6 236 EXCLUDE_UNKNOWN_REGISTRIES)); // 6
254 EXPECT_EQ(3U, GetCanonicalHostRegistryLength( 237 EXPECT_EQ(3U, GetRegistryLengthFromHost("a.d.c",
255 "a.d.c", EXCLUDE_UNKNOWN_REGISTRIES)); // 7 238 EXCLUDE_UNKNOWN_REGISTRIES)); // 7
256 EXPECT_EQ(3U, GetCanonicalHostRegistryLength( 239 EXPECT_EQ(3U, GetRegistryLengthFromHost(".a.d.c",
257 ".a.d.c", EXCLUDE_UNKNOWN_REGISTRIES)); // 7 240 EXCLUDE_UNKNOWN_REGISTRIES)); // 7
258 EXPECT_EQ(3U, GetCanonicalHostRegistryLength( 241 EXPECT_EQ(3U, GetRegistryLengthFromHost("..a.d.c",
259 "..a.d.c", EXCLUDE_UNKNOWN_REGISTRIES)); // 7 242 EXCLUDE_UNKNOWN_REGISTRIES)); // 7
260 EXPECT_EQ(1U, GetCanonicalHostRegistryLength( 243 EXPECT_EQ(1U, GetRegistryLengthFromHost("a.b.c",
261 "a.b.c", EXCLUDE_UNKNOWN_REGISTRIES)); // 7 8 244 EXCLUDE_UNKNOWN_REGISTRIES)); // 7 8
262 EXPECT_EQ(0U, GetCanonicalHostRegistryLength( 245 EXPECT_EQ(0U, GetRegistryLengthFromHost("baz.com",
263 "baz.com", EXCLUDE_UNKNOWN_REGISTRIES)); // none 246 EXCLUDE_UNKNOWN_REGISTRIES)); // none
264 EXPECT_EQ(0U, GetCanonicalHostRegistryLength( 247 EXPECT_EQ(0U, GetRegistryLengthFromHost("baz.com.",
265 "baz.com.", EXCLUDE_UNKNOWN_REGISTRIES)); // none 248 EXCLUDE_UNKNOWN_REGISTRIES)); // none
266 EXPECT_EQ(3U, GetCanonicalHostRegistryLength( 249 EXPECT_EQ(3U, GetRegistryLengthFromHost("baz.com",
267 "baz.com", INCLUDE_UNKNOWN_REGISTRIES)); // none 250 INCLUDE_UNKNOWN_REGISTRIES)); // none
268 EXPECT_EQ(4U, GetCanonicalHostRegistryLength( 251 EXPECT_EQ(4U, GetRegistryLengthFromHost("baz.com.",
269 "baz.com.", INCLUDE_UNKNOWN_REGISTRIES)); // none 252 INCLUDE_UNKNOWN_REGISTRIES)); // none
270 253
271 EXPECT_EQ(std::string::npos, GetCanonicalHostRegistryLength( 254 EXPECT_EQ(std::string::npos,
272 std::string(), EXCLUDE_UNKNOWN_REGISTRIES)); 255 GetRegistryLengthFromHost(std::string(), EXCLUDE_UNKNOWN_REGISTRIES));
273 EXPECT_EQ(0U, GetCanonicalHostRegistryLength("foo.com..", 256 EXPECT_EQ(0U, GetRegistryLengthFromHost("foo.com..",
274 EXCLUDE_UNKNOWN_REGISTRIES)); 257 EXCLUDE_UNKNOWN_REGISTRIES));
275 EXPECT_EQ(0U, 258 EXPECT_EQ(0U, GetRegistryLengthFromHost("..",
276 GetCanonicalHostRegistryLength("..", EXCLUDE_UNKNOWN_REGISTRIES)); 259 EXCLUDE_UNKNOWN_REGISTRIES));
277 EXPECT_EQ(0U, GetCanonicalHostRegistryLength("192.168.0.1", 260 EXPECT_EQ(0U, GetRegistryLengthFromHost("192.168.0.1",
278 EXCLUDE_UNKNOWN_REGISTRIES)); 261 EXCLUDE_UNKNOWN_REGISTRIES));
279 EXPECT_EQ(0U, GetCanonicalHostRegistryLength("localhost", 262 EXPECT_EQ(0U, GetRegistryLengthFromHost("localhost",
280 EXCLUDE_UNKNOWN_REGISTRIES)); 263 EXCLUDE_UNKNOWN_REGISTRIES));
281 EXPECT_EQ(0U, GetCanonicalHostRegistryLength("localhost", 264 EXPECT_EQ(0U, GetRegistryLengthFromHost("localhost",
282 INCLUDE_UNKNOWN_REGISTRIES)); 265 INCLUDE_UNKNOWN_REGISTRIES));
283 EXPECT_EQ(0U, GetCanonicalHostRegistryLength("localhost.", 266 EXPECT_EQ(0U, GetRegistryLengthFromHost("localhost.",
284 EXCLUDE_UNKNOWN_REGISTRIES)); 267 EXCLUDE_UNKNOWN_REGISTRIES));
285 EXPECT_EQ(0U, GetCanonicalHostRegistryLength("localhost.", 268 EXPECT_EQ(0U, GetRegistryLengthFromHost("localhost.",
286 INCLUDE_UNKNOWN_REGISTRIES)); 269 INCLUDE_UNKNOWN_REGISTRIES));
287
288 // IDN case.
289 EXPECT_EQ(10U, GetCanonicalHostRegistryLength("foo.xn--fiqs8s",
290 EXCLUDE_UNKNOWN_REGISTRIES));
291 }
292
293 TEST_F(RegistryControlledDomainTest, HostHasRegistryControlledDomain) {
294 UseDomainData(test1::kDafsa);
295
296 // Invalid hosts.
297 EXPECT_FALSE(HostHasRegistryControlledDomain(
298 std::string(), EXCLUDE_UNKNOWN_REGISTRIES, EXCLUDE_PRIVATE_REGISTRIES));
299 EXPECT_FALSE(HostHasRegistryControlledDomain(
300 "%00asdf", EXCLUDE_UNKNOWN_REGISTRIES, EXCLUDE_PRIVATE_REGISTRIES));
301
302 // Invalid host but valid R.C.D.
303 EXPECT_TRUE(HostHasRegistryControlledDomain(
304 "%00foo.jp", EXCLUDE_UNKNOWN_REGISTRIES, EXCLUDE_PRIVATE_REGISTRIES));
305
306 // Valid R.C.D. when canonicalized, even with an invalid prefix and an
307 // escaped dot.
308 EXPECT_TRUE(HostHasRegistryControlledDomain("%00foo.Google%2EjP",
309 EXCLUDE_UNKNOWN_REGISTRIES,
310 EXCLUDE_PRIVATE_REGISTRIES));
311
312 // Regular, no match.
313 EXPECT_FALSE(HostHasRegistryControlledDomain(
314 "bar.notatld", EXCLUDE_UNKNOWN_REGISTRIES, EXCLUDE_PRIVATE_REGISTRIES));
315
316 // Regular, match.
317 EXPECT_TRUE(HostHasRegistryControlledDomain(
318 "www.Google.Jp", EXCLUDE_UNKNOWN_REGISTRIES, EXCLUDE_PRIVATE_REGISTRIES));
319 } 270 }
320 271
321 TEST_F(RegistryControlledDomainTest, TestSameDomainOrHost) { 272 TEST_F(RegistryControlledDomainTest, TestSameDomainOrHost) {
322 UseDomainData(test2::kDafsa); 273 UseDomainData(test2::kDafsa);
323 274
324 EXPECT_TRUE(CompareDomains("http://a.b.bar.jp/file.html", 275 EXPECT_TRUE(CompareDomains("http://a.b.bar.jp/file.html",
325 "http://a.b.bar.jp/file.html")); // b.bar.jp 276 "http://a.b.bar.jp/file.html")); // b.bar.jp
326 EXPECT_TRUE(CompareDomains("http://a.b.bar.jp/file.html", 277 EXPECT_TRUE(CompareDomains("http://a.b.bar.jp/file.html",
327 "http://b.b.bar.jp/file.html")); // b.bar.jp 278 "http://b.b.bar.jp/file.html")); // b.bar.jp
328 EXPECT_FALSE(CompareDomains("http://a.foo.jp/file.html", // foo.jp 279 EXPECT_FALSE(CompareDomains("http://a.foo.jp/file.html", // foo.jp
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 const char key0[] = 381 const char key0[] =
431 "a.b.6____________________________________________________" 382 "a.b.6____________________________________________________"
432 "________________________________________________6"; 383 "________________________________________________6";
433 const char key1[] = 384 const char key1[] =
434 "a.b.7____________________________________________________" 385 "a.b.7____________________________________________________"
435 "________________________________________________7"; 386 "________________________________________________7";
436 const char key2[] = 387 const char key2[] =
437 "a.b.a____________________________________________________" 388 "a.b.a____________________________________________________"
438 "________________________________________________8"; 389 "________________________________________________8";
439 390
391 EXPECT_EQ(102U, GetRegistryLengthFromHost(key0, EXCLUDE_UNKNOWN_REGISTRIES));
392 EXPECT_EQ(0U, GetRegistryLengthFromHost(key1, EXCLUDE_UNKNOWN_REGISTRIES));
440 EXPECT_EQ(102U, 393 EXPECT_EQ(102U,
441 GetCanonicalHostRegistryLength(key0, EXCLUDE_UNKNOWN_REGISTRIES)); 394 GetRegistryLengthFromHostIncludingPrivate(
442 EXPECT_EQ(0U, 395 key1, EXCLUDE_UNKNOWN_REGISTRIES));
443 GetCanonicalHostRegistryLength(key1, EXCLUDE_UNKNOWN_REGISTRIES)); 396 EXPECT_EQ(0U, GetRegistryLengthFromHost(key2, EXCLUDE_UNKNOWN_REGISTRIES));
444 EXPECT_EQ(102U, GetCanonicalHostRegistryLengthIncludingPrivate(key1));
445 EXPECT_EQ(0U,
446 GetCanonicalHostRegistryLength(key2, EXCLUDE_UNKNOWN_REGISTRIES));
447 } 397 }
448 398
449 TEST_F(RegistryControlledDomainTest, TestDafsaThreeByteOffsets) { 399 TEST_F(RegistryControlledDomainTest, TestDafsaThreeByteOffsets) {
450 UseDomainData(test4::kDafsa); 400 UseDomainData(test4::kDafsa);
451 401
452 // Testing to lookup keys in a DAFSA with three byte offsets. 402 // Testing to lookup keys in a DAFSA with three byte offsets.
453 // This DAFSA is constructed so that labels begin and end with unique 403 // This DAFSA is constructed so that labels begin and end with unique
454 // characters, which makes it impossible to merge labels. The byte array 404 // characters, which makes it impossible to merge labels. The byte array
455 // has a size of ~54k. A two byte offset can add at most add 8k to the 405 // has a size of ~54k. A two byte offset can add at most add 8k to the
456 // previous offset. Since we can skip only forward in memory, the nodes 406 // previous offset. Since we can skip only forward in memory, the nodes
457 // representing the return values must be located near the end of the byte 407 // representing the return values must be located near the end of the byte
458 // array. The probability that we can reach from an arbitrary inner node to 408 // array. The probability that we can reach from an arbitrary inner node to
459 // a return value without using a three byte offset is small (but not zero). 409 // a return value without using a three byte offset is small (but not zero).
460 // The test is repeated with some different keys and with a reasonable 410 // The test is repeated with some different keys and with a reasonable
461 // probability at least one of the tested paths has go over a three byte 411 // probability at least one of the tested paths has go over a three byte
462 // offset. 412 // offset.
463 413
464 const char key0[] = 414 const char key0[] =
465 "a.b.z6___________________________________________________" 415 "a.b.Z6___________________________________________________"
466 "_________________________________________________z6"; 416 "_________________________________________________Z6";
467 const char key1[] = 417 const char key1[] =
468 "a.b.z7___________________________________________________" 418 "a.b.Z7___________________________________________________"
469 "_________________________________________________z7"; 419 "_________________________________________________Z7";
470 const char key2[] = 420 const char key2[] =
471 "a.b.za___________________________________________________" 421 "a.b.Za___________________________________________________"
472 "_________________________________________________z8"; 422 "_________________________________________________Z8";
473 423
424 EXPECT_EQ(104U, GetRegistryLengthFromHost(key0, EXCLUDE_UNKNOWN_REGISTRIES));
425 EXPECT_EQ(0U, GetRegistryLengthFromHost(key1, EXCLUDE_UNKNOWN_REGISTRIES));
474 EXPECT_EQ(104U, 426 EXPECT_EQ(104U,
475 GetCanonicalHostRegistryLength(key0, EXCLUDE_UNKNOWN_REGISTRIES)); 427 GetRegistryLengthFromHostIncludingPrivate(
476 EXPECT_EQ(0U, 428 key1, EXCLUDE_UNKNOWN_REGISTRIES));
477 GetCanonicalHostRegistryLength(key1, EXCLUDE_UNKNOWN_REGISTRIES)); 429 EXPECT_EQ(0U, GetRegistryLengthFromHost(key2, EXCLUDE_UNKNOWN_REGISTRIES));
478 EXPECT_EQ(104U, GetCanonicalHostRegistryLengthIncludingPrivate(key1));
479 EXPECT_EQ(0U,
480 GetCanonicalHostRegistryLength(key2, EXCLUDE_UNKNOWN_REGISTRIES));
481 } 430 }
482 431
483 TEST_F(RegistryControlledDomainTest, TestDafsaJoinedPrefixes) { 432 TEST_F(RegistryControlledDomainTest, TestDafsaJoinedPrefixes) {
484 UseDomainData(test5::kDafsa); 433 UseDomainData(test5::kDafsa);
485 434
486 // Testing to lookup keys in a DAFSA with compressed prefixes. 435 // Testing to lookup keys in a DAFSA with compressed prefixes.
487 // This DAFSA is constructed from words with similar prefixes but distinct 436 // This DAFSA is constructed from words with similar prefixes but distinct
488 // suffixes. The DAFSA will then form a trie with the implicit source node 437 // suffixes. The DAFSA will then form a trie with the implicit source node
489 // as root. 438 // as root.
490 439
491 const char key0[] = "a.b.ai"; 440 const char key0[] = "a.b.ai";
492 const char key1[] = "a.b.bj"; 441 const char key1[] = "a.b.bj";
493 const char key2[] = "a.b.aak"; 442 const char key2[] = "a.b.aak";
494 const char key3[] = "a.b.bbl"; 443 const char key3[] = "a.b.bbl";
495 const char key4[] = "a.b.aaa"; 444 const char key4[] = "a.b.aaa";
496 const char key5[] = "a.b.bbb"; 445 const char key5[] = "a.b.bbb";
497 const char key6[] = "a.b.aaaam"; 446 const char key6[] = "a.b.aaaam";
498 const char key7[] = "a.b.bbbbn"; 447 const char key7[] = "a.b.bbbbn";
499 448
449 EXPECT_EQ(2U, GetRegistryLengthFromHost(key0, EXCLUDE_UNKNOWN_REGISTRIES));
450 EXPECT_EQ(0U, GetRegistryLengthFromHost(key1, EXCLUDE_UNKNOWN_REGISTRIES));
500 EXPECT_EQ(2U, 451 EXPECT_EQ(2U,
501 GetCanonicalHostRegistryLength(key0, EXCLUDE_UNKNOWN_REGISTRIES)); 452 GetRegistryLengthFromHostIncludingPrivate(
453 key1, EXCLUDE_UNKNOWN_REGISTRIES));
454 EXPECT_EQ(3U, GetRegistryLengthFromHost(key2, EXCLUDE_UNKNOWN_REGISTRIES));
455 EXPECT_EQ(0U, GetRegistryLengthFromHost(key3, EXCLUDE_UNKNOWN_REGISTRIES));
456 EXPECT_EQ(3U,
457 GetRegistryLengthFromHostIncludingPrivate(
458 key3, EXCLUDE_UNKNOWN_REGISTRIES));
502 EXPECT_EQ(0U, 459 EXPECT_EQ(0U,
503 GetCanonicalHostRegistryLength(key1, EXCLUDE_UNKNOWN_REGISTRIES)); 460 GetRegistryLengthFromHostIncludingPrivate(
504 EXPECT_EQ(2U, GetCanonicalHostRegistryLengthIncludingPrivate(key1)); 461 key4, EXCLUDE_UNKNOWN_REGISTRIES));
505 EXPECT_EQ(3U,
506 GetCanonicalHostRegistryLength(key2, EXCLUDE_UNKNOWN_REGISTRIES));
507 EXPECT_EQ(0U, 462 EXPECT_EQ(0U,
508 GetCanonicalHostRegistryLength(key3, EXCLUDE_UNKNOWN_REGISTRIES)); 463 GetRegistryLengthFromHostIncludingPrivate(
509 EXPECT_EQ(3U, GetCanonicalHostRegistryLengthIncludingPrivate(key3)); 464 key5, EXCLUDE_UNKNOWN_REGISTRIES));
510 EXPECT_EQ(0U, GetCanonicalHostRegistryLengthIncludingPrivate(key4)); 465 EXPECT_EQ(5U, GetRegistryLengthFromHost(key6, EXCLUDE_UNKNOWN_REGISTRIES));
511 EXPECT_EQ(0U, GetCanonicalHostRegistryLengthIncludingPrivate(key5)); 466 EXPECT_EQ(5U, GetRegistryLengthFromHost(key7, EXCLUDE_UNKNOWN_REGISTRIES));
512 EXPECT_EQ(5U,
513 GetCanonicalHostRegistryLength(key6, EXCLUDE_UNKNOWN_REGISTRIES));
514 EXPECT_EQ(5U,
515 GetCanonicalHostRegistryLength(key7, EXCLUDE_UNKNOWN_REGISTRIES));
516 } 467 }
517 468
518 TEST_F(RegistryControlledDomainTest, TestDafsaJoinedSuffixes) { 469 TEST_F(RegistryControlledDomainTest, TestDafsaJoinedSuffixes) {
519 UseDomainData(test6::kDafsa); 470 UseDomainData(test6::kDafsa);
520 471
521 // Testing to lookup keys in a DAFSA with compressed suffixes. 472 // Testing to lookup keys in a DAFSA with compressed suffixes.
522 // This DAFSA is constructed from words with similar suffixes but distinct 473 // This DAFSA is constructed from words with similar suffixes but distinct
523 // prefixes. The DAFSA will then form a trie with the implicit sink node as 474 // prefixes. The DAFSA will then form a trie with the implicit sink node as
524 // root. 475 // root.
525 476
526 const char key0[] = "a.b.ia"; 477 const char key0[] = "a.b.ia";
527 const char key1[] = "a.b.jb"; 478 const char key1[] = "a.b.jb";
528 const char key2[] = "a.b.kaa"; 479 const char key2[] = "a.b.kaa";
529 const char key3[] = "a.b.lbb"; 480 const char key3[] = "a.b.lbb";
530 const char key4[] = "a.b.aaa"; 481 const char key4[] = "a.b.aaa";
531 const char key5[] = "a.b.bbb"; 482 const char key5[] = "a.b.bbb";
532 const char key6[] = "a.b.maaaa"; 483 const char key6[] = "a.b.maaaa";
533 const char key7[] = "a.b.nbbbb"; 484 const char key7[] = "a.b.nbbbb";
534 485
486 EXPECT_EQ(2U, GetRegistryLengthFromHost(key0, EXCLUDE_UNKNOWN_REGISTRIES));
487 EXPECT_EQ(0U, GetRegistryLengthFromHost(key1, EXCLUDE_UNKNOWN_REGISTRIES));
535 EXPECT_EQ(2U, 488 EXPECT_EQ(2U,
536 GetCanonicalHostRegistryLength(key0, EXCLUDE_UNKNOWN_REGISTRIES)); 489 GetRegistryLengthFromHostIncludingPrivate(
490 key1, EXCLUDE_UNKNOWN_REGISTRIES));
491 EXPECT_EQ(3U, GetRegistryLengthFromHost(key2, EXCLUDE_UNKNOWN_REGISTRIES));
492 EXPECT_EQ(0U, GetRegistryLengthFromHost(key3, EXCLUDE_UNKNOWN_REGISTRIES));
493 EXPECT_EQ(3U,
494 GetRegistryLengthFromHostIncludingPrivate(
495 key3, EXCLUDE_UNKNOWN_REGISTRIES));
537 EXPECT_EQ(0U, 496 EXPECT_EQ(0U,
538 GetCanonicalHostRegistryLength(key1, EXCLUDE_UNKNOWN_REGISTRIES)); 497 GetRegistryLengthFromHostIncludingPrivate(
539 EXPECT_EQ(2U, GetCanonicalHostRegistryLengthIncludingPrivate(key1)); 498 key4, EXCLUDE_UNKNOWN_REGISTRIES));
540 EXPECT_EQ(3U,
541 GetCanonicalHostRegistryLength(key2, EXCLUDE_UNKNOWN_REGISTRIES));
542 EXPECT_EQ(0U, 499 EXPECT_EQ(0U,
543 GetCanonicalHostRegistryLength(key3, EXCLUDE_UNKNOWN_REGISTRIES)); 500 GetRegistryLengthFromHostIncludingPrivate(
544 EXPECT_EQ(3U, GetCanonicalHostRegistryLengthIncludingPrivate(key3)); 501 key5, EXCLUDE_UNKNOWN_REGISTRIES));
545 EXPECT_EQ(0U, GetCanonicalHostRegistryLengthIncludingPrivate(key4)); 502 EXPECT_EQ(5U, GetRegistryLengthFromHost(key6, EXCLUDE_UNKNOWN_REGISTRIES));
546 EXPECT_EQ(0U, GetCanonicalHostRegistryLengthIncludingPrivate(key5)); 503 EXPECT_EQ(5U, GetRegistryLengthFromHost(key7, EXCLUDE_UNKNOWN_REGISTRIES));
547 EXPECT_EQ(5U,
548 GetCanonicalHostRegistryLength(key6, EXCLUDE_UNKNOWN_REGISTRIES));
549 EXPECT_EQ(5U,
550 GetCanonicalHostRegistryLength(key7, EXCLUDE_UNKNOWN_REGISTRIES));
551 } 504 }
552
553 TEST_F(RegistryControlledDomainTest, Permissive) {
554 UseDomainData(test1::kDafsa);
555
556 EXPECT_EQ(std::string::npos, PermissiveGetHostRegistryLength(""));
557
558 // Regular non-canonical host name.
559 EXPECT_EQ(2U, PermissiveGetHostRegistryLength("Www.Google.Jp"));
560 EXPECT_EQ(3U, PermissiveGetHostRegistryLength("Www.Google.Jp."));
561
562 // Empty returns npos.
563 EXPECT_EQ(std::string::npos, PermissiveGetHostRegistryLength(""));
564
565 // Trailing spaces are counted as part of the hostname, meaning this will
566 // not match a known registry.
567 EXPECT_EQ(0U, PermissiveGetHostRegistryLength("Www.Google.Jp "));
568
569 // Invalid characters at the beginning are OK if the suffix still matches.
570 EXPECT_EQ(2U, PermissiveGetHostRegistryLength("*%00#?.Jp"));
571
572 // Escaped period, this will add new components.
573 EXPECT_EQ(4U, PermissiveGetHostRegistryLength("Www.Googl%45%2e%4Ap"));
574
575 // IDN cases (not supported when not linking ICU).
576 #if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES)
577 EXPECT_EQ(10U, PermissiveGetHostRegistryLength("foo.xn--fiqs8s"));
578 EXPECT_EQ(11U, PermissiveGetHostRegistryLength("foo.xn--fiqs8s."));
579 EXPECT_EQ(18U, PermissiveGetHostRegistryLength("foo.%E4%B8%AD%E5%9B%BD"));
580 EXPECT_EQ(19U, PermissiveGetHostRegistryLength("foo.%E4%B8%AD%E5%9B%BD."));
581 EXPECT_EQ(6U,
582 PermissiveGetHostRegistryLength("foo.\xE4\xB8\xAD\xE5\x9B\xBD"));
583 EXPECT_EQ(7U,
584 PermissiveGetHostRegistryLength("foo.\xE4\xB8\xAD\xE5\x9B\xBD."));
585 // UTF-16 IDN.
586 EXPECT_EQ(2U, PermissiveGetHostRegistryLength(
587 base::WideToUTF16(L"foo.\x4e2d\x56fd")));
588
589 // Fullwidth dot (u+FF0E) that will get canonicalized to a dot.
590 EXPECT_EQ(2U, PermissiveGetHostRegistryLength("Www.Google\xEF\xBC\x8Ejp"));
591 // Same but also ending in a fullwidth dot.
592 EXPECT_EQ(5U, PermissiveGetHostRegistryLength(
593 "Www.Google\xEF\xBC\x8Ejp\xEF\xBC\x8E"));
594 // Escaped UTF-8, also with an escaped fullwidth "Jp".
595 // "Jp" = U+FF2A, U+FF50, UTF-8 = EF BC AA EF BD 90
596 EXPECT_EQ(27U, PermissiveGetHostRegistryLength(
597 "Www.Google%EF%BC%8E%EF%BC%AA%EF%BD%90%EF%BC%8E"));
598 // UTF-16 (ending in a dot).
599 EXPECT_EQ(3U, PermissiveGetHostRegistryLength(
600 base::WideToUTF16(L"Www.Google\xFF0E\xFF2A\xFF50\xFF0E")));
601 #endif
602 }
603
604 } // namespace registry_controlled_domains 505 } // namespace registry_controlled_domains
605 } // namespace net 506 } // namespace net
OLDNEW
« no previous file with comments | « net/base/registry_controlled_domains/registry_controlled_domain.cc ('k') | net/base/url_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698