OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |