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

Side by Side Diff: extensions/common/url_pattern_unittest.cc

Issue 2499493004: Communicate ExtensionSettings policy to renderers (Closed)
Patch Set: nits Created 3 years, 8 months 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 "extensions/common/url_pattern.h" 5 #include "extensions/common/url_pattern.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 12 matching lines...) Expand all
23 URLPattern::SCHEME_FTP | 23 URLPattern::SCHEME_FTP |
24 URLPattern::SCHEME_CHROMEUI | 24 URLPattern::SCHEME_CHROMEUI |
25 URLPattern::SCHEME_EXTENSION | 25 URLPattern::SCHEME_EXTENSION |
26 URLPattern::SCHEME_FILESYSTEM; 26 URLPattern::SCHEME_FILESYSTEM;
27 27
28 TEST(ExtensionURLPatternTest, ParseInvalid) { 28 TEST(ExtensionURLPatternTest, ParseInvalid) {
29 const struct { 29 const struct {
30 const char* pattern; 30 const char* pattern;
31 URLPattern::ParseResult expected_result; 31 URLPattern::ParseResult expected_result;
32 } kInvalidPatterns[] = { 32 } kInvalidPatterns[] = {
33 { "http", URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR }, 33 {"http", URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR},
34 { "http:", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, 34 {"http:", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR},
35 { "http:/", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, 35 {"http:/", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR},
36 { "about://", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, 36 {"about://", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR},
37 { "http://", URLPattern::PARSE_ERROR_EMPTY_HOST }, 37 {"http://", URLPattern::PARSE_ERROR_EMPTY_HOST},
38 { "http:///", URLPattern::PARSE_ERROR_EMPTY_HOST }, 38 {"http:///", URLPattern::PARSE_ERROR_EMPTY_HOST},
39 { "http:// /", URLPattern::PARSE_ERROR_EMPTY_HOST }, 39 {"http:// /", URLPattern::PARSE_ERROR_EMPTY_HOST},
40 { "http://*foo/bar", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, 40 {"http://*foo/bar", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD},
41 { "http://foo.*.bar/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, 41 {"http://foo.*.bar/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD},
42 { "http://fo.*.ba:123/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, 42 {"http://fo.*.ba:123/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD},
43 { "http:/bar", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, 43 {"http:/bar", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR},
44 { "http://bar", URLPattern::PARSE_ERROR_EMPTY_PATH }, 44 {"http://bar", URLPattern::PARSE_ERROR_EMPTY_PATH},
45 }; 45 {"http://foo.*/bar", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD}};
46 46
47 for (size_t i = 0; i < arraysize(kInvalidPatterns); ++i) { 47 for (size_t i = 0; i < arraysize(kInvalidPatterns); ++i) {
48 URLPattern pattern(URLPattern::SCHEME_ALL); 48 URLPattern pattern(URLPattern::SCHEME_ALL);
49 EXPECT_EQ(kInvalidPatterns[i].expected_result, 49 EXPECT_EQ(kInvalidPatterns[i].expected_result,
50 pattern.Parse(kInvalidPatterns[i].pattern)) 50 pattern.Parse(kInvalidPatterns[i].pattern))
51 << kInvalidPatterns[i].pattern; 51 << kInvalidPatterns[i].pattern;
52 } 52 }
53 53
54 { 54 {
55 // Cannot use a C string, because this contains a null byte. 55 // Cannot use a C string, because this contains a null byte.
56 std::string null_host("http://\0www/", 12); 56 std::string null_host("http://\0www/", 12);
57 URLPattern pattern(URLPattern::SCHEME_ALL); 57 URLPattern pattern(URLPattern::SCHEME_ALL);
58 EXPECT_EQ(URLPattern::PARSE_ERROR_INVALID_HOST, 58 EXPECT_EQ(URLPattern::PARSE_ERROR_INVALID_HOST,
59 pattern.Parse(null_host)) 59 pattern.Parse(null_host))
60 << null_host; 60 << null_host;
61 } 61 }
62 } 62 }
63 63
64 TEST(ExtensionURLPatternTest, Ports) { 64 TEST(ExtensionURLPatternTest, Ports) {
65 const struct { 65 const struct {
66 const char* pattern; 66 const char* pattern;
67 URLPattern::ParseResult expected_result; 67 URLPattern::ParseResult expected_result;
68 const char* expected_port; 68 const char* expected_port;
69 } kTestPatterns[] = { 69 } kTestPatterns[] = {
70 { "http://foo:1234/", URLPattern::PARSE_SUCCESS, "1234" }, 70 {"http://foo:1234/", URLPattern::PARSE_SUCCESS, "1234"},
71 { "http://foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234" }, 71 {"http://foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234"},
72 { "http://*.foo:1234/", URLPattern::PARSE_SUCCESS, "1234" }, 72 {"http://*.foo:1234/", URLPattern::PARSE_SUCCESS, "1234"},
73 { "http://*.foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234" }, 73 {"http://*.foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234"},
74 { "http://:1234/", URLPattern::PARSE_SUCCESS, "1234" }, 74 {"http://:1234/", URLPattern::PARSE_SUCCESS, "1234"},
75 { "http://foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, 75 {"http://foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"},
76 { "http://foo:*/", URLPattern::PARSE_SUCCESS, "*" }, 76 {"http://foo:*/", URLPattern::PARSE_SUCCESS, "*"},
77 { "http://*.foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, 77 {"http://*.foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"},
78 { "http://foo:com/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, 78 {"http://foo:com/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"},
79 { "http://foo:123456/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, 79 {"http://foo:123456/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"},
80 { "http://foo:80:80/monkey", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, 80 {"http://foo:80:80/monkey", URLPattern::PARSE_ERROR_INVALID_PORT, "*"},
81 { "file://foo:1234/bar", URLPattern::PARSE_SUCCESS, "*" }, 81 {"file://foo:1234/bar", URLPattern::PARSE_SUCCESS, "*"},
82 { "chrome://foo:1234/bar", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, 82 {"chrome://foo:1234/bar", URLPattern::PARSE_ERROR_INVALID_PORT, "*"},
83 83
84 // Port-like strings in the path should not trigger a warning. 84 // Port-like strings in the path should not trigger a warning.
85 { "http://*/:1234", URLPattern::PARSE_SUCCESS, "*" }, 85 {"http://*/:1234", URLPattern::PARSE_SUCCESS, "*"},
86 { "http://*.foo/bar:1234", URLPattern::PARSE_SUCCESS, "*" }, 86 {"http://*.foo/bar:1234", URLPattern::PARSE_SUCCESS, "*"},
87 { "http://foo/bar:1234/path", URLPattern::PARSE_SUCCESS, "*" }, 87 {"http://foo/bar:1234/path", URLPattern::PARSE_SUCCESS, "*"},
88 }; 88 {"http://*.foo.*/:1234", URLPattern::PARSE_SUCCESS, "*"}};
89 89
90 for (size_t i = 0; i < arraysize(kTestPatterns); ++i) { 90 for (size_t i = 0; i < arraysize(kTestPatterns); ++i) {
91 URLPattern pattern(URLPattern::SCHEME_ALL); 91 URLPattern pattern(URLPattern::SCHEME_ALL);
92 EXPECT_EQ(kTestPatterns[i].expected_result, 92 EXPECT_EQ(kTestPatterns[i].expected_result,
93 pattern.Parse(kTestPatterns[i].pattern)) 93 pattern.Parse(kTestPatterns[i].pattern,
94 URLPattern::ALLOW_WILDCARD_FOR_EFFECTIVE_TLD))
94 << "Got unexpected result for URL pattern: " 95 << "Got unexpected result for URL pattern: "
95 << kTestPatterns[i].pattern; 96 << kTestPatterns[i].pattern;
96 EXPECT_EQ(kTestPatterns[i].expected_port, pattern.port()) 97 EXPECT_EQ(kTestPatterns[i].expected_port, pattern.port())
97 << "Got unexpected port for URL pattern: " << kTestPatterns[i].pattern; 98 << "Got unexpected port for URL pattern: " << kTestPatterns[i].pattern;
98 } 99 }
99 } 100 }
100 101
101 // all pages for a given scheme 102 // all pages for a given scheme
102 TEST(ExtensionURLPatternTest, Match1) { 103 TEST(ExtensionURLPatternTest, Match1) {
103 URLPattern pattern(kAllSchemes); 104 URLPattern pattern(kAllSchemes);
104 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*/*")); 105 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*/*"));
105 EXPECT_EQ("http", pattern.scheme()); 106 EXPECT_EQ("http", pattern.scheme());
106 EXPECT_EQ("", pattern.host()); 107 EXPECT_EQ("", pattern.host());
107 EXPECT_TRUE(pattern.match_subdomains()); 108 EXPECT_TRUE(pattern.match_subdomains());
109 EXPECT_TRUE(pattern.match_effective_tld());
108 EXPECT_FALSE(pattern.match_all_urls()); 110 EXPECT_FALSE(pattern.match_all_urls());
109 EXPECT_EQ("/*", pattern.path()); 111 EXPECT_EQ("/*", pattern.path());
110 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com"))); 112 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com")));
111 EXPECT_TRUE(pattern.MatchesURL(GURL("http://yahoo.com"))); 113 EXPECT_TRUE(pattern.MatchesURL(GURL("http://yahoo.com")));
112 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foo"))); 114 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foo")));
113 EXPECT_FALSE(pattern.MatchesURL(GURL("https://google.com"))); 115 EXPECT_FALSE(pattern.MatchesURL(GURL("https://google.com")));
114 EXPECT_TRUE(pattern.MatchesURL(GURL("http://74.125.127.100/search"))); 116 EXPECT_TRUE(pattern.MatchesURL(GURL("http://74.125.127.100/search")));
115 } 117 }
116 118
117 // all domains 119 // all domains
118 TEST(ExtensionURLPatternTest, Match2) { 120 TEST(ExtensionURLPatternTest, Match2) {
119 URLPattern pattern(kAllSchemes); 121 URLPattern pattern(kAllSchemes);
120 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("https://*/foo*")); 122 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("https://*/foo*"));
121 EXPECT_EQ("https", pattern.scheme()); 123 EXPECT_EQ("https", pattern.scheme());
122 EXPECT_EQ("", pattern.host()); 124 EXPECT_EQ("", pattern.host());
123 EXPECT_TRUE(pattern.match_subdomains()); 125 EXPECT_TRUE(pattern.match_subdomains());
126 EXPECT_TRUE(pattern.match_effective_tld());
124 EXPECT_FALSE(pattern.match_all_urls()); 127 EXPECT_FALSE(pattern.match_all_urls());
125 EXPECT_EQ("/foo*", pattern.path()); 128 EXPECT_EQ("/foo*", pattern.path());
126 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foo"))); 129 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foo")));
127 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foobar"))); 130 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foobar")));
128 EXPECT_FALSE(pattern.MatchesURL(GURL("http://www.google.com/foo"))); 131 EXPECT_FALSE(pattern.MatchesURL(GURL("http://www.google.com/foo")));
129 EXPECT_FALSE(pattern.MatchesURL(GURL("https://www.google.com/"))); 132 EXPECT_FALSE(pattern.MatchesURL(GURL("https://www.google.com/")));
130 EXPECT_TRUE(pattern.MatchesURL( 133 EXPECT_TRUE(pattern.MatchesURL(
131 GURL("filesystem:https://www.google.com/foobar/"))); 134 GURL("filesystem:https://www.google.com/foobar/")));
132 } 135 }
133 136
134 // subdomains 137 // subdomains
135 TEST(URLPatternTest, Match3) { 138 TEST(URLPatternTest, Match3) {
136 URLPattern pattern(kAllSchemes); 139 URLPattern pattern(kAllSchemes);
137 EXPECT_EQ(URLPattern::PARSE_SUCCESS, 140 EXPECT_EQ(URLPattern::PARSE_SUCCESS,
138 pattern.Parse("http://*.google.com/foo*bar")); 141 pattern.Parse("http://*.google.com/foo*bar"));
139 EXPECT_EQ("http", pattern.scheme()); 142 EXPECT_EQ("http", pattern.scheme());
140 EXPECT_EQ("google.com", pattern.host()); 143 EXPECT_EQ("google.com", pattern.host());
141 EXPECT_TRUE(pattern.match_subdomains()); 144 EXPECT_TRUE(pattern.match_subdomains());
145 EXPECT_TRUE(pattern.match_effective_tld());
142 EXPECT_FALSE(pattern.match_all_urls()); 146 EXPECT_FALSE(pattern.match_all_urls());
143 EXPECT_EQ("/foo*bar", pattern.path()); 147 EXPECT_EQ("/foo*bar", pattern.path());
144 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar"))); 148 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar")));
145 EXPECT_TRUE(pattern.MatchesURL(GURL("http://www.google.com/foo?bar"))); 149 EXPECT_TRUE(pattern.MatchesURL(GURL("http://www.google.com/foo?bar")));
146 EXPECT_TRUE(pattern.MatchesURL( 150 EXPECT_TRUE(pattern.MatchesURL(
147 GURL("http://monkey.images.google.com/foooobar"))); 151 GURL("http://monkey.images.google.com/foooobar")));
148 EXPECT_FALSE(pattern.MatchesURL(GURL("http://yahoo.com/foobar"))); 152 EXPECT_FALSE(pattern.MatchesURL(GURL("http://yahoo.com/foobar")));
149 EXPECT_TRUE(pattern.MatchesURL( 153 EXPECT_TRUE(pattern.MatchesURL(
150 GURL("filesystem:http://google.com/foo/bar"))); 154 GURL("filesystem:http://google.com/foo/bar")));
151 EXPECT_FALSE(pattern.MatchesURL( 155 EXPECT_FALSE(pattern.MatchesURL(
152 GURL("filesystem:http://google.com/temporary/foobar"))); 156 GURL("filesystem:http://google.com/temporary/foobar")));
153 } 157 }
154 158
155 // glob escaping 159 // glob escaping
156 TEST(ExtensionURLPatternTest, Match5) { 160 TEST(ExtensionURLPatternTest, Match5) {
157 URLPattern pattern(kAllSchemes); 161 URLPattern pattern(kAllSchemes);
158 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file:///foo?bar\\*baz")); 162 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file:///foo?bar\\*baz"));
159 EXPECT_EQ("file", pattern.scheme()); 163 EXPECT_EQ("file", pattern.scheme());
160 EXPECT_EQ("", pattern.host()); 164 EXPECT_EQ("", pattern.host());
161 EXPECT_FALSE(pattern.match_subdomains()); 165 EXPECT_FALSE(pattern.match_subdomains());
166 EXPECT_TRUE(pattern.match_effective_tld());
162 EXPECT_FALSE(pattern.match_all_urls()); 167 EXPECT_FALSE(pattern.match_all_urls());
163 EXPECT_EQ("/foo?bar\\*baz", pattern.path()); 168 EXPECT_EQ("/foo?bar\\*baz", pattern.path());
164 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo?bar\\hellobaz"))); 169 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo?bar\\hellobaz")));
165 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///fooXbar\\hellobaz"))); 170 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///fooXbar\\hellobaz")));
166 } 171 }
167 172
168 // ip addresses 173 // ip addresses
169 TEST(ExtensionURLPatternTest, Match6) { 174 TEST(ExtensionURLPatternTest, Match6) {
170 URLPattern pattern(kAllSchemes); 175 URLPattern pattern(kAllSchemes);
171 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://127.0.0.1/*")); 176 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://127.0.0.1/*"));
172 EXPECT_EQ("http", pattern.scheme()); 177 EXPECT_EQ("http", pattern.scheme());
173 EXPECT_EQ("127.0.0.1", pattern.host()); 178 EXPECT_EQ("127.0.0.1", pattern.host());
174 EXPECT_FALSE(pattern.match_subdomains()); 179 EXPECT_FALSE(pattern.match_subdomains());
180 EXPECT_TRUE(pattern.match_effective_tld());
175 EXPECT_FALSE(pattern.match_all_urls()); 181 EXPECT_FALSE(pattern.match_all_urls());
176 EXPECT_EQ("/*", pattern.path()); 182 EXPECT_EQ("/*", pattern.path());
177 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); 183 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1")));
178 } 184 }
179 185
180 // subdomain matching with ip addresses 186 // subdomain matching with ip addresses
181 TEST(ExtensionURLPatternTest, Match7) { 187 TEST(ExtensionURLPatternTest, Match7) {
182 URLPattern pattern(kAllSchemes); 188 URLPattern pattern(kAllSchemes);
183 // allowed, but useless 189 // allowed, but useless
184 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.0.0.1/*")); 190 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.0.0.1/*"));
185 EXPECT_EQ("http", pattern.scheme()); 191 EXPECT_EQ("http", pattern.scheme());
186 EXPECT_EQ("0.0.1", pattern.host()); 192 EXPECT_EQ("0.0.1", pattern.host());
187 EXPECT_TRUE(pattern.match_subdomains()); 193 EXPECT_TRUE(pattern.match_subdomains());
194 EXPECT_TRUE(pattern.match_effective_tld());
188 EXPECT_FALSE(pattern.match_all_urls()); 195 EXPECT_FALSE(pattern.match_all_urls());
189 EXPECT_EQ("/*", pattern.path()); 196 EXPECT_EQ("/*", pattern.path());
190 // Subdomain matching is never done if the argument has an IP address host. 197 // Subdomain matching is never done if the argument has an IP address host.
191 EXPECT_FALSE(pattern.MatchesURL(GURL("http://127.0.0.1"))); 198 EXPECT_FALSE(pattern.MatchesURL(GURL("http://127.0.0.1")));
192 } 199 }
193 200
194 // unicode 201 // unicode
195 TEST(ExtensionURLPatternTest, Match8) { 202 TEST(ExtensionURLPatternTest, Match8) {
196 URLPattern pattern(kAllSchemes); 203 URLPattern pattern(kAllSchemes);
197 // The below is the ASCII encoding of the following URL: 204 // The below is the ASCII encoding of the following URL:
198 // http://*.\xe1\x80\xbf/a\xc2\x81\xe1* 205 // http://*.\xe1\x80\xbf/a\xc2\x81\xe1*
199 EXPECT_EQ(URLPattern::PARSE_SUCCESS, 206 EXPECT_EQ(URLPattern::PARSE_SUCCESS,
200 pattern.Parse("http://*.xn--gkd/a%C2%81%E1*")); 207 pattern.Parse("http://*.xn--gkd/a%C2%81%E1*"));
201 EXPECT_EQ("http", pattern.scheme()); 208 EXPECT_EQ("http", pattern.scheme());
202 EXPECT_EQ("xn--gkd", pattern.host()); 209 EXPECT_EQ("xn--gkd", pattern.host());
203 EXPECT_TRUE(pattern.match_subdomains()); 210 EXPECT_TRUE(pattern.match_subdomains());
211 EXPECT_TRUE(pattern.match_effective_tld());
204 EXPECT_FALSE(pattern.match_all_urls()); 212 EXPECT_FALSE(pattern.match_all_urls());
205 EXPECT_EQ("/a%C2%81%E1*", pattern.path()); 213 EXPECT_EQ("/a%C2%81%E1*", pattern.path());
206 EXPECT_TRUE(pattern.MatchesURL( 214 EXPECT_TRUE(pattern.MatchesURL(
207 GURL("http://abc.\xe1\x80\xbf/a\xc2\x81\xe1xyz"))); 215 GURL("http://abc.\xe1\x80\xbf/a\xc2\x81\xe1xyz")));
208 EXPECT_TRUE(pattern.MatchesURL( 216 EXPECT_TRUE(pattern.MatchesURL(
209 GURL("http://\xe1\x80\xbf/a\xc2\x81\xe1\xe1"))); 217 GURL("http://\xe1\x80\xbf/a\xc2\x81\xe1\xe1")));
210 } 218 }
211 219
212 // chrome:// 220 // chrome://
213 TEST(ExtensionURLPatternTest, Match9) { 221 TEST(ExtensionURLPatternTest, Match9) {
214 URLPattern pattern(kAllSchemes); 222 URLPattern pattern(kAllSchemes);
215 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("chrome://favicon/*")); 223 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("chrome://favicon/*"));
216 EXPECT_EQ("chrome", pattern.scheme()); 224 EXPECT_EQ("chrome", pattern.scheme());
217 EXPECT_EQ("favicon", pattern.host()); 225 EXPECT_EQ("favicon", pattern.host());
218 EXPECT_FALSE(pattern.match_subdomains()); 226 EXPECT_FALSE(pattern.match_subdomains());
227 EXPECT_TRUE(pattern.match_effective_tld());
219 EXPECT_FALSE(pattern.match_all_urls()); 228 EXPECT_FALSE(pattern.match_all_urls());
220 EXPECT_EQ("/*", pattern.path()); 229 EXPECT_EQ("/*", pattern.path());
221 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); 230 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com")));
222 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/https://google.com"))); 231 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/https://google.com")));
223 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://history"))); 232 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://history")));
224 } 233 }
225 234
226 // *:// 235 // *://
227 TEST(ExtensionURLPatternTest, Match10) { 236 TEST(ExtensionURLPatternTest, Match10) {
228 URLPattern pattern(kAllSchemes); 237 URLPattern pattern(kAllSchemes);
229 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("*://*/*")); 238 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("*://*/*"));
230 EXPECT_TRUE(pattern.MatchesScheme("http")); 239 EXPECT_TRUE(pattern.MatchesScheme("http"));
231 EXPECT_TRUE(pattern.MatchesScheme("https")); 240 EXPECT_TRUE(pattern.MatchesScheme("https"));
232 EXPECT_FALSE(pattern.MatchesScheme("chrome")); 241 EXPECT_FALSE(pattern.MatchesScheme("chrome"));
233 EXPECT_FALSE(pattern.MatchesScheme("file")); 242 EXPECT_FALSE(pattern.MatchesScheme("file"));
234 EXPECT_FALSE(pattern.MatchesScheme("ftp")); 243 EXPECT_FALSE(pattern.MatchesScheme("ftp"));
235 EXPECT_TRUE(pattern.match_subdomains()); 244 EXPECT_TRUE(pattern.match_subdomains());
245 EXPECT_TRUE(pattern.match_effective_tld());
236 EXPECT_FALSE(pattern.match_all_urls()); 246 EXPECT_FALSE(pattern.match_all_urls());
237 EXPECT_EQ("/*", pattern.path()); 247 EXPECT_EQ("/*", pattern.path());
238 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); 248 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1")));
239 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); 249 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com")));
240 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///foo/bar"))); 250 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///foo/bar")));
241 EXPECT_FALSE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); 251 EXPECT_FALSE(pattern.MatchesURL(GURL("file://localhost/foo/bar")));
242 } 252 }
243 253
244 // <all_urls> 254 // <all_urls>
245 TEST(ExtensionURLPatternTest, Match11) { 255 TEST(ExtensionURLPatternTest, Match11) {
246 URLPattern pattern(kAllSchemes); 256 URLPattern pattern(kAllSchemes);
247 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("<all_urls>")); 257 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("<all_urls>"));
248 EXPECT_TRUE(pattern.MatchesScheme("chrome")); 258 EXPECT_TRUE(pattern.MatchesScheme("chrome"));
249 EXPECT_TRUE(pattern.MatchesScheme("http")); 259 EXPECT_TRUE(pattern.MatchesScheme("http"));
250 EXPECT_TRUE(pattern.MatchesScheme("https")); 260 EXPECT_TRUE(pattern.MatchesScheme("https"));
251 EXPECT_TRUE(pattern.MatchesScheme("file")); 261 EXPECT_TRUE(pattern.MatchesScheme("file"));
252 EXPECT_TRUE(pattern.MatchesScheme("filesystem")); 262 EXPECT_TRUE(pattern.MatchesScheme("filesystem"));
253 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); 263 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension"));
254 EXPECT_TRUE(pattern.match_subdomains()); 264 EXPECT_TRUE(pattern.match_subdomains());
265 EXPECT_TRUE(pattern.match_effective_tld());
255 EXPECT_TRUE(pattern.match_all_urls()); 266 EXPECT_TRUE(pattern.match_all_urls());
256 EXPECT_EQ("/*", pattern.path()); 267 EXPECT_EQ("/*", pattern.path());
257 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); 268 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com")));
258 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); 269 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1")));
259 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar"))); 270 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar")));
260 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); 271 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar")));
261 272
262 // Make sure the properties are the same when creating an <all_urls> pattern 273 // Make sure the properties are the same when creating an <all_urls> pattern
263 // via SetMatchAllURLs and by parsing <all_urls>. 274 // via SetMatchAllURLs and by parsing <all_urls>.
264 URLPattern pattern2(kAllSchemes); 275 URLPattern pattern2(kAllSchemes);
(...skipping 15 matching lines...) Expand all
280 EXPECT_TRUE(pattern.MatchesScheme("chrome")); 291 EXPECT_TRUE(pattern.MatchesScheme("chrome"));
281 EXPECT_TRUE(pattern.MatchesScheme("http")); 292 EXPECT_TRUE(pattern.MatchesScheme("http"));
282 EXPECT_TRUE(pattern.MatchesScheme("https")); 293 EXPECT_TRUE(pattern.MatchesScheme("https"));
283 EXPECT_TRUE(pattern.MatchesScheme("file")); 294 EXPECT_TRUE(pattern.MatchesScheme("file"));
284 EXPECT_TRUE(pattern.MatchesScheme("filesystem")); 295 EXPECT_TRUE(pattern.MatchesScheme("filesystem"));
285 EXPECT_TRUE(pattern.MatchesScheme("javascript")); 296 EXPECT_TRUE(pattern.MatchesScheme("javascript"));
286 EXPECT_TRUE(pattern.MatchesScheme("data")); 297 EXPECT_TRUE(pattern.MatchesScheme("data"));
287 EXPECT_TRUE(pattern.MatchesScheme("about")); 298 EXPECT_TRUE(pattern.MatchesScheme("about"));
288 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); 299 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension"));
289 EXPECT_TRUE(pattern.match_subdomains()); 300 EXPECT_TRUE(pattern.match_subdomains());
301 EXPECT_TRUE(pattern.match_effective_tld());
290 EXPECT_TRUE(pattern.match_all_urls()); 302 EXPECT_TRUE(pattern.match_all_urls());
291 EXPECT_EQ("/*", pattern.path()); 303 EXPECT_EQ("/*", pattern.path());
292 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); 304 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com")));
293 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); 305 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1")));
294 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar"))); 306 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar")));
295 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); 307 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar")));
296 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://newtab"))); 308 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://newtab")));
297 EXPECT_TRUE(pattern.MatchesURL(GURL("about:blank"))); 309 EXPECT_TRUE(pattern.MatchesURL(GURL("about:blank")));
298 EXPECT_TRUE(pattern.MatchesURL(GURL("about:version"))); 310 EXPECT_TRUE(pattern.MatchesURL(GURL("about:version")));
299 EXPECT_TRUE(pattern.MatchesURL( 311 EXPECT_TRUE(pattern.MatchesURL(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 } 343 }
332 344
333 // file scheme with empty hostname 345 // file scheme with empty hostname
334 TEST(ExtensionURLPatternTest, Match14) { 346 TEST(ExtensionURLPatternTest, Match14) {
335 URLPattern pattern(kAllSchemes); 347 URLPattern pattern(kAllSchemes);
336 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file:///foo*")); 348 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file:///foo*"));
337 EXPECT_EQ("file", pattern.scheme()); 349 EXPECT_EQ("file", pattern.scheme());
338 EXPECT_EQ("", pattern.host()); 350 EXPECT_EQ("", pattern.host());
339 EXPECT_FALSE(pattern.match_subdomains()); 351 EXPECT_FALSE(pattern.match_subdomains());
340 EXPECT_FALSE(pattern.match_all_urls()); 352 EXPECT_FALSE(pattern.match_all_urls());
353 EXPECT_TRUE(pattern.match_effective_tld());
341 EXPECT_EQ("/foo*", pattern.path()); 354 EXPECT_EQ("/foo*", pattern.path());
342 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); 355 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo")));
343 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); 356 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar")));
344 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); 357 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo")));
345 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); 358 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar")));
346 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); 359 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo")));
347 } 360 }
348 361
349 // file scheme without hostname part 362 // file scheme without hostname part
350 TEST(ExtensionURLPatternTest, Match15) { 363 TEST(ExtensionURLPatternTest, Match15) {
351 URLPattern pattern(kAllSchemes); 364 URLPattern pattern(kAllSchemes);
352 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file://foo*")); 365 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file://foo*"));
353 EXPECT_EQ("file", pattern.scheme()); 366 EXPECT_EQ("file", pattern.scheme());
354 EXPECT_EQ("", pattern.host()); 367 EXPECT_EQ("", pattern.host());
355 EXPECT_FALSE(pattern.match_subdomains()); 368 EXPECT_FALSE(pattern.match_subdomains());
356 EXPECT_FALSE(pattern.match_all_urls()); 369 EXPECT_FALSE(pattern.match_all_urls());
370 EXPECT_TRUE(pattern.match_effective_tld());
357 EXPECT_EQ("/foo*", pattern.path()); 371 EXPECT_EQ("/foo*", pattern.path());
358 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); 372 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo")));
359 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); 373 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar")));
360 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); 374 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo")));
361 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); 375 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar")));
362 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); 376 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo")));
363 } 377 }
364 378
365 // file scheme with hostname 379 // file scheme with hostname
366 TEST(ExtensionURLPatternTest, Match16) { 380 TEST(ExtensionURLPatternTest, Match16) {
367 URLPattern pattern(kAllSchemes); 381 URLPattern pattern(kAllSchemes);
368 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file://localhost/foo*")); 382 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file://localhost/foo*"));
369 EXPECT_EQ("file", pattern.scheme()); 383 EXPECT_EQ("file", pattern.scheme());
370 // Since hostname is ignored for file://. 384 // Since hostname is ignored for file://.
371 EXPECT_EQ("", pattern.host()); 385 EXPECT_EQ("", pattern.host());
372 EXPECT_FALSE(pattern.match_subdomains()); 386 EXPECT_FALSE(pattern.match_subdomains());
387 EXPECT_TRUE(pattern.match_effective_tld());
373 EXPECT_FALSE(pattern.match_all_urls()); 388 EXPECT_FALSE(pattern.match_all_urls());
374 EXPECT_EQ("/foo*", pattern.path()); 389 EXPECT_EQ("/foo*", pattern.path());
375 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); 390 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo")));
376 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); 391 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar")));
377 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); 392 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo")));
378 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); 393 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar")));
379 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); 394 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo")));
380 } 395 }
381 396
382 // Specific port 397 // Specific port
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome-extension://ftw"))); 445 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome-extension://ftw")));
431 EXPECT_TRUE(pattern.MatchesURL( 446 EXPECT_TRUE(pattern.MatchesURL(
432 GURL("chrome-extension://ftw/http://google.com"))); 447 GURL("chrome-extension://ftw/http://google.com")));
433 EXPECT_TRUE(pattern.MatchesURL( 448 EXPECT_TRUE(pattern.MatchesURL(
434 GURL("chrome-extension://ftw/https://google.com"))); 449 GURL("chrome-extension://ftw/https://google.com")));
435 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome-extension://foobar"))); 450 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome-extension://foobar")));
436 EXPECT_TRUE(pattern.MatchesURL( 451 EXPECT_TRUE(pattern.MatchesURL(
437 GURL("filesystem:chrome-extension://ftw/t/file.txt"))); 452 GURL("filesystem:chrome-extension://ftw/t/file.txt")));
438 } 453 }
439 454
455 // effective TLD wildcard
456 TEST(URLPatternTest, EffectiveTldWildcard) {
457 URLPattern pattern(kAllSchemes);
458 EXPECT_EQ(URLPattern::PARSE_SUCCESS,
459 pattern.Parse("http://*.google.*/foo*bar",
460 URLPattern::ALLOW_WILDCARD_FOR_EFFECTIVE_TLD));
461 EXPECT_EQ("http", pattern.scheme());
462 EXPECT_EQ("google", pattern.host());
463 EXPECT_TRUE(pattern.match_subdomains());
464 EXPECT_FALSE(pattern.match_effective_tld());
465 EXPECT_FALSE(pattern.match_all_urls());
466 EXPECT_EQ("/foo*bar", pattern.path());
467 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar")));
468 EXPECT_TRUE(pattern.MatchesURL(GURL("http://www.google.com.br/foo?bar")));
469 EXPECT_TRUE(
470 pattern.MatchesURL(GURL("http://monkey.images.google.co.uk/foooobar")));
471 EXPECT_FALSE(pattern.MatchesURL(GURL("http://yahoo.com/foobar")));
472 EXPECT_TRUE(pattern.MatchesURL(GURL("filesystem:http://google.com/foo/bar")));
473 EXPECT_FALSE(pattern.MatchesURL(
474 GURL("filesystem:http://google.com/temporary/foobar")));
475 URLPattern pattern_sub(kAllSchemes);
476 EXPECT_EQ(URLPattern::PARSE_SUCCESS,
477 pattern_sub.Parse("https://maps.google.*/",
478 URLPattern::ALLOW_WILDCARD_FOR_EFFECTIVE_TLD));
479 EXPECT_EQ("https", pattern_sub.scheme());
480 EXPECT_EQ("maps.google", pattern_sub.host());
481 EXPECT_FALSE(pattern_sub.match_subdomains());
482 EXPECT_FALSE(pattern_sub.match_all_urls());
483 EXPECT_EQ("/", pattern_sub.path());
484 EXPECT_TRUE(pattern_sub.MatchesURL(GURL("https://maps.google.co.uk/")));
485 EXPECT_FALSE(pattern_sub.MatchesURL(GURL("https://sub.maps.google.co.uk/")));
486 }
487
440 static const struct GetAsStringPatterns { 488 static const struct GetAsStringPatterns {
441 const char* pattern; 489 const char* pattern;
442 } kGetAsStringTestCases[] = { 490 } kGetAsStringTestCases[] = {
443 { "http://www/" }, 491 { "http://www/" },
444 { "http://*/*" }, 492 { "http://*/*" },
445 { "chrome://*/*" }, 493 { "chrome://*/*" },
446 { "chrome://newtab/" }, 494 { "chrome://newtab/" },
447 { "about:*" }, 495 { "about:*" },
448 { "about:blank" }, 496 { "about:blank" },
449 { "chrome-extension://*/*" }, 497 { "chrome-extension://*/*" },
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 EXPECT_TRUE(pattern.MatchesURL(normal_domain)); 920 EXPECT_TRUE(pattern.MatchesURL(normal_domain));
873 EXPECT_TRUE(pattern.MatchesURL(trailing_dot_domain)); 921 EXPECT_TRUE(pattern.MatchesURL(trailing_dot_domain));
874 922
875 const URLPattern trailing_pattern(URLPattern::SCHEME_HTTP, 923 const URLPattern trailing_pattern(URLPattern::SCHEME_HTTP,
876 "*://example.com./*"); 924 "*://example.com./*");
877 EXPECT_TRUE(trailing_pattern.MatchesURL(normal_domain)); 925 EXPECT_TRUE(trailing_pattern.MatchesURL(normal_domain));
878 EXPECT_TRUE(trailing_pattern.MatchesURL(trailing_dot_domain)); 926 EXPECT_TRUE(trailing_pattern.MatchesURL(trailing_dot_domain));
879 } 927 }
880 928
881 } // namespace 929 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698