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

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

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

Powered by Google App Engine
This is Rietveld 408576698