LEFT | RIGHT |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-present eyeo GmbH | 3 * Copyright (C) 2006-present eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 "use strict"; | 18 "use strict"; |
19 | 19 |
20 // Only starting NodeJS 10 that URL is in the global space. | 20 // Only starting NodeJS 10 that URL is in the global space. |
21 const {URL} = require("url"); | 21 const {URL} = require("url"); |
22 const {createSandbox} = require("./_common"); | 22 const {createSandbox} = require("./_common"); |
23 | 23 |
24 const publicSuffixes = require("../data/publicSuffixList.json"); | 24 const publicSuffixes = require("../data/publicSuffixList.json"); |
25 | 25 |
26 let normalizeHostname = null; | 26 let normalizeHostname = null; |
| 27 let domainSuffixes = null; |
27 let isThirdParty = null; | 28 let isThirdParty = null; |
28 let getBaseDomain = null; | 29 let getBaseDomain = null; |
29 | 30 |
30 exports.setUp = function(callback) | 31 exports.setUp = function(callback) |
31 { | 32 { |
32 let sandboxedRequire = createSandbox({ | 33 let sandboxedRequire = createSandbox({ |
33 extraExports: { | 34 extraExports: { |
34 domain: ["getBaseDomain"] | 35 domain: ["getBaseDomain"] |
35 } | 36 } |
36 }); | 37 }); |
37 ( | 38 ( |
38 {normalizeHostname, isThirdParty, | 39 {normalizeHostname, domainSuffixes, isThirdParty, |
39 getBaseDomain} = sandboxedRequire("../lib/url") | 40 getBaseDomain} = sandboxedRequire("../lib/url") |
40 ); | 41 ); |
41 | 42 |
42 callback(); | 43 callback(); |
43 }; | 44 }; |
44 | 45 |
45 function hostnameToURL(hostname) | 46 function hostnameToURL(hostname) |
46 { | 47 { |
47 return new URL("http://" + hostname); | 48 return new URL("http://" + hostname); |
48 } | 49 } |
(...skipping 27 matching lines...) Expand all Loading... |
76 | 77 |
77 test.equal(normalizeHostname("192.168.1.1"), "192.168.1.1"); | 78 test.equal(normalizeHostname("192.168.1.1"), "192.168.1.1"); |
78 test.equal(normalizeHostname("192.168.1.1."), "192.168.1.1"); | 79 test.equal(normalizeHostname("192.168.1.1."), "192.168.1.1"); |
79 | 80 |
80 test.equal(normalizeHostname("2001:0db8:85a3:0000:0000:8a2e:0370:7334"), | 81 test.equal(normalizeHostname("2001:0db8:85a3:0000:0000:8a2e:0370:7334"), |
81 "2001:0db8:85a3:0000:0000:8a2e:0370:7334"); | 82 "2001:0db8:85a3:0000:0000:8a2e:0370:7334"); |
82 test.equal(normalizeHostname("2001:0db8:85a3:0000:0000:8a2e:0370:7334."), | 83 test.equal(normalizeHostname("2001:0db8:85a3:0000:0000:8a2e:0370:7334."), |
83 "2001:0db8:85a3:0000:0000:8a2e:0370:7334"); | 84 "2001:0db8:85a3:0000:0000:8a2e:0370:7334"); |
84 test.equal(normalizeHostname("2001:0DB8:85A3:0000:0000:8A2E:0370:7334"), | 85 test.equal(normalizeHostname("2001:0DB8:85A3:0000:0000:8A2E:0370:7334"), |
85 "2001:0db8:85a3:0000:0000:8a2e:0370:7334"); | 86 "2001:0db8:85a3:0000:0000:8a2e:0370:7334"); |
| 87 |
| 88 test.done(); |
| 89 }; |
| 90 |
| 91 exports.testDomainSuffixes = function(test) |
| 92 { |
| 93 test.deepEqual([...domainSuffixes("localhost")], ["localhost"]); |
| 94 test.deepEqual([...domainSuffixes("example.com")], ["example.com", "com"]); |
| 95 test.deepEqual([...domainSuffixes("www.example.com")], |
| 96 ["www.example.com", "example.com", "com"]); |
| 97 test.deepEqual([...domainSuffixes("www.example.co.in")], |
| 98 ["www.example.co.in", "example.co.in", "co.in", "in"]); |
| 99 |
| 100 // With blank. |
| 101 test.deepEqual([...domainSuffixes("localhost", true)], ["localhost", ""]); |
| 102 test.deepEqual([...domainSuffixes("example.com", true)], |
| 103 ["example.com", "com", ""]); |
| 104 test.deepEqual([...domainSuffixes("www.example.com", true)], |
| 105 ["www.example.com", "example.com", "com", ""]); |
| 106 test.deepEqual([...domainSuffixes("www.example.co.in", true)], |
| 107 ["www.example.co.in", "example.co.in", "co.in", "in", ""]); |
| 108 |
| 109 // Quirks and edge cases. |
| 110 test.deepEqual([...domainSuffixes("")], []); |
| 111 test.deepEqual([...domainSuffixes(".")], ["."]); |
| 112 test.deepEqual([...domainSuffixes(".localhost")], |
| 113 [".localhost", "localhost"]); |
| 114 test.deepEqual([...domainSuffixes(".example.com")], |
| 115 [".example.com", "example.com", "com"]); |
| 116 test.deepEqual([...domainSuffixes("localhost.")], |
| 117 ["localhost."]); |
| 118 test.deepEqual([...domainSuffixes("example.com.")], |
| 119 ["example.com.", "com."]); |
| 120 test.deepEqual([...domainSuffixes("..localhost")], |
| 121 ["..localhost", ".localhost", "localhost"]); |
| 122 test.deepEqual([...domainSuffixes("..example..com")], |
| 123 ["..example..com", ".example..com", "example..com", ".com", |
| 124 "com"]); |
| 125 test.deepEqual([...domainSuffixes("localhost..")], ["localhost..", "."]); |
| 126 test.deepEqual([...domainSuffixes("example..com..")], |
| 127 ["example..com..", ".com..", "com..", "."]); |
86 | 128 |
87 test.done(); | 129 test.done(); |
88 }; | 130 }; |
89 | 131 |
90 exports.testIsThirdParty = function(test) | 132 exports.testIsThirdParty = function(test) |
91 { | 133 { |
92 testThirdParty(test, "foo", "foo", false, "same domain isn't third-party"); | 134 testThirdParty(test, "foo", "foo", false, "same domain isn't third-party"); |
93 testThirdParty(test, "foo", "bar", true, "different domain is third-party"); | 135 testThirdParty(test, "foo", "bar", true, "different domain is third-party"); |
94 testThirdParty(test, "foo.com", "foo.com", false, | 136 testThirdParty(test, "foo.com", "foo.com", false, |
95 "same domain with TLD (.com) isn't third-party"); | 137 "same domain with TLD (.com) isn't third-party"); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 "different IPv4-mapped IPv6 address is third-party" | 191 "different IPv4-mapped IPv6 address is third-party" |
150 ); | 192 ); |
151 testThirdParty(test, "xn--f-1gaa.com", "f\u00f6\u00f6.com", false, | 193 testThirdParty(test, "xn--f-1gaa.com", "f\u00f6\u00f6.com", false, |
152 "same IDN isn't third-party"); | 194 "same IDN isn't third-party"); |
153 testThirdParty(test, "example.com..", "example.com....", false, | 195 testThirdParty(test, "example.com..", "example.com....", false, |
154 "traling dots are ignored"); | 196 "traling dots are ignored"); |
155 | 197 |
156 test.done(); | 198 test.done(); |
157 }; | 199 }; |
158 | 200 |
159 exports.testGetDomain = function(test) | 201 exports.testGetBaseDomain = function(test) |
160 { | 202 { |
161 let parts = ["aaa", "bbb", "ccc", "ddd", "eee"]; | 203 let parts = ["aaa", "bbb", "ccc", "ddd", "eee"]; |
162 let levels = 3; | 204 let levels = 3; |
163 | 205 |
164 for (let suffix in publicSuffixes) | 206 for (let suffix in publicSuffixes) |
165 { | 207 { |
166 let offset = publicSuffixes[suffix]; | 208 let offset = publicSuffixes[suffix]; |
167 | 209 |
168 // If this fails, add more parts. | 210 // If this fails, add more parts. |
169 test.ok(offset <= parts.length - levels, | 211 test.ok(offset <= parts.length - levels, |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 "us-east-1.amazonaws.com" | 287 "us-east-1.amazonaws.com" |
246 ); | 288 ); |
247 test.equal(getBaseDomain("example.amazonaws.com"), "amazonaws.com"); | 289 test.equal(getBaseDomain("example.amazonaws.com"), "amazonaws.com"); |
248 test.equal(getBaseDomain("amazonaws.com"), "amazonaws.com"); | 290 test.equal(getBaseDomain("amazonaws.com"), "amazonaws.com"); |
249 | 291 |
250 // Edge case. | 292 // Edge case. |
251 test.equal(getBaseDomain(""), ""); | 293 test.equal(getBaseDomain(""), ""); |
252 | 294 |
253 test.done(); | 295 test.done(); |
254 }; | 296 }; |
LEFT | RIGHT |