OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "chrome/common/extensions/url_pattern.h" | 6 #include "chrome/common/extensions/url_pattern.h" |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 #include "googleurl/src/gurl.h" | 8 #include "googleurl/src/gurl.h" |
9 | 9 |
10 // See url_pattern.h for examples of valid and invalid patterns. | 10 // See url_pattern.h for examples of valid and invalid patterns. |
(...skipping 20 matching lines...) Expand all Loading... | |
31 { "http://foo.*.bar/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, | 31 { "http://foo.*.bar/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, |
32 { "http://fo.*.ba:123/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, | 32 { "http://fo.*.ba:123/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, |
33 { "http:/bar", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, | 33 { "http:/bar", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, |
34 { "http://bar", URLPattern::PARSE_ERROR_EMPTY_PATH }, | 34 { "http://bar", URLPattern::PARSE_ERROR_EMPTY_PATH }, |
35 }; | 35 }; |
36 | 36 |
37 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kInvalidPatterns); ++i) { | 37 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kInvalidPatterns); ++i) { |
38 URLPattern pattern(URLPattern::SCHEME_ALL); | 38 URLPattern pattern(URLPattern::SCHEME_ALL); |
39 EXPECT_EQ(kInvalidPatterns[i].expected_result, | 39 EXPECT_EQ(kInvalidPatterns[i].expected_result, |
40 pattern.Parse(kInvalidPatterns[i].pattern, | 40 pattern.Parse(kInvalidPatterns[i].pattern, |
41 URLPattern::PARSE_LENIENT)) | 41 URLPattern::IGNORE_PORTS)) |
42 << kInvalidPatterns[i].pattern; | 42 << kInvalidPatterns[i].pattern; |
43 } | 43 } |
44 }; | 44 }; |
45 | 45 |
46 TEST(ExtensionURLPatternTest, Colons) { | 46 TEST(ExtensionURLPatternTest, Ports) { |
47 const struct { | 47 const struct { |
48 const char* pattern; | 48 const char* pattern; |
49 URLPattern::ParseResult expected_result; | 49 URLPattern::ParseResult expected_result_error_on_ports; |
50 URLPattern::ParseResult expected_result_use_ports; | |
51 const char* expected_port; | |
50 } kTestPatterns[] = { | 52 } kTestPatterns[] = { |
51 { "http://foo:1234/", URLPattern::PARSE_ERROR_HAS_COLON }, | 53 { "http://foo:1234/", URLPattern::PARSE_ERROR_HAS_COLON, |
52 { "http://foo:1234/bar", URLPattern::PARSE_ERROR_HAS_COLON }, | 54 URLPattern::PARSE_SUCCESS, "1234" }, |
53 { "http://*.foo:1234/", URLPattern::PARSE_ERROR_HAS_COLON }, | 55 { "http://foo:1234/bar", URLPattern::PARSE_ERROR_HAS_COLON, |
54 { "http://*.foo:1234/bar", URLPattern::PARSE_ERROR_HAS_COLON }, | 56 URLPattern::PARSE_SUCCESS, "1234" }, |
55 { "http://:1234/", URLPattern::PARSE_ERROR_HAS_COLON }, | 57 { "http://*.foo:1234/", URLPattern::PARSE_ERROR_HAS_COLON, |
56 { "http://foo:/", URLPattern::PARSE_ERROR_HAS_COLON }, | 58 URLPattern::PARSE_SUCCESS, "1234" }, |
57 { "http://*.foo:/", URLPattern::PARSE_ERROR_HAS_COLON }, | 59 { "http://*.foo:1234/bar", URLPattern::PARSE_ERROR_HAS_COLON, |
58 { "http://foo:com/", URLPattern::PARSE_ERROR_HAS_COLON }, | 60 URLPattern::PARSE_SUCCESS, "1234" }, |
61 { "http://:1234/", URLPattern::PARSE_ERROR_HAS_COLON, | |
62 URLPattern::PARSE_SUCCESS, "1234" }, | |
63 { "http://foo:/", URLPattern::PARSE_ERROR_HAS_COLON, | |
64 URLPattern::PARSE_SUCCESS, "" }, | |
65 { "http://foo:*/", URLPattern::PARSE_ERROR_HAS_COLON, | |
66 URLPattern::PARSE_SUCCESS, "*" }, | |
67 { "http://*.foo:/", URLPattern::PARSE_ERROR_HAS_COLON, | |
68 URLPattern::PARSE_SUCCESS, "" }, | |
69 { "http://foo:com/", URLPattern::PARSE_ERROR_HAS_COLON, | |
70 URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, | |
71 { "http://foo:123456/", URLPattern::PARSE_ERROR_HAS_COLON, | |
72 URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, | |
59 | 73 |
60 // Port-like strings in the path should not trigger a warning. | 74 // Port-like strings in the path should not trigger a warning. |
61 { "http://*/:1234", URLPattern::PARSE_SUCCESS }, | 75 { "http://*/:1234", URLPattern::PARSE_SUCCESS, |
62 { "http://*.foo/bar:1234", URLPattern::PARSE_SUCCESS }, | 76 URLPattern::PARSE_SUCCESS, "*" }, |
63 { "http://foo/bar:1234/path", URLPattern::PARSE_SUCCESS }, | 77 { "http://*.foo/bar:1234", URLPattern::PARSE_SUCCESS, |
78 URLPattern::PARSE_SUCCESS, "*" }, | |
79 { "http://foo/bar:1234/path", URLPattern::PARSE_SUCCESS, | |
80 URLPattern::PARSE_SUCCESS, "*" }, | |
64 }; | 81 }; |
65 | 82 |
66 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestPatterns); ++i) { | 83 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestPatterns); ++i) { |
67 URLPattern pattern(URLPattern::SCHEME_ALL); | 84 URLPattern use_ports_pattern(URLPattern::SCHEME_ALL); |
85 // Check results with |USE_PORTS|. | |
86 EXPECT_EQ(kTestPatterns[i].expected_result_use_ports, | |
87 use_ports_pattern.Parse(kTestPatterns[i].pattern, | |
88 URLPattern::USE_PORTS)) | |
89 << "Got unexpected result for URL pattern: " | |
90 << kTestPatterns[i].pattern; | |
91 EXPECT_EQ(kTestPatterns[i].expected_port, use_ports_pattern.port()) | |
92 << "Got unexpected port for URL pattern: " << kTestPatterns[i].pattern; | |
68 | 93 |
69 // Without |strict_error_checks|, expect success. | 94 URLPattern ignore_ports_pattern(URLPattern::SCHEME_ALL); |
95 // Check results with |IGNORE_PORTS|. | |
70 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 96 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
71 pattern.Parse(kTestPatterns[i].pattern, | 97 ignore_ports_pattern.Parse(kTestPatterns[i].pattern, |
72 URLPattern::PARSE_LENIENT)) | 98 URLPattern::IGNORE_PORTS)) |
73 << "Got unexpected error for URL pattern: " | 99 << "Got unexpected result for URL pattern: " |
74 << kTestPatterns[i].pattern; | 100 << kTestPatterns[i].pattern; |
101 EXPECT_EQ("*", ignore_ports_pattern.port()) | |
102 << "Got unexpected port for URL pattern: " << kTestPatterns[i].pattern; | |
75 | 103 |
76 EXPECT_EQ(kTestPatterns[i].expected_result, | 104 URLPattern error_on_ports_pattern(URLPattern::SCHEME_ALL); |
77 pattern.Parse(kTestPatterns[i].pattern, | 105 // Check results with |ERROR_ON_PORTS|. |
78 URLPattern::PARSE_STRICT)) | 106 EXPECT_EQ(kTestPatterns[i].expected_result_error_on_ports, |
107 error_on_ports_pattern.Parse(kTestPatterns[i].pattern, | |
108 URLPattern::ERROR_ON_PORTS)) | |
79 << "Got unexpected result for URL pattern: " | 109 << "Got unexpected result for URL pattern: " |
80 << kTestPatterns[i].pattern; | 110 << kTestPatterns[i].pattern; |
81 } | 111 } |
82 }; | 112 }; |
83 | 113 |
84 // all pages for a given scheme | 114 // all pages for a given scheme |
85 TEST(ExtensionURLPatternTest, Match1) { | 115 TEST(ExtensionURLPatternTest, Match1) { |
86 URLPattern pattern(kAllSchemes); | 116 URLPattern pattern(kAllSchemes); |
87 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 117 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
88 pattern.Parse("http://*/*", URLPattern::PARSE_STRICT)); | 118 pattern.Parse("http://*/*", URLPattern::ERROR_ON_PORTS)); |
89 EXPECT_EQ("http", pattern.scheme()); | 119 EXPECT_EQ("http", pattern.scheme()); |
90 EXPECT_EQ("", pattern.host()); | 120 EXPECT_EQ("", pattern.host()); |
91 EXPECT_TRUE(pattern.match_subdomains()); | 121 EXPECT_TRUE(pattern.match_subdomains()); |
92 EXPECT_FALSE(pattern.match_all_urls()); | 122 EXPECT_FALSE(pattern.match_all_urls()); |
93 EXPECT_EQ("/*", pattern.path()); | 123 EXPECT_EQ("/*", pattern.path()); |
94 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com"))); | 124 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com"))); |
95 EXPECT_TRUE(pattern.MatchesURL(GURL("http://yahoo.com"))); | 125 EXPECT_TRUE(pattern.MatchesURL(GURL("http://yahoo.com"))); |
96 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foo"))); | 126 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foo"))); |
97 EXPECT_FALSE(pattern.MatchesURL(GURL("https://google.com"))); | 127 EXPECT_FALSE(pattern.MatchesURL(GURL("https://google.com"))); |
98 EXPECT_TRUE(pattern.MatchesURL(GURL("http://74.125.127.100/search"))); | 128 EXPECT_TRUE(pattern.MatchesURL(GURL("http://74.125.127.100/search"))); |
99 } | 129 } |
100 | 130 |
101 // all domains | 131 // all domains |
102 TEST(ExtensionURLPatternTest, Match2) { | 132 TEST(ExtensionURLPatternTest, Match2) { |
103 URLPattern pattern(kAllSchemes); | 133 URLPattern pattern(kAllSchemes); |
104 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 134 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
105 pattern.Parse("https://*/foo*", URLPattern::PARSE_STRICT)); | 135 pattern.Parse("https://*/foo*", URLPattern::ERROR_ON_PORTS)); |
106 EXPECT_EQ("https", pattern.scheme()); | 136 EXPECT_EQ("https", pattern.scheme()); |
107 EXPECT_EQ("", pattern.host()); | 137 EXPECT_EQ("", pattern.host()); |
108 EXPECT_TRUE(pattern.match_subdomains()); | 138 EXPECT_TRUE(pattern.match_subdomains()); |
109 EXPECT_FALSE(pattern.match_all_urls()); | 139 EXPECT_FALSE(pattern.match_all_urls()); |
110 EXPECT_EQ("/foo*", pattern.path()); | 140 EXPECT_EQ("/foo*", pattern.path()); |
111 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foo"))); | 141 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foo"))); |
112 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foobar"))); | 142 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foobar"))); |
113 EXPECT_FALSE(pattern.MatchesURL(GURL("http://www.google.com/foo"))); | 143 EXPECT_FALSE(pattern.MatchesURL(GURL("http://www.google.com/foo"))); |
114 EXPECT_FALSE(pattern.MatchesURL(GURL("https://www.google.com/"))); | 144 EXPECT_FALSE(pattern.MatchesURL(GURL("https://www.google.com/"))); |
115 } | 145 } |
116 | 146 |
117 // subdomains | 147 // subdomains |
118 TEST(URLPatternTest, Match3) { | 148 TEST(URLPatternTest, Match3) { |
119 URLPattern pattern(kAllSchemes); | 149 URLPattern pattern(kAllSchemes); |
120 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 150 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
121 pattern.Parse("http://*.google.com/foo*bar", | 151 pattern.Parse("http://*.google.com/foo*bar", |
122 URLPattern::PARSE_STRICT)); | 152 URLPattern::ERROR_ON_PORTS)); |
123 EXPECT_EQ("http", pattern.scheme()); | 153 EXPECT_EQ("http", pattern.scheme()); |
124 EXPECT_EQ("google.com", pattern.host()); | 154 EXPECT_EQ("google.com", pattern.host()); |
125 EXPECT_TRUE(pattern.match_subdomains()); | 155 EXPECT_TRUE(pattern.match_subdomains()); |
126 EXPECT_FALSE(pattern.match_all_urls()); | 156 EXPECT_FALSE(pattern.match_all_urls()); |
127 EXPECT_EQ("/foo*bar", pattern.path()); | 157 EXPECT_EQ("/foo*bar", pattern.path()); |
128 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar"))); | 158 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar"))); |
129 EXPECT_TRUE(pattern.MatchesURL(GURL("http://www.google.com/foo?bar"))); | 159 EXPECT_TRUE(pattern.MatchesURL(GURL("http://www.google.com/foo?bar"))); |
130 EXPECT_TRUE(pattern.MatchesURL( | 160 EXPECT_TRUE(pattern.MatchesURL( |
131 GURL("http://monkey.images.google.com/foooobar"))); | 161 GURL("http://monkey.images.google.com/foooobar"))); |
132 EXPECT_FALSE(pattern.MatchesURL(GURL("http://yahoo.com/foobar"))); | 162 EXPECT_FALSE(pattern.MatchesURL(GURL("http://yahoo.com/foobar"))); |
133 } | 163 } |
134 | 164 |
135 // glob escaping | 165 // glob escaping |
136 TEST(ExtensionURLPatternTest, Match5) { | 166 TEST(ExtensionURLPatternTest, Match5) { |
137 URLPattern pattern(kAllSchemes); | 167 URLPattern pattern(kAllSchemes); |
138 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 168 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
139 pattern.Parse("file:///foo?bar\\*baz", URLPattern::PARSE_STRICT)); | 169 pattern.Parse("file:///foo?bar\\*baz", URLPattern::ERROR_ON_PORTS)); |
140 EXPECT_EQ("file", pattern.scheme()); | 170 EXPECT_EQ("file", pattern.scheme()); |
141 EXPECT_EQ("", pattern.host()); | 171 EXPECT_EQ("", pattern.host()); |
142 EXPECT_FALSE(pattern.match_subdomains()); | 172 EXPECT_FALSE(pattern.match_subdomains()); |
143 EXPECT_FALSE(pattern.match_all_urls()); | 173 EXPECT_FALSE(pattern.match_all_urls()); |
144 EXPECT_EQ("/foo?bar\\*baz", pattern.path()); | 174 EXPECT_EQ("/foo?bar\\*baz", pattern.path()); |
145 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo?bar\\hellobaz"))); | 175 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo?bar\\hellobaz"))); |
146 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///fooXbar\\hellobaz"))); | 176 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///fooXbar\\hellobaz"))); |
147 } | 177 } |
148 | 178 |
149 // ip addresses | 179 // ip addresses |
150 TEST(ExtensionURLPatternTest, Match6) { | 180 TEST(ExtensionURLPatternTest, Match6) { |
151 URLPattern pattern(kAllSchemes); | 181 URLPattern pattern(kAllSchemes); |
152 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 182 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
153 pattern.Parse("http://127.0.0.1/*", URLPattern::PARSE_STRICT)); | 183 pattern.Parse("http://127.0.0.1/*", URLPattern::ERROR_ON_PORTS)); |
154 EXPECT_EQ("http", pattern.scheme()); | 184 EXPECT_EQ("http", pattern.scheme()); |
155 EXPECT_EQ("127.0.0.1", pattern.host()); | 185 EXPECT_EQ("127.0.0.1", pattern.host()); |
156 EXPECT_FALSE(pattern.match_subdomains()); | 186 EXPECT_FALSE(pattern.match_subdomains()); |
157 EXPECT_FALSE(pattern.match_all_urls()); | 187 EXPECT_FALSE(pattern.match_all_urls()); |
158 EXPECT_EQ("/*", pattern.path()); | 188 EXPECT_EQ("/*", pattern.path()); |
159 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); | 189 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
160 } | 190 } |
161 | 191 |
162 // subdomain matching with ip addresses | 192 // subdomain matching with ip addresses |
163 TEST(ExtensionURLPatternTest, Match7) { | 193 TEST(ExtensionURLPatternTest, Match7) { |
164 URLPattern pattern(kAllSchemes); | 194 URLPattern pattern(kAllSchemes); |
165 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 195 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
166 pattern.Parse("http://*.0.0.1/*", | 196 pattern.Parse("http://*.0.0.1/*", |
167 URLPattern::PARSE_STRICT)); // allowed, but useless | 197 URLPattern::ERROR_ON_PORTS)); // allowed, but useless |
168 EXPECT_EQ("http", pattern.scheme()); | 198 EXPECT_EQ("http", pattern.scheme()); |
169 EXPECT_EQ("0.0.1", pattern.host()); | 199 EXPECT_EQ("0.0.1", pattern.host()); |
170 EXPECT_TRUE(pattern.match_subdomains()); | 200 EXPECT_TRUE(pattern.match_subdomains()); |
171 EXPECT_FALSE(pattern.match_all_urls()); | 201 EXPECT_FALSE(pattern.match_all_urls()); |
172 EXPECT_EQ("/*", pattern.path()); | 202 EXPECT_EQ("/*", pattern.path()); |
173 // Subdomain matching is never done if the argument has an IP address host. | 203 // Subdomain matching is never done if the argument has an IP address host. |
174 EXPECT_FALSE(pattern.MatchesURL(GURL("http://127.0.0.1"))); | 204 EXPECT_FALSE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
175 }; | 205 }; |
176 | 206 |
177 // unicode | 207 // unicode |
178 TEST(ExtensionURLPatternTest, Match8) { | 208 TEST(ExtensionURLPatternTest, Match8) { |
179 URLPattern pattern(kAllSchemes); | 209 URLPattern pattern(kAllSchemes); |
180 // The below is the ASCII encoding of the following URL: | 210 // The below is the ASCII encoding of the following URL: |
181 // http://*.\xe1\x80\xbf/a\xc2\x81\xe1* | 211 // http://*.\xe1\x80\xbf/a\xc2\x81\xe1* |
182 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 212 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
183 pattern.Parse("http://*.xn--gkd/a%C2%81%E1*", | 213 pattern.Parse("http://*.xn--gkd/a%C2%81%E1*", |
184 URLPattern::PARSE_STRICT)); | 214 URLPattern::ERROR_ON_PORTS)); |
185 EXPECT_EQ("http", pattern.scheme()); | 215 EXPECT_EQ("http", pattern.scheme()); |
186 EXPECT_EQ("xn--gkd", pattern.host()); | 216 EXPECT_EQ("xn--gkd", pattern.host()); |
187 EXPECT_TRUE(pattern.match_subdomains()); | 217 EXPECT_TRUE(pattern.match_subdomains()); |
188 EXPECT_FALSE(pattern.match_all_urls()); | 218 EXPECT_FALSE(pattern.match_all_urls()); |
189 EXPECT_EQ("/a%C2%81%E1*", pattern.path()); | 219 EXPECT_EQ("/a%C2%81%E1*", pattern.path()); |
190 EXPECT_TRUE(pattern.MatchesURL( | 220 EXPECT_TRUE(pattern.MatchesURL( |
191 GURL("http://abc.\xe1\x80\xbf/a\xc2\x81\xe1xyz"))); | 221 GURL("http://abc.\xe1\x80\xbf/a\xc2\x81\xe1xyz"))); |
192 EXPECT_TRUE(pattern.MatchesURL( | 222 EXPECT_TRUE(pattern.MatchesURL( |
193 GURL("http://\xe1\x80\xbf/a\xc2\x81\xe1\xe1"))); | 223 GURL("http://\xe1\x80\xbf/a\xc2\x81\xe1\xe1"))); |
194 }; | 224 }; |
195 | 225 |
196 // chrome:// | 226 // chrome:// |
197 TEST(ExtensionURLPatternTest, Match9) { | 227 TEST(ExtensionURLPatternTest, Match9) { |
198 URLPattern pattern(kAllSchemes); | 228 URLPattern pattern(kAllSchemes); |
199 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 229 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
200 pattern.Parse("chrome://favicon/*", URLPattern::PARSE_STRICT)); | 230 pattern.Parse("chrome://favicon/*", URLPattern::ERROR_ON_PORTS)); |
201 EXPECT_EQ("chrome", pattern.scheme()); | 231 EXPECT_EQ("chrome", pattern.scheme()); |
202 EXPECT_EQ("favicon", pattern.host()); | 232 EXPECT_EQ("favicon", pattern.host()); |
203 EXPECT_FALSE(pattern.match_subdomains()); | 233 EXPECT_FALSE(pattern.match_subdomains()); |
204 EXPECT_FALSE(pattern.match_all_urls()); | 234 EXPECT_FALSE(pattern.match_all_urls()); |
205 EXPECT_EQ("/*", pattern.path()); | 235 EXPECT_EQ("/*", pattern.path()); |
206 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); | 236 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
207 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/https://google.com"))); | 237 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/https://google.com"))); |
208 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://history"))); | 238 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://history"))); |
209 }; | 239 }; |
210 | 240 |
211 // *:// | 241 // *:// |
212 TEST(ExtensionURLPatternTest, Match10) { | 242 TEST(ExtensionURLPatternTest, Match10) { |
213 URLPattern pattern(kAllSchemes); | 243 URLPattern pattern(kAllSchemes); |
214 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 244 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
215 pattern.Parse("*://*/*", URLPattern::PARSE_STRICT)); | 245 pattern.Parse("*://*/*", URLPattern::ERROR_ON_PORTS)); |
216 EXPECT_TRUE(pattern.MatchesScheme("http")); | 246 EXPECT_TRUE(pattern.MatchesScheme("http")); |
217 EXPECT_TRUE(pattern.MatchesScheme("https")); | 247 EXPECT_TRUE(pattern.MatchesScheme("https")); |
218 EXPECT_FALSE(pattern.MatchesScheme("chrome")); | 248 EXPECT_FALSE(pattern.MatchesScheme("chrome")); |
219 EXPECT_FALSE(pattern.MatchesScheme("file")); | 249 EXPECT_FALSE(pattern.MatchesScheme("file")); |
220 EXPECT_FALSE(pattern.MatchesScheme("ftp")); | 250 EXPECT_FALSE(pattern.MatchesScheme("ftp")); |
221 EXPECT_TRUE(pattern.match_subdomains()); | 251 EXPECT_TRUE(pattern.match_subdomains()); |
222 EXPECT_FALSE(pattern.match_all_urls()); | 252 EXPECT_FALSE(pattern.match_all_urls()); |
223 EXPECT_EQ("/*", pattern.path()); | 253 EXPECT_EQ("/*", pattern.path()); |
224 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); | 254 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
225 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); | 255 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
226 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///foo/bar"))); | 256 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///foo/bar"))); |
227 EXPECT_FALSE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); | 257 EXPECT_FALSE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); |
228 }; | 258 }; |
229 | 259 |
230 // <all_urls> | 260 // <all_urls> |
231 TEST(ExtensionURLPatternTest, Match11) { | 261 TEST(ExtensionURLPatternTest, Match11) { |
232 URLPattern pattern(kAllSchemes); | 262 URLPattern pattern(kAllSchemes); |
233 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 263 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
234 pattern.Parse("<all_urls>", URLPattern::PARSE_STRICT)); | 264 pattern.Parse("<all_urls>", URLPattern::ERROR_ON_PORTS)); |
235 EXPECT_TRUE(pattern.MatchesScheme("chrome")); | 265 EXPECT_TRUE(pattern.MatchesScheme("chrome")); |
236 EXPECT_TRUE(pattern.MatchesScheme("http")); | 266 EXPECT_TRUE(pattern.MatchesScheme("http")); |
237 EXPECT_TRUE(pattern.MatchesScheme("https")); | 267 EXPECT_TRUE(pattern.MatchesScheme("https")); |
238 EXPECT_TRUE(pattern.MatchesScheme("file")); | 268 EXPECT_TRUE(pattern.MatchesScheme("file")); |
239 EXPECT_TRUE(pattern.match_subdomains()); | 269 EXPECT_TRUE(pattern.match_subdomains()); |
240 EXPECT_TRUE(pattern.match_all_urls()); | 270 EXPECT_TRUE(pattern.match_all_urls()); |
241 EXPECT_EQ("/*", pattern.path()); | 271 EXPECT_EQ("/*", pattern.path()); |
242 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); | 272 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
243 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); | 273 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
244 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar"))); | 274 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar"))); |
245 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); | 275 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); |
246 }; | 276 }; |
247 | 277 |
248 // SCHEME_ALL matches all schemes. | 278 // SCHEME_ALL matches all schemes. |
249 TEST(ExtensionURLPatternTest, Match12) { | 279 TEST(ExtensionURLPatternTest, Match12) { |
250 URLPattern pattern(URLPattern::SCHEME_ALL); | 280 URLPattern pattern(URLPattern::SCHEME_ALL); |
251 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 281 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
252 pattern.Parse("<all_urls>", URLPattern::PARSE_STRICT)); | 282 pattern.Parse("<all_urls>", URLPattern::ERROR_ON_PORTS)); |
253 EXPECT_TRUE(pattern.MatchesScheme("chrome")); | 283 EXPECT_TRUE(pattern.MatchesScheme("chrome")); |
254 EXPECT_TRUE(pattern.MatchesScheme("http")); | 284 EXPECT_TRUE(pattern.MatchesScheme("http")); |
255 EXPECT_TRUE(pattern.MatchesScheme("https")); | 285 EXPECT_TRUE(pattern.MatchesScheme("https")); |
256 EXPECT_TRUE(pattern.MatchesScheme("file")); | 286 EXPECT_TRUE(pattern.MatchesScheme("file")); |
257 EXPECT_TRUE(pattern.MatchesScheme("javascript")); | 287 EXPECT_TRUE(pattern.MatchesScheme("javascript")); |
258 EXPECT_TRUE(pattern.MatchesScheme("data")); | 288 EXPECT_TRUE(pattern.MatchesScheme("data")); |
259 EXPECT_TRUE(pattern.MatchesScheme("about")); | 289 EXPECT_TRUE(pattern.MatchesScheme("about")); |
260 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); | 290 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); |
261 EXPECT_TRUE(pattern.match_subdomains()); | 291 EXPECT_TRUE(pattern.match_subdomains()); |
262 EXPECT_TRUE(pattern.match_all_urls()); | 292 EXPECT_TRUE(pattern.match_all_urls()); |
(...skipping 20 matching lines...) Expand all Loading... | |
283 {"data:*", "data:monkey"}, | 313 {"data:*", "data:monkey"}, |
284 {"javascript:*", "javascript:atemyhomework"}, | 314 {"javascript:*", "javascript:atemyhomework"}, |
285 }; | 315 }; |
286 | 316 |
287 // SCHEME_ALL and specific schemes. | 317 // SCHEME_ALL and specific schemes. |
288 TEST(ExtensionURLPatternTest, Match13) { | 318 TEST(ExtensionURLPatternTest, Match13) { |
289 for (size_t i = 0; i < arraysize(kMatch13UrlPatternTestCases); ++i) { | 319 for (size_t i = 0; i < arraysize(kMatch13UrlPatternTestCases); ++i) { |
290 URLPattern pattern(URLPattern::SCHEME_ALL); | 320 URLPattern pattern(URLPattern::SCHEME_ALL); |
291 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 321 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
292 pattern.Parse(kMatch13UrlPatternTestCases[i].pattern, | 322 pattern.Parse(kMatch13UrlPatternTestCases[i].pattern, |
293 URLPattern::PARSE_STRICT)) | 323 URLPattern::ERROR_ON_PORTS)) |
294 << " while parsing " << kMatch13UrlPatternTestCases[i].pattern; | 324 << " while parsing " << kMatch13UrlPatternTestCases[i].pattern; |
295 EXPECT_TRUE(pattern.MatchesURL( | 325 EXPECT_TRUE(pattern.MatchesURL( |
296 GURL(kMatch13UrlPatternTestCases[i].matches))) | 326 GURL(kMatch13UrlPatternTestCases[i].matches))) |
297 << " while matching " << kMatch13UrlPatternTestCases[i].matches; | 327 << " while matching " << kMatch13UrlPatternTestCases[i].matches; |
298 } | 328 } |
299 | 329 |
300 // Negative test. | 330 // Negative test. |
301 URLPattern pattern(URLPattern::SCHEME_ALL); | 331 URLPattern pattern(URLPattern::SCHEME_ALL); |
302 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 332 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
303 pattern.Parse("data:*", URLPattern::PARSE_STRICT)); | 333 pattern.Parse("data:*", URLPattern::ERROR_ON_PORTS)); |
304 EXPECT_FALSE(pattern.MatchesURL(GURL("about:blank"))); | 334 EXPECT_FALSE(pattern.MatchesURL(GURL("about:blank"))); |
305 }; | 335 }; |
306 | 336 |
307 // file scheme with empty hostname | 337 // file scheme with empty hostname |
308 TEST(ExtensionURLPatternTest, Match14) { | 338 TEST(ExtensionURLPatternTest, Match14) { |
309 URLPattern pattern(kAllSchemes); | 339 URLPattern pattern(kAllSchemes); |
310 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 340 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
311 pattern.Parse("file:///foo*", URLPattern::PARSE_STRICT)); | 341 pattern.Parse("file:///foo*", URLPattern::ERROR_ON_PORTS)); |
312 EXPECT_EQ("file", pattern.scheme()); | 342 EXPECT_EQ("file", pattern.scheme()); |
313 EXPECT_EQ("", pattern.host()); | 343 EXPECT_EQ("", pattern.host()); |
314 EXPECT_FALSE(pattern.match_subdomains()); | 344 EXPECT_FALSE(pattern.match_subdomains()); |
315 EXPECT_FALSE(pattern.match_all_urls()); | 345 EXPECT_FALSE(pattern.match_all_urls()); |
316 EXPECT_EQ("/foo*", pattern.path()); | 346 EXPECT_EQ("/foo*", pattern.path()); |
317 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); | 347 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); |
318 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); | 348 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); |
319 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); | 349 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); |
320 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); | 350 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); |
321 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); | 351 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); |
322 } | 352 } |
323 | 353 |
324 // file scheme without hostname part | 354 // file scheme without hostname part |
325 TEST(ExtensionURLPatternTest, Match15) { | 355 TEST(ExtensionURLPatternTest, Match15) { |
326 URLPattern pattern(kAllSchemes); | 356 URLPattern pattern(kAllSchemes); |
327 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 357 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
328 pattern.Parse("file://foo*", URLPattern::PARSE_STRICT)); | 358 pattern.Parse("file://foo*", URLPattern::ERROR_ON_PORTS)); |
329 EXPECT_EQ("file", pattern.scheme()); | 359 EXPECT_EQ("file", pattern.scheme()); |
330 EXPECT_EQ("", pattern.host()); | 360 EXPECT_EQ("", pattern.host()); |
331 EXPECT_FALSE(pattern.match_subdomains()); | 361 EXPECT_FALSE(pattern.match_subdomains()); |
332 EXPECT_FALSE(pattern.match_all_urls()); | 362 EXPECT_FALSE(pattern.match_all_urls()); |
333 EXPECT_EQ("/foo*", pattern.path()); | 363 EXPECT_EQ("/foo*", pattern.path()); |
334 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); | 364 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); |
335 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); | 365 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); |
336 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); | 366 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); |
337 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); | 367 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); |
338 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); | 368 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); |
339 } | 369 } |
340 | 370 |
341 // file scheme with hostname | 371 // file scheme with hostname |
342 TEST(ExtensionURLPatternTest, Match16) { | 372 TEST(ExtensionURLPatternTest, Match16) { |
343 URLPattern pattern(kAllSchemes); | 373 URLPattern pattern(kAllSchemes); |
344 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 374 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
345 pattern.Parse("file://localhost/foo*", URLPattern::PARSE_STRICT)); | 375 pattern.Parse("file://localhost/foo*", URLPattern::ERROR_ON_PORTS)); |
346 EXPECT_EQ("file", pattern.scheme()); | 376 EXPECT_EQ("file", pattern.scheme()); |
347 // Since hostname is ignored for file://. | 377 // Since hostname is ignored for file://. |
348 EXPECT_EQ("", pattern.host()); | 378 EXPECT_EQ("", pattern.host()); |
349 EXPECT_FALSE(pattern.match_subdomains()); | 379 EXPECT_FALSE(pattern.match_subdomains()); |
350 EXPECT_FALSE(pattern.match_all_urls()); | 380 EXPECT_FALSE(pattern.match_all_urls()); |
351 EXPECT_EQ("/foo*", pattern.path()); | 381 EXPECT_EQ("/foo*", pattern.path()); |
352 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); | 382 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); |
353 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); | 383 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); |
354 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); | 384 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); |
355 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); | 385 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); |
356 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); | 386 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); |
357 } | 387 } |
358 | 388 |
359 static const struct GetAsStringPatterns { | 389 static const struct GetAsStringPatterns { |
360 const char* pattern; | 390 const char* pattern; |
361 } kGetAsStringTestCases[] = { | 391 } kGetAsStringTestCases[] = { |
362 { "http://www/" }, | 392 { "http://www/" }, |
363 { "http://*/*" }, | 393 { "http://*/*" }, |
364 { "chrome://*/*" }, | 394 { "chrome://*/*" }, |
365 { "chrome://newtab/" }, | 395 { "chrome://newtab/" }, |
366 { "about:*" }, | 396 { "about:*" }, |
367 { "about:blank" }, | 397 { "about:blank" }, |
368 { "chrome-extension://*/*" }, | 398 { "chrome-extension://*/*" }, |
369 { "chrome-extension://FTW/" }, | 399 { "chrome-extension://FTW/" }, |
370 { "data:*" }, | 400 { "data:*" }, |
371 { "data:monkey" }, | 401 { "data:monkey" }, |
372 { "javascript:*" }, | 402 { "javascript:*" }, |
373 { "javascript:atemyhomework" }, | 403 { "javascript:atemyhomework" }, |
404 { "http://www.example.com:/foo" }, | |
405 { "http://www.example.com:8080/foo" }, | |
374 }; | 406 }; |
375 | 407 |
376 TEST(ExtensionURLPatternTest, GetAsString) { | 408 TEST(ExtensionURLPatternTest, GetAsString) { |
377 for (size_t i = 0; i < arraysize(kGetAsStringTestCases); ++i) { | 409 for (size_t i = 0; i < arraysize(kGetAsStringTestCases); ++i) { |
378 URLPattern pattern(URLPattern::SCHEME_ALL); | 410 URLPattern pattern(URLPattern::SCHEME_ALL); |
379 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 411 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
380 pattern.Parse(kGetAsStringTestCases[i].pattern, | 412 pattern.Parse(kGetAsStringTestCases[i].pattern, |
381 URLPattern::PARSE_STRICT)); | 413 URLPattern::USE_PORTS)); |
382 EXPECT_STREQ(kGetAsStringTestCases[i].pattern, | 414 EXPECT_EQ(kGetAsStringTestCases[i].pattern, |
383 pattern.GetAsString().c_str()); | 415 pattern.GetAsString()); |
384 } | 416 } |
385 } | 417 } |
386 | 418 |
387 void TestPatternOverlap(const URLPattern& pattern1, const URLPattern& pattern2, | 419 void TestPatternOverlap(const URLPattern& pattern1, const URLPattern& pattern2, |
388 bool expect_overlap) { | 420 bool expect_overlap) { |
389 EXPECT_EQ(expect_overlap, pattern1.OverlapsWith(pattern2)) | 421 EXPECT_EQ(expect_overlap, pattern1.OverlapsWith(pattern2)) |
390 << pattern1.GetAsString() << ", " << pattern2.GetAsString(); | 422 << pattern1.GetAsString() << ", " << pattern2.GetAsString(); |
391 EXPECT_EQ(expect_overlap, pattern2.OverlapsWith(pattern1)) | 423 EXPECT_EQ(expect_overlap, pattern2.OverlapsWith(pattern1)) |
392 << pattern2.GetAsString() << ", " << pattern1.GetAsString(); | 424 << pattern2.GetAsString() << ", " << pattern1.GetAsString(); |
393 } | 425 } |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
460 EXPECT_EQ("https://*/*", all_urls[1].GetAsString()); | 492 EXPECT_EQ("https://*/*", all_urls[1].GetAsString()); |
461 EXPECT_EQ("file:///*", all_urls[2].GetAsString()); | 493 EXPECT_EQ("file:///*", all_urls[2].GetAsString()); |
462 EXPECT_EQ("ftp://*/*", all_urls[3].GetAsString()); | 494 EXPECT_EQ("ftp://*/*", all_urls[3].GetAsString()); |
463 EXPECT_EQ("chrome://*/*", all_urls[4].GetAsString()); | 495 EXPECT_EQ("chrome://*/*", all_urls[4].GetAsString()); |
464 | 496 |
465 EXPECT_EQ("http://google.com/foo", all_schemes[0].GetAsString()); | 497 EXPECT_EQ("http://google.com/foo", all_schemes[0].GetAsString()); |
466 EXPECT_EQ("https://google.com/foo", all_schemes[1].GetAsString()); | 498 EXPECT_EQ("https://google.com/foo", all_schemes[1].GetAsString()); |
467 | 499 |
468 EXPECT_EQ("http://google.com/monkey", monkey[0].GetAsString()); | 500 EXPECT_EQ("http://google.com/monkey", monkey[0].GetAsString()); |
469 } | 501 } |
502 | |
503 TEST(ExtensionURLPatternTest, IgnorePorts) { | |
504 URLPattern pattern1(kAllSchemes); | |
505 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | |
506 pattern1.Parse("http://www.example.com:8080/foo", | |
507 URLPattern::IGNORE_PORTS)); | |
508 | |
509 EXPECT_EQ("http://www.example.com/foo", pattern1.GetAsString()); | |
510 EXPECT_TRUE(pattern1.MatchesURL(GURL("http://www.example.com:1234/foo"))); | |
511 | |
512 URLPattern pattern2(kAllSchemes); | |
513 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | |
514 pattern2.Parse("http://www.example.com:8080/foo", | |
515 URLPattern::USE_PORTS)); | |
516 | |
517 EXPECT_EQ("http://www.example.com:8080/foo", pattern2.GetAsString()); | |
518 EXPECT_FALSE(pattern2.MatchesURL(GURL("http://www.example.com:1234/foo"))); | |
Sam Kerner (Chrome)
2011/06/28 18:12:39
Consider testing a pattern with a * as the port.
| |
519 } | |
OLD | NEW |