| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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/scoped_ptr.h" | 5 #include "base/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 | 8 |
| 9 // See url_pattern.h for examples of valid and invalid patterns. | 9 // See url_pattern.h for examples of valid and invalid patterns. |
| 10 | 10 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 } | 26 } |
| 27 }; | 27 }; |
| 28 | 28 |
| 29 // all pages for a given scheme | 29 // all pages for a given scheme |
| 30 TEST(URLPatternTest, Match1) { | 30 TEST(URLPatternTest, Match1) { |
| 31 URLPattern pattern(URLPattern::SCHEMES_ALL); | 31 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 32 EXPECT_TRUE(pattern.Parse("http://*/*")); | 32 EXPECT_TRUE(pattern.Parse("http://*/*")); |
| 33 EXPECT_EQ("http", pattern.scheme()); | 33 EXPECT_EQ("http", pattern.scheme()); |
| 34 EXPECT_EQ("", pattern.host()); | 34 EXPECT_EQ("", pattern.host()); |
| 35 EXPECT_TRUE(pattern.match_subdomains()); | 35 EXPECT_TRUE(pattern.match_subdomains()); |
| 36 EXPECT_FALSE(pattern.match_all_urls()); |
| 36 EXPECT_EQ("/*", pattern.path()); | 37 EXPECT_EQ("/*", pattern.path()); |
| 37 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com"))); | 38 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com"))); |
| 38 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://yahoo.com"))); | 39 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://yahoo.com"))); |
| 39 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com/foo"))); | 40 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com/foo"))); |
| 40 EXPECT_FALSE(pattern.MatchesUrl(GURL("https://google.com"))); | 41 EXPECT_FALSE(pattern.MatchesUrl(GURL("https://google.com"))); |
| 41 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://74.125.127.100/search"))); | 42 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://74.125.127.100/search"))); |
| 42 } | 43 } |
| 43 | 44 |
| 44 // all domains | 45 // all domains |
| 45 TEST(URLPatternTest, Match2) { | 46 TEST(URLPatternTest, Match2) { |
| 46 URLPattern pattern(URLPattern::SCHEMES_ALL); | 47 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 47 EXPECT_TRUE(pattern.Parse("https://*/foo*")); | 48 EXPECT_TRUE(pattern.Parse("https://*/foo*")); |
| 48 EXPECT_EQ("https", pattern.scheme()); | 49 EXPECT_EQ("https", pattern.scheme()); |
| 49 EXPECT_EQ("", pattern.host()); | 50 EXPECT_EQ("", pattern.host()); |
| 50 EXPECT_TRUE(pattern.match_subdomains()); | 51 EXPECT_TRUE(pattern.match_subdomains()); |
| 52 EXPECT_FALSE(pattern.match_all_urls()); |
| 51 EXPECT_EQ("/foo*", pattern.path()); | 53 EXPECT_EQ("/foo*", pattern.path()); |
| 52 EXPECT_TRUE(pattern.MatchesUrl(GURL("https://www.google.com/foo"))); | 54 EXPECT_TRUE(pattern.MatchesUrl(GURL("https://www.google.com/foo"))); |
| 53 EXPECT_TRUE(pattern.MatchesUrl(GURL("https://www.google.com/foobar"))); | 55 EXPECT_TRUE(pattern.MatchesUrl(GURL("https://www.google.com/foobar"))); |
| 54 EXPECT_FALSE(pattern.MatchesUrl(GURL("http://www.google.com/foo"))); | 56 EXPECT_FALSE(pattern.MatchesUrl(GURL("http://www.google.com/foo"))); |
| 55 EXPECT_FALSE(pattern.MatchesUrl(GURL("https://www.google.com/"))); | 57 EXPECT_FALSE(pattern.MatchesUrl(GURL("https://www.google.com/"))); |
| 56 } | 58 } |
| 57 | 59 |
| 58 // subdomains | 60 // subdomains |
| 59 TEST(URLPatternTest, Match3) { | 61 TEST(URLPatternTest, Match3) { |
| 60 URLPattern pattern(URLPattern::SCHEMES_ALL); | 62 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 61 EXPECT_TRUE(pattern.Parse("http://*.google.com/foo*bar")); | 63 EXPECT_TRUE(pattern.Parse("http://*.google.com/foo*bar")); |
| 62 EXPECT_EQ("http", pattern.scheme()); | 64 EXPECT_EQ("http", pattern.scheme()); |
| 63 EXPECT_EQ("google.com", pattern.host()); | 65 EXPECT_EQ("google.com", pattern.host()); |
| 64 EXPECT_TRUE(pattern.match_subdomains()); | 66 EXPECT_TRUE(pattern.match_subdomains()); |
| 67 EXPECT_FALSE(pattern.match_all_urls()); |
| 65 EXPECT_EQ("/foo*bar", pattern.path()); | 68 EXPECT_EQ("/foo*bar", pattern.path()); |
| 66 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com/foobar"))); | 69 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://google.com/foobar"))); |
| 67 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://www.google.com/foo?bar"))); | 70 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://www.google.com/foo?bar"))); |
| 68 EXPECT_TRUE(pattern.MatchesUrl( | 71 EXPECT_TRUE(pattern.MatchesUrl( |
| 69 GURL("http://monkey.images.google.com/foooobar"))); | 72 GURL("http://monkey.images.google.com/foooobar"))); |
| 70 EXPECT_FALSE(pattern.MatchesUrl(GURL("http://yahoo.com/foobar"))); | 73 EXPECT_FALSE(pattern.MatchesUrl(GURL("http://yahoo.com/foobar"))); |
| 71 } | 74 } |
| 72 | 75 |
| 73 // glob escaping | 76 // glob escaping |
| 74 TEST(URLPatternTest, Match5) { | 77 TEST(URLPatternTest, Match5) { |
| 75 URLPattern pattern(URLPattern::SCHEMES_ALL); | 78 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 76 EXPECT_TRUE(pattern.Parse("file:///foo?bar\\*baz")); | 79 EXPECT_TRUE(pattern.Parse("file:///foo?bar\\*baz")); |
| 77 EXPECT_EQ("file", pattern.scheme()); | 80 EXPECT_EQ("file", pattern.scheme()); |
| 78 EXPECT_EQ("", pattern.host()); | 81 EXPECT_EQ("", pattern.host()); |
| 79 EXPECT_FALSE(pattern.match_subdomains()); | 82 EXPECT_FALSE(pattern.match_subdomains()); |
| 83 EXPECT_FALSE(pattern.match_all_urls()); |
| 80 EXPECT_EQ("/foo?bar\\*baz", pattern.path()); | 84 EXPECT_EQ("/foo?bar\\*baz", pattern.path()); |
| 81 EXPECT_TRUE(pattern.MatchesUrl(GURL("file:///foo?bar\\hellobaz"))); | 85 EXPECT_TRUE(pattern.MatchesUrl(GURL("file:///foo?bar\\hellobaz"))); |
| 82 EXPECT_FALSE(pattern.MatchesUrl(GURL("file:///fooXbar\\hellobaz"))); | 86 EXPECT_FALSE(pattern.MatchesUrl(GURL("file:///fooXbar\\hellobaz"))); |
| 83 } | 87 } |
| 84 | 88 |
| 85 // ip addresses | 89 // ip addresses |
| 86 TEST(URLPatternTest, Match6) { | 90 TEST(URLPatternTest, Match6) { |
| 87 URLPattern pattern(URLPattern::SCHEMES_ALL); | 91 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 88 EXPECT_TRUE(pattern.Parse("http://127.0.0.1/*")); | 92 EXPECT_TRUE(pattern.Parse("http://127.0.0.1/*")); |
| 89 EXPECT_EQ("http", pattern.scheme()); | 93 EXPECT_EQ("http", pattern.scheme()); |
| 90 EXPECT_EQ("127.0.0.1", pattern.host()); | 94 EXPECT_EQ("127.0.0.1", pattern.host()); |
| 91 EXPECT_FALSE(pattern.match_subdomains()); | 95 EXPECT_FALSE(pattern.match_subdomains()); |
| 96 EXPECT_FALSE(pattern.match_all_urls()); |
| 92 EXPECT_EQ("/*", pattern.path()); | 97 EXPECT_EQ("/*", pattern.path()); |
| 93 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); | 98 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); |
| 94 } | 99 } |
| 95 | 100 |
| 96 // subdomain matching with ip addresses | 101 // subdomain matching with ip addresses |
| 97 TEST(URLPatternTest, Match7) { | 102 TEST(URLPatternTest, Match7) { |
| 98 URLPattern pattern(URLPattern::SCHEMES_ALL); | 103 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 99 EXPECT_TRUE(pattern.Parse("http://*.0.0.1/*")); // allowed, but useless | 104 EXPECT_TRUE(pattern.Parse("http://*.0.0.1/*")); // allowed, but useless |
| 100 EXPECT_EQ("http", pattern.scheme()); | 105 EXPECT_EQ("http", pattern.scheme()); |
| 101 EXPECT_EQ("0.0.1", pattern.host()); | 106 EXPECT_EQ("0.0.1", pattern.host()); |
| 102 EXPECT_TRUE(pattern.match_subdomains()); | 107 EXPECT_TRUE(pattern.match_subdomains()); |
| 108 EXPECT_FALSE(pattern.match_all_urls()); |
| 103 EXPECT_EQ("/*", pattern.path()); | 109 EXPECT_EQ("/*", pattern.path()); |
| 104 // Subdomain matching is never done if the argument has an IP address host. | 110 // Subdomain matching is never done if the argument has an IP address host. |
| 105 EXPECT_FALSE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); | 111 EXPECT_FALSE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); |
| 106 }; | 112 }; |
| 107 | 113 |
| 108 // unicode | 114 // unicode |
| 109 TEST(URLPatternTest, Match8) { | 115 TEST(URLPatternTest, Match8) { |
| 110 URLPattern pattern(URLPattern::SCHEMES_ALL); | 116 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 111 // The below is the ASCII encoding of the following URL: | 117 // The below is the ASCII encoding of the following URL: |
| 112 // http://*.\xe1\x80\xbf/a\xc2\x81\xe1* | 118 // http://*.\xe1\x80\xbf/a\xc2\x81\xe1* |
| 113 EXPECT_TRUE(pattern.Parse("http://*.xn--gkd/a%C2%81%E1*")); | 119 EXPECT_TRUE(pattern.Parse("http://*.xn--gkd/a%C2%81%E1*")); |
| 114 EXPECT_EQ("http", pattern.scheme()); | 120 EXPECT_EQ("http", pattern.scheme()); |
| 115 EXPECT_EQ("xn--gkd", pattern.host()); | 121 EXPECT_EQ("xn--gkd", pattern.host()); |
| 116 EXPECT_TRUE(pattern.match_subdomains()); | 122 EXPECT_TRUE(pattern.match_subdomains()); |
| 123 EXPECT_FALSE(pattern.match_all_urls()); |
| 117 EXPECT_EQ("/a%C2%81%E1*", pattern.path()); | 124 EXPECT_EQ("/a%C2%81%E1*", pattern.path()); |
| 118 EXPECT_TRUE(pattern.MatchesUrl( | 125 EXPECT_TRUE(pattern.MatchesUrl( |
| 119 GURL("http://abc.\xe1\x80\xbf/a\xc2\x81\xe1xyz"))); | 126 GURL("http://abc.\xe1\x80\xbf/a\xc2\x81\xe1xyz"))); |
| 120 EXPECT_TRUE(pattern.MatchesUrl( | 127 EXPECT_TRUE(pattern.MatchesUrl( |
| 121 GURL("http://\xe1\x80\xbf/a\xc2\x81\xe1\xe1"))); | 128 GURL("http://\xe1\x80\xbf/a\xc2\x81\xe1\xe1"))); |
| 122 }; | 129 }; |
| 123 | 130 |
| 124 // chrome:// | 131 // chrome:// |
| 125 TEST(URLPatternTest, Match9) { | 132 TEST(URLPatternTest, Match9) { |
| 126 URLPattern pattern(URLPattern::SCHEMES_ALL); | 133 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 127 EXPECT_TRUE(pattern.Parse("chrome://favicon/*")); | 134 EXPECT_TRUE(pattern.Parse("chrome://favicon/*")); |
| 128 EXPECT_EQ("chrome", pattern.scheme()); | 135 EXPECT_EQ("chrome", pattern.scheme()); |
| 129 EXPECT_EQ("favicon", pattern.host()); | 136 EXPECT_EQ("favicon", pattern.host()); |
| 130 EXPECT_FALSE(pattern.match_subdomains()); | 137 EXPECT_FALSE(pattern.match_subdomains()); |
| 138 EXPECT_FALSE(pattern.match_all_urls()); |
| 131 EXPECT_EQ("/*", pattern.path()); | 139 EXPECT_EQ("/*", pattern.path()); |
| 132 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); | 140 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); |
| 133 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/https://google.com"))); | 141 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/https://google.com"))); |
| 134 EXPECT_FALSE(pattern.MatchesUrl(GURL("chrome://history"))); | 142 EXPECT_FALSE(pattern.MatchesUrl(GURL("chrome://history"))); |
| 135 }; | 143 }; |
| 136 | 144 |
| 137 // *:// | 145 // *:// |
| 138 TEST(URLPatternTest, Match10) { | 146 TEST(URLPatternTest, Match10) { |
| 139 URLPattern pattern(URLPattern::SCHEMES_ALL); | 147 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 140 EXPECT_TRUE(pattern.Parse("*://*/*")); | 148 EXPECT_TRUE(pattern.Parse("*://*/*")); |
| 141 EXPECT_TRUE(pattern.MatchesScheme("http")); | 149 EXPECT_TRUE(pattern.MatchesScheme("http")); |
| 142 EXPECT_TRUE(pattern.MatchesScheme("https")); | 150 EXPECT_TRUE(pattern.MatchesScheme("https")); |
| 143 EXPECT_FALSE(pattern.MatchesScheme("chrome")); | 151 EXPECT_FALSE(pattern.MatchesScheme("chrome")); |
| 144 EXPECT_FALSE(pattern.MatchesScheme("file")); | 152 EXPECT_FALSE(pattern.MatchesScheme("file")); |
| 145 EXPECT_FALSE(pattern.MatchesScheme("ftp")); | 153 EXPECT_FALSE(pattern.MatchesScheme("ftp")); |
| 146 EXPECT_TRUE(pattern.match_subdomains()); | 154 EXPECT_TRUE(pattern.match_subdomains()); |
| 155 EXPECT_FALSE(pattern.match_all_urls()); |
| 147 EXPECT_EQ("/*", pattern.path()); | 156 EXPECT_EQ("/*", pattern.path()); |
| 148 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); | 157 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); |
| 149 EXPECT_FALSE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); | 158 EXPECT_FALSE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); |
| 150 EXPECT_FALSE(pattern.MatchesUrl(GURL("file:///foo/bar"))); | 159 EXPECT_FALSE(pattern.MatchesUrl(GURL("file:///foo/bar"))); |
| 151 }; | 160 }; |
| 152 | 161 |
| 153 // <all_urls> | 162 // <all_urls> |
| 154 TEST(URLPatternTest, Match11) { | 163 TEST(URLPatternTest, Match11) { |
| 155 URLPattern pattern(URLPattern::SCHEMES_ALL); | 164 URLPattern pattern(URLPattern::SCHEMES_ALL); |
| 156 EXPECT_TRUE(pattern.Parse("<all_urls>")); | 165 EXPECT_TRUE(pattern.Parse("<all_urls>")); |
| 157 EXPECT_TRUE(pattern.MatchesScheme("chrome")); | 166 EXPECT_TRUE(pattern.MatchesScheme("chrome")); |
| 158 EXPECT_TRUE(pattern.MatchesScheme("http")); | 167 EXPECT_TRUE(pattern.MatchesScheme("http")); |
| 159 EXPECT_TRUE(pattern.MatchesScheme("https")); | 168 EXPECT_TRUE(pattern.MatchesScheme("https")); |
| 160 EXPECT_TRUE(pattern.MatchesScheme("file")); | 169 EXPECT_TRUE(pattern.MatchesScheme("file")); |
| 161 EXPECT_TRUE(pattern.match_subdomains()); | 170 EXPECT_TRUE(pattern.match_subdomains()); |
| 171 EXPECT_TRUE(pattern.match_all_urls()); |
| 162 EXPECT_EQ("/*", pattern.path()); | 172 EXPECT_EQ("/*", pattern.path()); |
| 163 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); | 173 EXPECT_TRUE(pattern.MatchesUrl(GURL("chrome://favicon/http://google.com"))); |
| 164 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); | 174 EXPECT_TRUE(pattern.MatchesUrl(GURL("http://127.0.0.1"))); |
| 165 EXPECT_TRUE(pattern.MatchesUrl(GURL("file:///foo/bar"))); | 175 EXPECT_TRUE(pattern.MatchesUrl(GURL("file:///foo/bar"))); |
| 166 }; | 176 }; |
| 167 | 177 |
| 168 void TestPatternOverlap(const URLPattern& pattern1, const URLPattern& pattern2, | 178 void TestPatternOverlap(const URLPattern& pattern1, const URLPattern& pattern2, |
| 169 bool expect_overlap) { | 179 bool expect_overlap) { |
| 170 EXPECT_EQ(expect_overlap, pattern1.OverlapsWith(pattern2)) | 180 EXPECT_EQ(expect_overlap, pattern1.OverlapsWith(pattern2)) |
| 171 << pattern1.GetAsString() << ", " << pattern2.GetAsString(); | 181 << pattern1.GetAsString() << ", " << pattern2.GetAsString(); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 196 | 206 |
| 197 // Test that scheme restrictions work. | 207 // Test that scheme restrictions work. |
| 198 TestPatternOverlap(pattern1, pattern8, true); | 208 TestPatternOverlap(pattern1, pattern8, true); |
| 199 TestPatternOverlap(pattern1, pattern9, false); | 209 TestPatternOverlap(pattern1, pattern9, false); |
| 200 TestPatternOverlap(pattern1, pattern10, true); | 210 TestPatternOverlap(pattern1, pattern10, true); |
| 201 | 211 |
| 202 // Test that '<all_urls>' includes file URLs, while scheme '*' does not. | 212 // Test that '<all_urls>' includes file URLs, while scheme '*' does not. |
| 203 TestPatternOverlap(pattern7, pattern8, false); | 213 TestPatternOverlap(pattern7, pattern8, false); |
| 204 TestPatternOverlap(pattern7, pattern10, true); | 214 TestPatternOverlap(pattern7, pattern10, true); |
| 205 } | 215 } |
| 216 |
| 217 TEST(URLPatternTest, ConvertToExplicitSchemes) { |
| 218 std::vector<URLPattern> all_urls(URLPattern( |
| 219 URLPattern::SCHEMES_ALL, |
| 220 "<all_urls>").ConvertToExplicitSchemes()); |
| 221 |
| 222 std::vector<URLPattern> all_schemes(URLPattern( |
| 223 URLPattern::SCHEMES_ALL, |
| 224 "*://google.com/foo").ConvertToExplicitSchemes()); |
| 225 |
| 226 std::vector<URLPattern> monkey(URLPattern( |
| 227 URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS | |
| 228 URLPattern::SCHEME_FTP, |
| 229 "http://google.com/monkey").ConvertToExplicitSchemes()); |
| 230 |
| 231 ASSERT_EQ(5u, all_urls.size()); |
| 232 ASSERT_EQ(2u, all_schemes.size()); |
| 233 ASSERT_EQ(1u, monkey.size()); |
| 234 |
| 235 EXPECT_EQ("http://*/*", all_urls[0].GetAsString()); |
| 236 EXPECT_EQ("https://*/*", all_urls[1].GetAsString()); |
| 237 EXPECT_EQ("file:///*", all_urls[2].GetAsString()); |
| 238 EXPECT_EQ("ftp://*/*", all_urls[3].GetAsString()); |
| 239 EXPECT_EQ("chrome://*/*", all_urls[4].GetAsString()); |
| 240 |
| 241 EXPECT_EQ("http://google.com/foo", all_schemes[0].GetAsString()); |
| 242 EXPECT_EQ("https://google.com/foo", all_schemes[1].GetAsString()); |
| 243 |
| 244 EXPECT_EQ("http://google.com/monkey", monkey[0].GetAsString()); |
| 245 } |
| OLD | NEW |