1/*
2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "config.h"
27
28#if ENABLE(PUBLIC_SUFFIX_LIST)
29
30#include "WTFStringUtilities.h"
31#include <WebCore/PublicSuffix.h>
32#include <wtf/MainThread.h>
33
34using namespace WebCore;
35
36namespace TestWebKitAPI {
37
38class PublicSuffix: public testing::Test {
39public:
40 virtual void SetUp()
41 {
42 WTF::initializeMainThread();
43 }
44};
45
46const char16_t bidirectionalDomain[28] = u"bidirectional\u0786\u07AE\u0782\u07B0\u0795\u07A9\u0793\u07A6\u0783\u07AA.com";
47
48TEST_F(PublicSuffix, IsPublicSuffix)
49{
50 EXPECT_TRUE(isPublicSuffix("com"));
51 EXPECT_FALSE(isPublicSuffix("test.com"));
52 EXPECT_FALSE(isPublicSuffix("com.com"));
53 EXPECT_TRUE(isPublicSuffix("net"));
54 EXPECT_TRUE(isPublicSuffix("org"));
55 EXPECT_TRUE(isPublicSuffix("co.uk"));
56 EXPECT_FALSE(isPublicSuffix("bl.uk"));
57 EXPECT_FALSE(isPublicSuffix("test.co.uk"));
58 EXPECT_TRUE(isPublicSuffix("xn--zf0ao64a.tw"));
59 EXPECT_FALSE(isPublicSuffix("r4---asdf.test.com"));
60 EXPECT_FALSE(isPublicSuffix(utf16String(bidirectionalDomain)));
61 EXPECT_TRUE(isPublicSuffix(utf16String(u"\u6803\u6728.jp")));
62 EXPECT_FALSE(isPublicSuffix(""));
63 EXPECT_FALSE(isPublicSuffix("åäö"));
64
65 // UK
66 EXPECT_TRUE(isPublicSuffix("uk"));
67 EXPECT_FALSE(isPublicSuffix("webkit.uk"));
68 EXPECT_TRUE(isPublicSuffix("co.uk"));
69 EXPECT_FALSE(isPublicSuffix("company.co.uk"));
70
71 // Note: These tests are based on the Public Domain TLD test suite
72 // https://raw.githubusercontent.com/publicsuffix/list/master/tests/test_psl.txt
73 //
74 // That file states:
75 // Any copyright is dedicated to the Public Domain.
76 // https://creativecommons.org/publicdomain/zero/1.0/
77
78 // null input.
79 EXPECT_FALSE(isPublicSuffix(""));
80 // Mixed case.
81 EXPECT_TRUE(isPublicSuffix("COM"));
82 EXPECT_FALSE(isPublicSuffix("example.COM"));
83 EXPECT_FALSE(isPublicSuffix("WwW.example.COM"));
84 // Unlisted TLD.
85 EXPECT_FALSE(isPublicSuffix("example"));
86 EXPECT_FALSE(isPublicSuffix("example.example"));
87 EXPECT_FALSE(isPublicSuffix("b.example.example"));
88 EXPECT_FALSE(isPublicSuffix("a.b.example.example"));
89 // TLD with only 1 rule.
90 EXPECT_TRUE(isPublicSuffix("biz"));
91 EXPECT_FALSE(isPublicSuffix("domain.biz"));
92 EXPECT_FALSE(isPublicSuffix("b.domain.biz"));
93 EXPECT_FALSE(isPublicSuffix("a.b.domain.biz"));
94 // TLD with some 2-level rules.
95 EXPECT_FALSE(isPublicSuffix("example.com"));
96 EXPECT_FALSE(isPublicSuffix("b.example.com"));
97 EXPECT_FALSE(isPublicSuffix("a.b.example.com"));
98 EXPECT_TRUE(isPublicSuffix("uk.com"));
99 EXPECT_FALSE(isPublicSuffix("example.uk.com"));
100 EXPECT_FALSE(isPublicSuffix("b.example.uk.com"));
101 EXPECT_FALSE(isPublicSuffix("a.b.example.uk.com"));
102 EXPECT_FALSE(isPublicSuffix("test.ac"));
103 // TLD with only 1 (wildcard) rule.
104 EXPECT_TRUE(isPublicSuffix("mm"));
105 EXPECT_TRUE(isPublicSuffix("c.mm"));
106 EXPECT_FALSE(isPublicSuffix("b.c.mm"));
107 EXPECT_FALSE(isPublicSuffix("a.b.c.mm"));
108 // More complex TLD.
109 EXPECT_TRUE(isPublicSuffix("jp"));
110 EXPECT_FALSE(isPublicSuffix("test.jp"));
111 EXPECT_FALSE(isPublicSuffix("www.test.jp"));
112 EXPECT_TRUE(isPublicSuffix("ac.jp"));
113 EXPECT_FALSE(isPublicSuffix("test.ac.jp"));
114 EXPECT_FALSE(isPublicSuffix("www.test.ac.jp"));
115 EXPECT_TRUE(isPublicSuffix("kyoto.jp"));
116 EXPECT_FALSE(isPublicSuffix("test.kyoto.jp"));
117 EXPECT_TRUE(isPublicSuffix("ide.kyoto.jp"));
118 EXPECT_FALSE(isPublicSuffix("b.ide.kyoto.jp"));
119 EXPECT_FALSE(isPublicSuffix("a.b.ide.kyoto.jp"));
120 EXPECT_TRUE(isPublicSuffix("c.kobe.jp"));
121 EXPECT_FALSE(isPublicSuffix("b.c.kobe.jp"));
122 EXPECT_FALSE(isPublicSuffix("a.b.c.kobe.jp"));
123 EXPECT_FALSE(isPublicSuffix("city.kobe.jp"));
124 EXPECT_FALSE(isPublicSuffix("www.city.kobe.jp"));
125 // TLD with a wildcard rule and exceptions.
126 EXPECT_TRUE(isPublicSuffix("ck"));
127 EXPECT_TRUE(isPublicSuffix("test.ck"));
128 EXPECT_FALSE(isPublicSuffix("b.test.ck"));
129 EXPECT_FALSE(isPublicSuffix("a.b.test.ck"));
130 EXPECT_FALSE(isPublicSuffix("www.ck"));
131 EXPECT_FALSE(isPublicSuffix("www.www.ck"));
132 // US K12.
133 EXPECT_TRUE(isPublicSuffix("us"));
134 EXPECT_FALSE(isPublicSuffix("test.us"));
135 EXPECT_FALSE(isPublicSuffix("www.test.us"));
136 EXPECT_TRUE(isPublicSuffix("ak.us"));
137 EXPECT_FALSE(isPublicSuffix("test.ak.us"));
138 EXPECT_FALSE(isPublicSuffix("www.test.ak.us"));
139 EXPECT_TRUE(isPublicSuffix("k12.ak.us"));
140 EXPECT_FALSE(isPublicSuffix("test.k12.ak.us"));
141 EXPECT_FALSE(isPublicSuffix("www.test.k12.ak.us"));
142 // IDN labels (punycoded)
143 EXPECT_FALSE(isPublicSuffix("xn--85x722f.com.cn"));
144 EXPECT_FALSE(isPublicSuffix("xn--85x722f.xn--55qx5d.cn"));
145 EXPECT_FALSE(isPublicSuffix("www.xn--85x722f.xn--55qx5d.cn"));
146 EXPECT_FALSE(isPublicSuffix("shishi.xn--55qx5d.cn"));
147 EXPECT_TRUE(isPublicSuffix("xn--55qx5d.cn"));
148 EXPECT_FALSE(isPublicSuffix("xn--85x722f.xn--fiqs8s"));
149 EXPECT_FALSE(isPublicSuffix("www.xn--85x722f.xn--fiqs8s"));
150 EXPECT_FALSE(isPublicSuffix("shishi.xn--fiqs8s"));
151 EXPECT_TRUE(isPublicSuffix("xn--fiqs8s"));
152}
153
154TEST_F(PublicSuffix, TopPrivatelyControlledDomain)
155{
156 EXPECT_EQ(String(utf16String(u"example.\u6803\u6728.jp")), topPrivatelyControlledDomain(utf16String(u"example.\u6803\u6728.jp")));
157 EXPECT_EQ(String(), topPrivatelyControlledDomain(String()));
158 EXPECT_EQ(String(), topPrivatelyControlledDomain(""));
159 EXPECT_EQ(String("test.com"), topPrivatelyControlledDomain("test.com"));
160 EXPECT_EQ(String("test.com"), topPrivatelyControlledDomain("com.test.com"));
161 EXPECT_EQ(String("test.com"), topPrivatelyControlledDomain("subdomain.test.com"));
162 EXPECT_EQ(String("com.com"), topPrivatelyControlledDomain("www.com.com"));
163 EXPECT_EQ(String("test.co.uk"), topPrivatelyControlledDomain("test.co.uk"));
164 EXPECT_EQ(String("test.co.uk"), topPrivatelyControlledDomain("subdomain.test.co.uk"));
165 EXPECT_EQ(String("bl.uk"), topPrivatelyControlledDomain("bl.uk"));
166 EXPECT_EQ(String("bl.uk"), topPrivatelyControlledDomain("subdomain.bl.uk"));
167 EXPECT_EQ(String("test.xn--zf0ao64a.tw"), topPrivatelyControlledDomain("test.xn--zf0ao64a.tw"));
168 EXPECT_EQ(String("test.xn--zf0ao64a.tw"), topPrivatelyControlledDomain("www.test.xn--zf0ao64a.tw"));
169 EXPECT_EQ(String("127.0.0.1"), topPrivatelyControlledDomain("127.0.0.1"));
170 EXPECT_EQ(String(), topPrivatelyControlledDomain("1"));
171 EXPECT_EQ(String(), topPrivatelyControlledDomain("com"));
172 EXPECT_EQ(String("test.com"), topPrivatelyControlledDomain("r4---asdf.test.com"));
173 EXPECT_EQ(String("r4---asdf.com"), topPrivatelyControlledDomain("r4---asdf.com"));
174 EXPECT_EQ(String(), topPrivatelyControlledDomain("r4---asdf"));
175 EXPECT_EQ(utf16String(bidirectionalDomain), utf16String(bidirectionalDomain));
176 EXPECT_EQ(String("example.com"), topPrivatelyControlledDomain("ExamPle.com"));
177 EXPECT_EQ(String("example.com"), topPrivatelyControlledDomain("SUB.dOmain.ExamPle.com"));
178 EXPECT_EQ(String("localhost"), topPrivatelyControlledDomain("localhost"));
179 EXPECT_EQ(String("localhost"), topPrivatelyControlledDomain("LocalHost"));
180 EXPECT_EQ(String("åäö"), topPrivatelyControlledDomain("åäö"));
181 EXPECT_EQ(String("ÅÄÖ"), topPrivatelyControlledDomain("ÅÄÖ"));
182}
183
184}
185
186#endif // ENABLE(PUBLIC_SUFFIX_LIST)
187