Chromium Code Reviews| Index: chrome/common/extensions/url_pattern_unittest.cc |
| diff --git a/chrome/common/extensions/url_pattern_unittest.cc b/chrome/common/extensions/url_pattern_unittest.cc |
| index cda955097de05b9dd5a1c5877f90f7b81f0500b5..46f84f14559f0e3692e11d83846cfdaea1acc383 100644 |
| --- a/chrome/common/extensions/url_pattern_unittest.cc |
| +++ b/chrome/common/extensions/url_pattern_unittest.cc |
| @@ -38,44 +38,74 @@ TEST(ExtensionURLPatternTest, ParseInvalid) { |
| URLPattern pattern(URLPattern::SCHEME_ALL); |
| EXPECT_EQ(kInvalidPatterns[i].expected_result, |
| pattern.Parse(kInvalidPatterns[i].pattern, |
| - URLPattern::PARSE_LENIENT)) |
| + URLPattern::IGNORE_PORTS)) |
| << kInvalidPatterns[i].pattern; |
| } |
| }; |
| -TEST(ExtensionURLPatternTest, Colons) { |
| +TEST(ExtensionURLPatternTest, Ports) { |
| const struct { |
| const char* pattern; |
| - URLPattern::ParseResult expected_result; |
| + URLPattern::ParseResult expected_result_error_on_ports; |
| + URLPattern::ParseResult expected_result_use_ports; |
| + const char* expected_port; |
| } kTestPatterns[] = { |
| - { "http://foo:1234/", URLPattern::PARSE_ERROR_HAS_COLON }, |
| - { "http://foo:1234/bar", URLPattern::PARSE_ERROR_HAS_COLON }, |
| - { "http://*.foo:1234/", URLPattern::PARSE_ERROR_HAS_COLON }, |
| - { "http://*.foo:1234/bar", URLPattern::PARSE_ERROR_HAS_COLON }, |
| - { "http://:1234/", URLPattern::PARSE_ERROR_HAS_COLON }, |
| - { "http://foo:/", URLPattern::PARSE_ERROR_HAS_COLON }, |
| - { "http://*.foo:/", URLPattern::PARSE_ERROR_HAS_COLON }, |
| - { "http://foo:com/", URLPattern::PARSE_ERROR_HAS_COLON }, |
| + { "http://foo:1234/", URLPattern::PARSE_ERROR_HAS_COLON, |
| + URLPattern::PARSE_SUCCESS, "1234" }, |
| + { "http://foo:1234/bar", URLPattern::PARSE_ERROR_HAS_COLON, |
| + URLPattern::PARSE_SUCCESS, "1234" }, |
| + { "http://*.foo:1234/", URLPattern::PARSE_ERROR_HAS_COLON, |
| + URLPattern::PARSE_SUCCESS, "1234" }, |
| + { "http://*.foo:1234/bar", URLPattern::PARSE_ERROR_HAS_COLON, |
| + URLPattern::PARSE_SUCCESS, "1234" }, |
| + { "http://:1234/", URLPattern::PARSE_ERROR_HAS_COLON, |
| + URLPattern::PARSE_SUCCESS, "1234" }, |
| + { "http://foo:/", URLPattern::PARSE_ERROR_HAS_COLON, |
| + URLPattern::PARSE_SUCCESS, "" }, |
| + { "http://foo:*/", URLPattern::PARSE_ERROR_HAS_COLON, |
| + URLPattern::PARSE_SUCCESS, "*" }, |
| + { "http://*.foo:/", URLPattern::PARSE_ERROR_HAS_COLON, |
| + URLPattern::PARSE_SUCCESS, "" }, |
| + { "http://foo:com/", URLPattern::PARSE_ERROR_HAS_COLON, |
| + URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, |
| + { "http://foo:123456/", URLPattern::PARSE_ERROR_HAS_COLON, |
| + 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://*/:1234", URLPattern::PARSE_SUCCESS, |
| + URLPattern::PARSE_SUCCESS, "*" }, |
| + { "http://*.foo/bar:1234", URLPattern::PARSE_SUCCESS, |
| + URLPattern::PARSE_SUCCESS, "*" }, |
| + { "http://foo/bar:1234/path", URLPattern::PARSE_SUCCESS, |
| + URLPattern::PARSE_SUCCESS, "*" }, |
| }; |
| for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestPatterns); ++i) { |
| - URLPattern pattern(URLPattern::SCHEME_ALL); |
| + URLPattern use_ports_pattern(URLPattern::SCHEME_ALL); |
| + // Check results with |USE_PORTS|. |
| + EXPECT_EQ(kTestPatterns[i].expected_result_use_ports, |
| + use_ports_pattern.Parse(kTestPatterns[i].pattern, |
| + URLPattern::USE_PORTS)) |
| + << "Got unexpected result for URL pattern: " |
| + << kTestPatterns[i].pattern; |
| + EXPECT_EQ(kTestPatterns[i].expected_port, use_ports_pattern.port()) |
| + << "Got unexpected port for URL pattern: " << kTestPatterns[i].pattern; |
| - // Without |strict_error_checks|, expect success. |
| + URLPattern ignore_ports_pattern(URLPattern::SCHEME_ALL); |
| + // Check results with |IGNORE_PORTS|. |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse(kTestPatterns[i].pattern, |
| - URLPattern::PARSE_LENIENT)) |
| - << "Got unexpected error for URL pattern: " |
| + ignore_ports_pattern.Parse(kTestPatterns[i].pattern, |
| + URLPattern::IGNORE_PORTS)) |
| + << "Got unexpected result for URL pattern: " |
| << kTestPatterns[i].pattern; |
| - |
| - EXPECT_EQ(kTestPatterns[i].expected_result, |
| - pattern.Parse(kTestPatterns[i].pattern, |
| - URLPattern::PARSE_STRICT)) |
| + EXPECT_EQ("*", ignore_ports_pattern.port()) |
| + << "Got unexpected port for URL pattern: " << kTestPatterns[i].pattern; |
| + |
| + URLPattern error_on_ports_pattern(URLPattern::SCHEME_ALL); |
| + // Check results with |ERROR_ON_PORTS|. |
| + EXPECT_EQ(kTestPatterns[i].expected_result_error_on_ports, |
| + error_on_ports_pattern.Parse(kTestPatterns[i].pattern, |
| + URLPattern::ERROR_ON_PORTS)) |
| << "Got unexpected result for URL pattern: " |
| << kTestPatterns[i].pattern; |
| } |
| @@ -85,7 +115,7 @@ TEST(ExtensionURLPatternTest, Colons) { |
| TEST(ExtensionURLPatternTest, Match1) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("http://*/*", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("http://*/*", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| @@ -102,7 +132,7 @@ TEST(ExtensionURLPatternTest, Match1) { |
| TEST(ExtensionURLPatternTest, Match2) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("https://*/foo*", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("https://*/foo*", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("https", pattern.scheme()); |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| @@ -119,7 +149,7 @@ TEST(URLPatternTest, Match3) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| pattern.Parse("http://*.google.com/foo*bar", |
| - URLPattern::PARSE_STRICT)); |
| + URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("google.com", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| @@ -136,7 +166,7 @@ TEST(URLPatternTest, Match3) { |
| TEST(ExtensionURLPatternTest, Match5) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("file:///foo?bar\\*baz", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("file:///foo?bar\\*baz", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("file", pattern.scheme()); |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| @@ -150,7 +180,7 @@ TEST(ExtensionURLPatternTest, Match5) { |
| TEST(ExtensionURLPatternTest, Match6) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("http://127.0.0.1/*", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("http://127.0.0.1/*", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("127.0.0.1", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| @@ -164,7 +194,7 @@ TEST(ExtensionURLPatternTest, Match7) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| pattern.Parse("http://*.0.0.1/*", |
| - URLPattern::PARSE_STRICT)); // allowed, but useless |
| + URLPattern::ERROR_ON_PORTS)); // allowed, but useless |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("0.0.1", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| @@ -181,7 +211,7 @@ TEST(ExtensionURLPatternTest, Match8) { |
| // http://*.\xe1\x80\xbf/a\xc2\x81\xe1* |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| pattern.Parse("http://*.xn--gkd/a%C2%81%E1*", |
| - URLPattern::PARSE_STRICT)); |
| + URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("http", pattern.scheme()); |
| EXPECT_EQ("xn--gkd", pattern.host()); |
| EXPECT_TRUE(pattern.match_subdomains()); |
| @@ -197,7 +227,7 @@ TEST(ExtensionURLPatternTest, Match8) { |
| TEST(ExtensionURLPatternTest, Match9) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("chrome://favicon/*", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("chrome://favicon/*", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("chrome", pattern.scheme()); |
| EXPECT_EQ("favicon", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| @@ -212,7 +242,7 @@ TEST(ExtensionURLPatternTest, Match9) { |
| TEST(ExtensionURLPatternTest, Match10) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("*://*/*", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("*://*/*", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_TRUE(pattern.MatchesScheme("http")); |
| EXPECT_TRUE(pattern.MatchesScheme("https")); |
| EXPECT_FALSE(pattern.MatchesScheme("chrome")); |
| @@ -231,7 +261,7 @@ TEST(ExtensionURLPatternTest, Match10) { |
| TEST(ExtensionURLPatternTest, Match11) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("<all_urls>", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("<all_urls>", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_TRUE(pattern.MatchesScheme("chrome")); |
| EXPECT_TRUE(pattern.MatchesScheme("http")); |
| EXPECT_TRUE(pattern.MatchesScheme("https")); |
| @@ -249,7 +279,7 @@ TEST(ExtensionURLPatternTest, Match11) { |
| TEST(ExtensionURLPatternTest, Match12) { |
| URLPattern pattern(URLPattern::SCHEME_ALL); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("<all_urls>", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("<all_urls>", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_TRUE(pattern.MatchesScheme("chrome")); |
| EXPECT_TRUE(pattern.MatchesScheme("http")); |
| EXPECT_TRUE(pattern.MatchesScheme("https")); |
| @@ -290,7 +320,7 @@ TEST(ExtensionURLPatternTest, Match13) { |
| URLPattern pattern(URLPattern::SCHEME_ALL); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| pattern.Parse(kMatch13UrlPatternTestCases[i].pattern, |
| - URLPattern::PARSE_STRICT)) |
| + URLPattern::ERROR_ON_PORTS)) |
| << " while parsing " << kMatch13UrlPatternTestCases[i].pattern; |
| EXPECT_TRUE(pattern.MatchesURL( |
| GURL(kMatch13UrlPatternTestCases[i].matches))) |
| @@ -300,7 +330,7 @@ TEST(ExtensionURLPatternTest, Match13) { |
| // Negative test. |
| URLPattern pattern(URLPattern::SCHEME_ALL); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("data:*", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("data:*", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_FALSE(pattern.MatchesURL(GURL("about:blank"))); |
| }; |
| @@ -308,7 +338,7 @@ TEST(ExtensionURLPatternTest, Match13) { |
| TEST(ExtensionURLPatternTest, Match14) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("file:///foo*", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("file:///foo*", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("file", pattern.scheme()); |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| @@ -325,7 +355,7 @@ TEST(ExtensionURLPatternTest, Match14) { |
| TEST(ExtensionURLPatternTest, Match15) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("file://foo*", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("file://foo*", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("file", pattern.scheme()); |
| EXPECT_EQ("", pattern.host()); |
| EXPECT_FALSE(pattern.match_subdomains()); |
| @@ -342,7 +372,7 @@ TEST(ExtensionURLPatternTest, Match15) { |
| TEST(ExtensionURLPatternTest, Match16) { |
| URLPattern pattern(kAllSchemes); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| - pattern.Parse("file://localhost/foo*", URLPattern::PARSE_STRICT)); |
| + pattern.Parse("file://localhost/foo*", URLPattern::ERROR_ON_PORTS)); |
| EXPECT_EQ("file", pattern.scheme()); |
| // Since hostname is ignored for file://. |
| EXPECT_EQ("", pattern.host()); |
| @@ -371,6 +401,8 @@ static const struct GetAsStringPatterns { |
| { "data:monkey" }, |
| { "javascript:*" }, |
| { "javascript:atemyhomework" }, |
| + { "http://www.example.com:/foo" }, |
| + { "http://www.example.com:8080/foo" }, |
| }; |
| TEST(ExtensionURLPatternTest, GetAsString) { |
| @@ -378,9 +410,9 @@ TEST(ExtensionURLPatternTest, GetAsString) { |
| URLPattern pattern(URLPattern::SCHEME_ALL); |
| EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| pattern.Parse(kGetAsStringTestCases[i].pattern, |
| - URLPattern::PARSE_STRICT)); |
| - EXPECT_STREQ(kGetAsStringTestCases[i].pattern, |
| - pattern.GetAsString().c_str()); |
| + URLPattern::USE_PORTS)); |
| + EXPECT_EQ(kGetAsStringTestCases[i].pattern, |
| + pattern.GetAsString()); |
| } |
| } |
| @@ -467,3 +499,21 @@ TEST(ExtensionURLPatternTest, ConvertToExplicitSchemes) { |
| EXPECT_EQ("http://google.com/monkey", monkey[0].GetAsString()); |
| } |
| + |
| +TEST(ExtensionURLPatternTest, IgnorePorts) { |
| + URLPattern pattern1(kAllSchemes); |
| + EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| + pattern1.Parse("http://www.example.com:8080/foo", |
| + URLPattern::IGNORE_PORTS)); |
| + |
| + EXPECT_EQ("http://www.example.com/foo", pattern1.GetAsString()); |
| + EXPECT_TRUE(pattern1.MatchesURL(GURL("http://www.example.com:1234/foo"))); |
| + |
| + URLPattern pattern2(kAllSchemes); |
| + EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| + pattern2.Parse("http://www.example.com:8080/foo", |
| + URLPattern::USE_PORTS)); |
| + |
| + EXPECT_EQ("http://www.example.com:8080/foo", pattern2.GetAsString()); |
| + 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.
|
| +} |