Chromium Code Reviews| Index: extensions/common/url_pattern_unittest.cc |
| diff --git a/extensions/common/url_pattern_unittest.cc b/extensions/common/url_pattern_unittest.cc |
| index 860d487e3ab946c86116c6b53513d83c5abf51c4..39e40a2868234346f6c63a330be33481e845244a 100644 |
| --- a/extensions/common/url_pattern_unittest.cc |
| +++ b/extensions/common/url_pattern_unittest.cc |
| @@ -30,19 +30,19 @@ TEST(ExtensionURLPatternTest, ParseInvalid) { |
| const char* pattern; |
| URLPattern::ParseResult expected_result; |
| } kInvalidPatterns[] = { |
| - { "http", URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR }, |
| - { "http:", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, |
| - { "http:/", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, |
| - { "about://", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, |
| - { "http://", URLPattern::PARSE_ERROR_EMPTY_HOST }, |
| - { "http:///", URLPattern::PARSE_ERROR_EMPTY_HOST }, |
| - { "http:// /", URLPattern::PARSE_ERROR_EMPTY_HOST }, |
| - { "http://*foo/bar", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, |
| - { "http://foo.*.bar/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, |
| - { "http://fo.*.ba:123/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, |
| - { "http:/bar", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, |
| - { "http://bar", URLPattern::PARSE_ERROR_EMPTY_PATH }, |
| - }; |
| + {"http", URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR}, |
| + {"http:", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR}, |
| + {"http:/", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR}, |
| + {"about://", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR}, |
| + {"http://", URLPattern::PARSE_ERROR_EMPTY_HOST}, |
| + {"http:///", URLPattern::PARSE_ERROR_EMPTY_HOST}, |
| + {"http:// /", URLPattern::PARSE_ERROR_EMPTY_HOST}, |
| + {"http://*foo/bar", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD}, |
| + {"http://foo.*.bar/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD}, |
| + {"http://fo.*.ba:123/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD}, |
| + {"http:/bar", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR}, |
| + {"http://bar", URLPattern::PARSE_ERROR_EMPTY_PATH}, |
| + {"http://foo.*/bar", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD}}; |
| for (size_t i = 0; i < arraysize(kInvalidPatterns); ++i) { |
| URLPattern pattern(URLPattern::SCHEME_ALL); |
| @@ -67,30 +67,30 @@ TEST(ExtensionURLPatternTest, Ports) { |
| URLPattern::ParseResult expected_result; |
| const char* expected_port; |
| } kTestPatterns[] = { |
| - { "http://foo:1234/", URLPattern::PARSE_SUCCESS, "1234" }, |
| - { "http://foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234" }, |
| - { "http://*.foo:1234/", URLPattern::PARSE_SUCCESS, "1234" }, |
| - { "http://*.foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234" }, |
| - { "http://:1234/", URLPattern::PARSE_SUCCESS, "1234" }, |
| - { "http://foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, |
| - { "http://foo:*/", URLPattern::PARSE_SUCCESS, "*" }, |
| - { "http://*.foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, |
| - { "http://foo:com/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, |
| - { "http://foo:123456/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, |
| - { "http://foo:80:80/monkey", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, |
| - { "file://foo:1234/bar", URLPattern::PARSE_SUCCESS, "*" }, |
| - { "chrome://foo:1234/bar", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, |
| - |
| - // Port-like strings in the path should not trigger a warning. |
| - { "http://*/:1234", URLPattern::PARSE_SUCCESS, "*" }, |
| - { "http://*.foo/bar:1234", URLPattern::PARSE_SUCCESS, "*" }, |
| - { "http://foo/bar:1234/path", URLPattern::PARSE_SUCCESS, "*" }, |
| - }; |
| + {"http://foo:1234/", URLPattern::PARSE_SUCCESS, "1234"}, |
| + {"http://foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234"}, |
| + {"http://*.foo:1234/", URLPattern::PARSE_SUCCESS, "1234"}, |
| + {"http://*.foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234"}, |
| + {"http://:1234/", URLPattern::PARSE_SUCCESS, "1234"}, |
| + {"http://foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| + {"http://foo:*/", URLPattern::PARSE_SUCCESS, "*"}, |
| + {"http://*.foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| + {"http://foo:com/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| + {"http://foo:123456/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| + {"http://foo:80:80/monkey", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| + {"file://foo:1234/bar", URLPattern::PARSE_SUCCESS, "*"}, |
| + {"chrome://foo:1234/bar", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| + |
| + // Port-like strings in the path should not trigger a warning. |
| + {"http://*/:1234", URLPattern::PARSE_SUCCESS, "*"}, |
| + {"http://*.foo/bar:1234", URLPattern::PARSE_SUCCESS, "*"}, |
| + {"http://foo/bar:1234/path", URLPattern::PARSE_SUCCESS, "*"}, |
| + {"http://*.foo.*/:1234", URLPattern::PARSE_SUCCESS, "*"}}; |
| for (size_t i = 0; i < arraysize(kTestPatterns); ++i) { |
| URLPattern pattern(URLPattern::SCHEME_ALL); |
| EXPECT_EQ(kTestPatterns[i].expected_result, |
| - pattern.Parse(kTestPatterns[i].pattern)) |
| + pattern.Parse(kTestPatterns[i].pattern, true)) |
| << "Got unexpected result for URL pattern: " |
| << kTestPatterns[i].pattern; |
| EXPECT_EQ(kTestPatterns[i].expected_port, pattern.port()) |
| @@ -105,6 +105,7 @@ TEST(ExtensionURLPatternTest, Match1) { |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/*", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com"))); |
| @@ -121,6 +122,7 @@ TEST(ExtensionURLPatternTest, Match2) { |
| EXPECT_EQ("https", pattern.scheme()); |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/foo*", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foo"))); |
| @@ -139,6 +141,7 @@ TEST(URLPatternTest, Match3) { |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("google.com", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/foo*bar", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar"))); |
| @@ -159,6 +162,7 @@ TEST(ExtensionURLPatternTest, Match5) { |
| EXPECT_EQ("file", pattern.scheme()); |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/foo?bar\\*baz", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo?bar\\hellobaz"))); |
| @@ -172,6 +176,7 @@ TEST(ExtensionURLPatternTest, Match6) { |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("127.0.0.1", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/*", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
| @@ -185,6 +190,7 @@ TEST(ExtensionURLPatternTest, Match7) { |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("0.0.1", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/*", pattern.path()); |
| // Subdomain matching is never done if the argument has an IP address host. |
| @@ -201,6 +207,7 @@ TEST(ExtensionURLPatternTest, Match8) { |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("xn--gkd", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/a%C2%81%E1*", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL( |
| @@ -216,6 +223,7 @@ TEST(ExtensionURLPatternTest, Match9) { |
| EXPECT_EQ("chrome", pattern.scheme()); |
| EXPECT_EQ("favicon", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/*", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
| @@ -233,6 +241,7 @@ TEST(ExtensionURLPatternTest, Match10) { |
| EXPECT_FALSE(pattern.MatchesScheme("file")); |
| EXPECT_FALSE(pattern.MatchesScheme("ftp")); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/*", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
| @@ -252,6 +261,7 @@ TEST(ExtensionURLPatternTest, Match11) { |
| EXPECT_TRUE(pattern.MatchesScheme("filesystem")); |
| EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_TRUE(pattern.match_all_urls()); |
| EXPECT_EQ("/*", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
| @@ -287,6 +297,7 @@ TEST(ExtensionURLPatternTest, Match12) { |
| EXPECT_TRUE(pattern.MatchesScheme("about")); |
| EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_TRUE(pattern.match_all_urls()); |
| EXPECT_EQ("/*", pattern.path()); |
| EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
| @@ -338,6 +349,7 @@ TEST(ExtensionURLPatternTest, Match14) { |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_EQ("/foo*", pattern.path()); |
| EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); |
| EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); |
| @@ -354,6 +366,7 @@ TEST(ExtensionURLPatternTest, Match15) { |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_EQ("/foo*", pattern.path()); |
| EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); |
| EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); |
| @@ -370,6 +383,7 @@ TEST(ExtensionURLPatternTest, Match16) { |
| // Since hostname is ignored for file://. |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| + EXPECT_TRUE(pattern.match_effective_tld()); |
| EXPECT_FALSE(pattern.match_all_urls()); |
| EXPECT_EQ("/foo*", pattern.path()); |
| EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); |
| @@ -437,6 +451,39 @@ TEST(ExtensionURLPatternTest, Match19) { |
| GURL("filesystem:chrome-extension://ftw/t/file.txt"))); |
| } |
| +// effective TLD wildcard |
| +TEST(URLPatternTest, EffectiveTldWildcard) { |
| + URLPattern pattern(kAllSchemes); |
| + EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| + pattern.Parse("http://*.google.*/foo*bar", |
| + ALLOW_WILDCARD_FOR_EFFECTIVE_TLD)); |
| + EXPECT_EQ("http", pattern.scheme()); |
| + EXPECT_EQ("google", pattern.host()); |
| + EXPECT_TRUE(pattern.match_subdomains()); |
| + EXPECT_FALSE(pattern.match_effective_tld()); |
| + EXPECT_FALSE(pattern.match_all_urls()); |
| + EXPECT_EQ("/foo*bar", pattern.path()); |
| + EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar"))); |
| + EXPECT_TRUE(pattern.MatchesURL(GURL("http://www.google.com.br/foo?bar"))); |
| + EXPECT_TRUE( |
| + pattern.MatchesURL(GURL("http://monkey.images.google.co.uk/foooobar"))); |
| + EXPECT_FALSE(pattern.MatchesURL(GURL("http://yahoo.com/foobar"))); |
| + EXPECT_TRUE(pattern.MatchesURL(GURL("filesystem:http://google.com/foo/bar"))); |
| + EXPECT_FALSE(pattern.MatchesURL( |
| + GURL("filesystem:http://google.com/temporary/foobar"))); |
| + URLPattern pattern_sub(kAllSchemes); |
|
nrpeter
2017/03/22 23:47:39
Tests the bug rdcronin@ identified in url_pattern.
|
| + EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| + pattern_sub.Parse("https://maps.google.*/", |
| + ALLOW_WILDCARD_FOR_EFFECTIVE_TLD)); |
| + EXPECT_EQ("https", pattern_sub.scheme()); |
| + EXPECT_EQ("maps.google", pattern_sub.host()); |
| + EXPECT_FALSE(pattern_sub.match_subdomains()); |
| + EXPECT_FALSE(pattern_sub.match_all_urls()); |
| + EXPECT_EQ("/", pattern_sub.path()); |
| + EXPECT_TRUE(pattern_sub.MatchesURL(GURL("https://maps.google.co.uk/"))); |
| + EXPECT_FALSE(pattern_sub.MatchesURL(GURL("https://sub.maps.google.co.uk/"))); |
| +} |
| + |
| static const struct GetAsStringPatterns { |
| const char* pattern; |
| } kGetAsStringTestCases[] = { |