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