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

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

Issue 7229012: Use extension match pattern syntax in content settings extension API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 9 years, 5 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 | Annotate | Revision Log
OLDNEW
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698