| OLD | NEW |
| 1 // TODO(sqs): add httpsv |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 3 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 4 // found in the LICENSE file. |
| 4 | 5 |
| 5 #include "base/scoped_ptr.h" | 6 #include "base/scoped_ptr.h" |
| 6 #include "chrome/common/extensions/url_pattern.h" | 7 #include "chrome/common/extensions/url_pattern.h" |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 8 #include "googleurl/src/gurl.h" | 9 #include "googleurl/src/gurl.h" |
| 9 | 10 |
| 10 // See url_pattern.h for examples of valid and invalid patterns. | 11 // See url_pattern.h for examples of valid and invalid patterns. |
| 11 | 12 |
| 12 static const int kAllSchemes = | 13 static const int kAllSchemes = |
| 13 URLPattern::SCHEME_HTTP | | 14 URLPattern::SCHEME_HTTP | |
| 14 URLPattern::SCHEME_HTTPS | | 15 URLPattern::SCHEME_HTTPS | |
| 16 URLPattern::SCHEME_HTTPSV | |
| 15 URLPattern::SCHEME_FILE | | 17 URLPattern::SCHEME_FILE | |
| 16 URLPattern::SCHEME_FTP | | 18 URLPattern::SCHEME_FTP | |
| 17 URLPattern::SCHEME_CHROMEUI; | 19 URLPattern::SCHEME_CHROMEUI; |
| 18 | 20 |
| 19 TEST(ExtensionURLPatternTest, ParseInvalid) { | 21 TEST(ExtensionURLPatternTest, ParseInvalid) { |
| 20 const struct { | 22 const struct { |
| 21 const char* pattern; | 23 const char* pattern; |
| 22 URLPattern::ParseResult expected_result; | 24 URLPattern::ParseResult expected_result; |
| 23 } kInvalidPatterns[] = { | 25 } kInvalidPatterns[] = { |
| 24 { "http", URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR }, | 26 { "http", URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR }, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 47 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*/*")); | 49 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*/*")); |
| 48 EXPECT_EQ("http", pattern.scheme()); | 50 EXPECT_EQ("http", pattern.scheme()); |
| 49 EXPECT_EQ("", pattern.host()); | 51 EXPECT_EQ("", pattern.host()); |
| 50 EXPECT_TRUE(pattern.match_subdomains()); | 52 EXPECT_TRUE(pattern.match_subdomains()); |
| 51 EXPECT_FALSE(pattern.match_all_urls()); | 53 EXPECT_FALSE(pattern.match_all_urls()); |
| 52 EXPECT_EQ("/*", pattern.path()); | 54 EXPECT_EQ("/*", pattern.path()); |
| 53 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com"))); | 55 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com"))); |
| 54 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://yahoo.com"))); | 56 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://yahoo.com"))); |
| 55 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com/foo"))); | 57 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com/foo"))); |
| 56 EXPECT_FALSE(pattern.MatchesUrl(GURL("https://google.com"))); | 58 EXPECT_FALSE(pattern.MatchesUrl(GURL("https://google.com"))); |
| 59 EXPECT_FALSE(pattern.MatchesUrl(GURL("httpsv://google.com"))); |
| 57 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://74.125.127.100/search"))); | 60 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://74.125.127.100/search"))); |
| 58 } | 61 } |
| 59 | 62 |
| 60 // all domains | 63 // all domains |
| 61 TEST(ExtensionURLPatternTest, Match2) { | 64 TEST(ExtensionURLPatternTest, Match2) { |
| 62 URLPattern pattern(kAllSchemes); | 65 URLPattern pattern(kAllSchemes); |
| 63 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("https://*/foo*")); | 66 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("https://*/foo*")); |
| 64 EXPECT_EQ("https", pattern.scheme()); | 67 EXPECT_EQ("https", pattern.scheme()); |
| 65 EXPECT_EQ("", pattern.host()); | 68 EXPECT_EQ("", pattern.host()); |
| 66 EXPECT_TRUE(pattern.match_subdomains()); | 69 EXPECT_TRUE(pattern.match_subdomains()); |
| 67 EXPECT_FALSE(pattern.match_all_urls()); | 70 EXPECT_FALSE(pattern.match_all_urls()); |
| 68 EXPECT_EQ("/foo*", pattern.path()); | 71 EXPECT_EQ("/foo*", pattern.path()); |
| 69 EXPECT_TRUE(pattern.MatchesUrl(GURL("https://www.google.com/foo"))); | 72 EXPECT_TRUE(pattern.MatchesUrl(GURL("https://www.google.com/foo"))); |
| 73 EXPECT_TRUE(pattern.MatchesUrl(GURL("httpsv://www.google.com/foo"))); |
| 70 EXPECT_TRUE(pattern.MatchesUrl(GURL("https://www.google.com/foobar"))); | 74 EXPECT_TRUE(pattern.MatchesUrl(GURL("https://www.google.com/foobar"))); |
| 71 EXPECT_FALSE(pattern.MatchesUrl(GURL("http://www.google.com/foo"))); | 75 EXPECT_FALSE(pattern.MatchesUrl(GURL("http://www.google.com/foo"))); |
| 72 EXPECT_FALSE(pattern.MatchesUrl(GURL("https://www.google.com/"))); | 76 EXPECT_FALSE(pattern.MatchesUrl(GURL("https://www.google.com/"))); |
| 77 EXPECT_FALSE(pattern.MatchesUrl(GURL("httpsv://www.google.com/"))); |
| 73 } | 78 } |
| 74 | 79 |
| 75 // subdomains | 80 // subdomains |
| 76 TEST(URLPatternTest, Match3) { | 81 TEST(URLPatternTest, Match3) { |
| 77 URLPattern pattern(kAllSchemes); | 82 URLPattern pattern(kAllSchemes); |
| 78 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 83 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| 79 pattern.Parse("http://*.google.com/foo*bar")); | 84 pattern.Parse("http://*.google.com/foo*bar")); |
| 80 EXPECT_EQ("http", pattern.scheme()); | 85 EXPECT_EQ("http", pattern.scheme()); |
| 81 EXPECT_EQ("google.com", pattern.host()); | 86 EXPECT_EQ("google.com", pattern.host()); |
| 82 EXPECT_TRUE(pattern.match_subdomains()); | 87 EXPECT_TRUE(pattern.match_subdomains()); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/https://google.com"))); | 167 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/https://google.com"))); |
| 163 EXPECT_FALSE(pattern.MatchesUrl(GURL("chrome://history"))); | 168 EXPECT_FALSE(pattern.MatchesUrl(GURL("chrome://history"))); |
| 164 }; | 169 }; |
| 165 | 170 |
| 166 // *:// | 171 // *:// |
| 167 TEST(ExtensionURLPatternTest, Match10) { | 172 TEST(ExtensionURLPatternTest, Match10) { |
| 168 URLPattern pattern(kAllSchemes); | 173 URLPattern pattern(kAllSchemes); |
| 169 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("*://*/*")); | 174 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("*://*/*")); |
| 170 EXPECT_TRUE(pattern.MatchesScheme("http")); | 175 EXPECT_TRUE(pattern.MatchesScheme("http")); |
| 171 EXPECT_TRUE(pattern.MatchesScheme("https")); | 176 EXPECT_TRUE(pattern.MatchesScheme("https")); |
| 177 EXPECT_TRUE(pattern.MatchesScheme("httpsv")); |
| 172 EXPECT_FALSE(pattern.MatchesScheme("chrome")); | 178 EXPECT_FALSE(pattern.MatchesScheme("chrome")); |
| 173 EXPECT_FALSE(pattern.MatchesScheme("file")); | 179 EXPECT_FALSE(pattern.MatchesScheme("file")); |
| 174 EXPECT_FALSE(pattern.MatchesScheme("ftp")); | 180 EXPECT_FALSE(pattern.MatchesScheme("ftp")); |
| 175 EXPECT_TRUE(pattern.match_subdomains()); | 181 EXPECT_TRUE(pattern.match_subdomains()); |
| 176 EXPECT_FALSE(pattern.match_all_urls()); | 182 EXPECT_FALSE(pattern.match_all_urls()); |
| 177 EXPECT_EQ("/*", pattern.path()); | 183 EXPECT_EQ("/*", pattern.path()); |
| 178 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); | 184 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); |
| 179 EXPECT_FALSE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); | 185 EXPECT_FALSE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); |
| 180 EXPECT_FALSE(pattern.MatchesUrl(GURL("file:///foo/bar"))); | 186 EXPECT_FALSE(pattern.MatchesUrl(GURL("file:///foo/bar"))); |
| 181 }; | 187 }; |
| 182 | 188 |
| 183 // <all_urls> | 189 // <all_urls> |
| 184 TEST(ExtensionURLPatternTest, Match11) { | 190 TEST(ExtensionURLPatternTest, Match11) { |
| 185 URLPattern pattern(kAllSchemes); | 191 URLPattern pattern(kAllSchemes); |
| 186 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("<all_urls>")); | 192 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("<all_urls>")); |
| 187 EXPECT_TRUE(pattern.MatchesScheme("chrome")); | 193 EXPECT_TRUE(pattern.MatchesScheme("chrome")); |
| 188 EXPECT_TRUE(pattern.MatchesScheme("http")); | 194 EXPECT_TRUE(pattern.MatchesScheme("http")); |
| 189 EXPECT_TRUE(pattern.MatchesScheme("https")); | 195 EXPECT_TRUE(pattern.MatchesScheme("https")); |
| 196 EXPECT_TRUE(pattern.MatchesScheme("httpsv")); |
| 190 EXPECT_TRUE(pattern.MatchesScheme("file")); | 197 EXPECT_TRUE(pattern.MatchesScheme("file")); |
| 191 EXPECT_TRUE(pattern.match_subdomains()); | 198 EXPECT_TRUE(pattern.match_subdomains()); |
| 192 EXPECT_TRUE(pattern.match_all_urls()); | 199 EXPECT_TRUE(pattern.match_all_urls()); |
| 193 EXPECT_EQ("/*", pattern.path()); | 200 EXPECT_EQ("/*", pattern.path()); |
| 194 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); | 201 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); |
| 195 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); | 202 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); |
| 196 EXPECT_TRUE(pattern.MatchesUrl(GURL("file:///foo/bar"))); | 203 EXPECT_TRUE(pattern.MatchesUrl(GURL("file:///foo/bar"))); |
| 197 }; | 204 }; |
| 198 | 205 |
| 199 // SCHEME_ALL matches all schemes. | 206 // SCHEME_ALL matches all schemes. |
| 200 TEST(ExtensionURLPatternTest, Match12) { | 207 TEST(ExtensionURLPatternTest, Match12) { |
| 201 URLPattern pattern(URLPattern::SCHEME_ALL); | 208 URLPattern pattern(URLPattern::SCHEME_ALL); |
| 202 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("<all_urls>")); | 209 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("<all_urls>")); |
| 203 EXPECT_TRUE(pattern.MatchesScheme("chrome")); | 210 EXPECT_TRUE(pattern.MatchesScheme("chrome")); |
| 204 EXPECT_TRUE(pattern.MatchesScheme("http")); | 211 EXPECT_TRUE(pattern.MatchesScheme("http")); |
| 205 EXPECT_TRUE(pattern.MatchesScheme("https")); | 212 EXPECT_TRUE(pattern.MatchesScheme("https")); |
| 213 EXPECT_TRUE(pattern.MatchesScheme("httpsv")); |
| 206 EXPECT_TRUE(pattern.MatchesScheme("file")); | 214 EXPECT_TRUE(pattern.MatchesScheme("file")); |
| 207 EXPECT_TRUE(pattern.MatchesScheme("javascript")); | 215 EXPECT_TRUE(pattern.MatchesScheme("javascript")); |
| 208 EXPECT_TRUE(pattern.MatchesScheme("data")); | 216 EXPECT_TRUE(pattern.MatchesScheme("data")); |
| 209 EXPECT_TRUE(pattern.MatchesScheme("about")); | 217 EXPECT_TRUE(pattern.MatchesScheme("about")); |
| 210 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); | 218 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); |
| 211 EXPECT_TRUE(pattern.match_subdomains()); | 219 EXPECT_TRUE(pattern.match_subdomains()); |
| 212 EXPECT_TRUE(pattern.match_all_urls()); | 220 EXPECT_TRUE(pattern.match_all_urls()); |
| 213 EXPECT_EQ("/*", pattern.path()); | 221 EXPECT_EQ("/*", pattern.path()); |
| 214 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); | 222 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); |
| 215 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); | 223 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); | 299 URLPattern pattern2(kAllSchemes, "https://www.google.com/foo/*"); |
| 292 URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); | 300 URLPattern pattern3(kAllSchemes, "http://*.google.com/foo/*"); |
| 293 URLPattern pattern4(kAllSchemes, "http://*.yahooo.com/foo/*"); | 301 URLPattern pattern4(kAllSchemes, "http://*.yahooo.com/foo/*"); |
| 294 URLPattern pattern5(kAllSchemes, "http://www.yahooo.com/bar/*"); | 302 URLPattern pattern5(kAllSchemes, "http://www.yahooo.com/bar/*"); |
| 295 URLPattern pattern6(kAllSchemes, | 303 URLPattern pattern6(kAllSchemes, |
| 296 "http://www.yahooo.com/bar/baz/*"); | 304 "http://www.yahooo.com/bar/baz/*"); |
| 297 URLPattern pattern7(kAllSchemes, "file:///*"); | 305 URLPattern pattern7(kAllSchemes, "file:///*"); |
| 298 URLPattern pattern8(kAllSchemes, "*://*/*"); | 306 URLPattern pattern8(kAllSchemes, "*://*/*"); |
| 299 URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); | 307 URLPattern pattern9(URLPattern::SCHEME_HTTPS, "*://*/*"); |
| 300 URLPattern pattern10(kAllSchemes, "<all_urls>"); | 308 URLPattern pattern10(kAllSchemes, "<all_urls>"); |
| 309 URLPattern pattern11(kAllSchemes, "httpsv://www.google.com/foo/*"); |
| 301 | 310 |
| 302 TestPatternOverlap(pattern1, pattern1, true); | 311 TestPatternOverlap(pattern1, pattern1, true); |
| 303 TestPatternOverlap(pattern1, pattern2, false); | 312 TestPatternOverlap(pattern1, pattern2, false); |
| 313 TestPatternOverlap(pattern1, pattern11, false); |
| 304 TestPatternOverlap(pattern1, pattern3, true); | 314 TestPatternOverlap(pattern1, pattern3, true); |
| 305 TestPatternOverlap(pattern1, pattern4, false); | 315 TestPatternOverlap(pattern1, pattern4, false); |
| 306 TestPatternOverlap(pattern3, pattern4, false); | 316 TestPatternOverlap(pattern3, pattern4, false); |
| 307 TestPatternOverlap(pattern4, pattern5, false); | 317 TestPatternOverlap(pattern4, pattern5, false); |
| 308 TestPatternOverlap(pattern5, pattern6, true); | 318 TestPatternOverlap(pattern5, pattern6, true); |
| 309 | 319 |
| 310 // Test that scheme restrictions work. | 320 // Test that scheme restrictions work. |
| 311 TestPatternOverlap(pattern1, pattern8, true); | 321 TestPatternOverlap(pattern1, pattern8, true); |
| 312 TestPatternOverlap(pattern1, pattern9, false); | 322 TestPatternOverlap(pattern1, pattern9, false); |
| 313 TestPatternOverlap(pattern1, pattern10, true); | 323 TestPatternOverlap(pattern1, pattern10, true); |
| 324 TestPatternOverlap(pattern2, pattern11, false); |
| 314 | 325 |
| 315 // Test that '<all_urls>' includes file URLs, while scheme '*' does not. | 326 // Test that '<all_urls>' includes file URLs, while scheme '*' does not. |
| 316 TestPatternOverlap(pattern7, pattern8, false); | 327 TestPatternOverlap(pattern7, pattern8, false); |
| 317 TestPatternOverlap(pattern7, pattern10, true); | 328 TestPatternOverlap(pattern7, pattern10, true); |
| 318 } | 329 } |
| 319 | 330 |
| 320 TEST(ExtensionURLPatternTest, ConvertToExplicitSchemes) { | 331 TEST(ExtensionURLPatternTest, ConvertToExplicitSchemes) { |
| 321 std::vector<URLPattern> all_urls(URLPattern( | 332 std::vector<URLPattern> all_urls(URLPattern( |
| 322 kAllSchemes, | 333 kAllSchemes, |
| 323 "<all_urls>").ConvertToExplicitSchemes()); | 334 "<all_urls>").ConvertToExplicitSchemes()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 339 EXPECT_EQ("https://*/*", all_urls[1].GetAsString()); | 350 EXPECT_EQ("https://*/*", all_urls[1].GetAsString()); |
| 340 EXPECT_EQ("file:///*", all_urls[2].GetAsString()); | 351 EXPECT_EQ("file:///*", all_urls[2].GetAsString()); |
| 341 EXPECT_EQ("ftp://*/*", all_urls[3].GetAsString()); | 352 EXPECT_EQ("ftp://*/*", all_urls[3].GetAsString()); |
| 342 EXPECT_EQ("chrome://*/*", all_urls[4].GetAsString()); | 353 EXPECT_EQ("chrome://*/*", all_urls[4].GetAsString()); |
| 343 | 354 |
| 344 EXPECT_EQ("http://google.com/foo", all_schemes[0].GetAsString()); | 355 EXPECT_EQ("http://google.com/foo", all_schemes[0].GetAsString()); |
| 345 EXPECT_EQ("https://google.com/foo", all_schemes[1].GetAsString()); | 356 EXPECT_EQ("https://google.com/foo", all_schemes[1].GetAsString()); |
| 346 | 357 |
| 347 EXPECT_EQ("http://google.com/monkey", monkey[0].GetAsString()); | 358 EXPECT_EQ("http://google.com/monkey", monkey[0].GetAsString()); |
| 348 } | 359 } |
| OLD | NEW |