Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "extensions/common/url_pattern.h" | 5 #include "extensions/common/url_pattern.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 23 URLPattern::SCHEME_FTP | | 23 URLPattern::SCHEME_FTP | |
| 24 URLPattern::SCHEME_CHROMEUI | | 24 URLPattern::SCHEME_CHROMEUI | |
| 25 URLPattern::SCHEME_EXTENSION | | 25 URLPattern::SCHEME_EXTENSION | |
| 26 URLPattern::SCHEME_FILESYSTEM; | 26 URLPattern::SCHEME_FILESYSTEM; |
| 27 | 27 |
| 28 TEST(ExtensionURLPatternTest, ParseInvalid) { | 28 TEST(ExtensionURLPatternTest, ParseInvalid) { |
| 29 const struct { | 29 const struct { |
| 30 const char* pattern; | 30 const char* pattern; |
| 31 URLPattern::ParseResult expected_result; | 31 URLPattern::ParseResult expected_result; |
| 32 } kInvalidPatterns[] = { | 32 } kInvalidPatterns[] = { |
| 33 { "http", URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR }, | 33 {"http", URLPattern::PARSE_ERROR_MISSING_SCHEME_SEPARATOR}, |
| 34 { "http:", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, | 34 {"http:", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR}, |
| 35 { "http:/", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, | 35 {"http:/", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR}, |
| 36 { "about://", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, | 36 {"about://", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR}, |
| 37 { "http://", URLPattern::PARSE_ERROR_EMPTY_HOST }, | 37 {"http://", URLPattern::PARSE_ERROR_EMPTY_HOST}, |
| 38 { "http:///", URLPattern::PARSE_ERROR_EMPTY_HOST }, | 38 {"http:///", URLPattern::PARSE_ERROR_EMPTY_HOST}, |
| 39 { "http:// /", URLPattern::PARSE_ERROR_EMPTY_HOST }, | 39 {"http:// /", URLPattern::PARSE_ERROR_EMPTY_HOST}, |
| 40 { "http://*foo/bar", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, | 40 {"http://*foo/bar", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD}, |
| 41 { "http://foo.*.bar/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, | 41 {"http://foo.*.bar/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD}, |
| 42 { "http://fo.*.ba:123/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD }, | 42 {"http://fo.*.ba:123/baz", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD}, |
| 43 { "http:/bar", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR }, | 43 {"http:/bar", URLPattern::PARSE_ERROR_WRONG_SCHEME_SEPARATOR}, |
| 44 { "http://bar", URLPattern::PARSE_ERROR_EMPTY_PATH }, | 44 {"http://bar", URLPattern::PARSE_ERROR_EMPTY_PATH}, |
| 45 }; | 45 {"http://foo.*/bar", URLPattern::PARSE_ERROR_INVALID_HOST_WILDCARD}}; |
| 46 | 46 |
| 47 for (size_t i = 0; i < arraysize(kInvalidPatterns); ++i) { | 47 for (size_t i = 0; i < arraysize(kInvalidPatterns); ++i) { |
| 48 URLPattern pattern(URLPattern::SCHEME_ALL); | 48 URLPattern pattern(URLPattern::SCHEME_ALL); |
| 49 EXPECT_EQ(kInvalidPatterns[i].expected_result, | 49 EXPECT_EQ(kInvalidPatterns[i].expected_result, |
| 50 pattern.Parse(kInvalidPatterns[i].pattern)) | 50 pattern.Parse(kInvalidPatterns[i].pattern)) |
| 51 << kInvalidPatterns[i].pattern; | 51 << kInvalidPatterns[i].pattern; |
| 52 } | 52 } |
| 53 | 53 |
| 54 { | 54 { |
| 55 // Cannot use a C string, because this contains a null byte. | 55 // Cannot use a C string, because this contains a null byte. |
| 56 std::string null_host("http://\0www/", 12); | 56 std::string null_host("http://\0www/", 12); |
| 57 URLPattern pattern(URLPattern::SCHEME_ALL); | 57 URLPattern pattern(URLPattern::SCHEME_ALL); |
| 58 EXPECT_EQ(URLPattern::PARSE_ERROR_INVALID_HOST, | 58 EXPECT_EQ(URLPattern::PARSE_ERROR_INVALID_HOST, |
| 59 pattern.Parse(null_host)) | 59 pattern.Parse(null_host)) |
| 60 << null_host; | 60 << null_host; |
| 61 } | 61 } |
| 62 } | 62 } |
| 63 | 63 |
| 64 TEST(ExtensionURLPatternTest, Ports) { | 64 TEST(ExtensionURLPatternTest, Ports) { |
| 65 const struct { | 65 const struct { |
| 66 const char* pattern; | 66 const char* pattern; |
| 67 URLPattern::ParseResult expected_result; | 67 URLPattern::ParseResult expected_result; |
| 68 const char* expected_port; | 68 const char* expected_port; |
| 69 } kTestPatterns[] = { | 69 } kTestPatterns[] = { |
| 70 { "http://foo:1234/", URLPattern::PARSE_SUCCESS, "1234" }, | 70 {"http://foo:1234/", URLPattern::PARSE_SUCCESS, "1234"}, |
| 71 { "http://foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234" }, | 71 {"http://foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234"}, |
| 72 { "http://*.foo:1234/", URLPattern::PARSE_SUCCESS, "1234" }, | 72 {"http://*.foo:1234/", URLPattern::PARSE_SUCCESS, "1234"}, |
| 73 { "http://*.foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234" }, | 73 {"http://*.foo:1234/bar", URLPattern::PARSE_SUCCESS, "1234"}, |
| 74 { "http://:1234/", URLPattern::PARSE_SUCCESS, "1234" }, | 74 {"http://:1234/", URLPattern::PARSE_SUCCESS, "1234"}, |
| 75 { "http://foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, | 75 {"http://foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| 76 { "http://foo:*/", URLPattern::PARSE_SUCCESS, "*" }, | 76 {"http://foo:*/", URLPattern::PARSE_SUCCESS, "*"}, |
| 77 { "http://*.foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, | 77 {"http://*.foo:/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| 78 { "http://foo:com/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, | 78 {"http://foo:com/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| 79 { "http://foo:123456/", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, | 79 {"http://foo:123456/", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| 80 { "http://foo:80:80/monkey", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, | 80 {"http://foo:80:80/monkey", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| 81 { "file://foo:1234/bar", URLPattern::PARSE_SUCCESS, "*" }, | 81 {"file://foo:1234/bar", URLPattern::PARSE_SUCCESS, "*"}, |
| 82 { "chrome://foo:1234/bar", URLPattern::PARSE_ERROR_INVALID_PORT, "*" }, | 82 {"chrome://foo:1234/bar", URLPattern::PARSE_ERROR_INVALID_PORT, "*"}, |
| 83 | 83 |
| 84 // Port-like strings in the path should not trigger a warning. | 84 // Port-like strings in the path should not trigger a warning. |
| 85 { "http://*/:1234", URLPattern::PARSE_SUCCESS, "*" }, | 85 {"http://*/:1234", URLPattern::PARSE_SUCCESS, "*"}, |
| 86 { "http://*.foo/bar:1234", URLPattern::PARSE_SUCCESS, "*" }, | 86 {"http://*.foo/bar:1234", URLPattern::PARSE_SUCCESS, "*"}, |
| 87 { "http://foo/bar:1234/path", URLPattern::PARSE_SUCCESS, "*" }, | 87 {"http://foo/bar:1234/path", URLPattern::PARSE_SUCCESS, "*"}, |
| 88 }; | 88 {"http://*.foo.*/:1234", URLPattern::PARSE_SUCCESS, "*"}}; |
| 89 | 89 |
| 90 for (size_t i = 0; i < arraysize(kTestPatterns); ++i) { | 90 for (size_t i = 0; i < arraysize(kTestPatterns); ++i) { |
| 91 URLPattern pattern(URLPattern::SCHEME_ALL); | 91 URLPattern pattern(URLPattern::SCHEME_ALL); |
| 92 EXPECT_EQ(kTestPatterns[i].expected_result, | 92 EXPECT_EQ(kTestPatterns[i].expected_result, |
| 93 pattern.Parse(kTestPatterns[i].pattern)) | 93 pattern.Parse(kTestPatterns[i].pattern, true)) |
| 94 << "Got unexpected result for URL pattern: " | 94 << "Got unexpected result for URL pattern: " |
| 95 << kTestPatterns[i].pattern; | 95 << kTestPatterns[i].pattern; |
| 96 EXPECT_EQ(kTestPatterns[i].expected_port, pattern.port()) | 96 EXPECT_EQ(kTestPatterns[i].expected_port, pattern.port()) |
| 97 << "Got unexpected port for URL pattern: " << kTestPatterns[i].pattern; | 97 << "Got unexpected port for URL pattern: " << kTestPatterns[i].pattern; |
| 98 } | 98 } |
| 99 } | 99 } |
| 100 | 100 |
| 101 // all pages for a given scheme | 101 // all pages for a given scheme |
| 102 TEST(ExtensionURLPatternTest, Match1) { | 102 TEST(ExtensionURLPatternTest, Match1) { |
| 103 URLPattern pattern(kAllSchemes); | 103 URLPattern pattern(kAllSchemes); |
| 104 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*/*")); | 104 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*/*")); |
| 105 EXPECT_EQ("http", pattern.scheme()); | 105 EXPECT_EQ("http", pattern.scheme()); |
| 106 EXPECT_EQ("", pattern.host()); | 106 EXPECT_EQ("", pattern.host()); |
| 107 EXPECT_TRUE(pattern.match_subdomains()); | 107 EXPECT_TRUE(pattern.match_subdomains()); |
| 108 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 108 EXPECT_FALSE(pattern.match_all_urls()); | 109 EXPECT_FALSE(pattern.match_all_urls()); |
| 109 EXPECT_EQ("/*", pattern.path()); | 110 EXPECT_EQ("/*", pattern.path()); |
| 110 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com"))); | 111 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com"))); |
| 111 EXPECT_TRUE(pattern.MatchesURL(GURL("http://yahoo.com"))); | 112 EXPECT_TRUE(pattern.MatchesURL(GURL("http://yahoo.com"))); |
| 112 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foo"))); | 113 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foo"))); |
| 113 EXPECT_FALSE(pattern.MatchesURL(GURL("https://google.com"))); | 114 EXPECT_FALSE(pattern.MatchesURL(GURL("https://google.com"))); |
| 114 EXPECT_TRUE(pattern.MatchesURL(GURL("http://74.125.127.100/search"))); | 115 EXPECT_TRUE(pattern.MatchesURL(GURL("http://74.125.127.100/search"))); |
| 115 } | 116 } |
| 116 | 117 |
| 117 // all domains | 118 // all domains |
| 118 TEST(ExtensionURLPatternTest, Match2) { | 119 TEST(ExtensionURLPatternTest, Match2) { |
| 119 URLPattern pattern(kAllSchemes); | 120 URLPattern pattern(kAllSchemes); |
| 120 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("https://*/foo*")); | 121 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("https://*/foo*")); |
| 121 EXPECT_EQ("https", pattern.scheme()); | 122 EXPECT_EQ("https", pattern.scheme()); |
| 122 EXPECT_EQ("", pattern.host()); | 123 EXPECT_EQ("", pattern.host()); |
| 123 EXPECT_TRUE(pattern.match_subdomains()); | 124 EXPECT_TRUE(pattern.match_subdomains()); |
| 125 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 124 EXPECT_FALSE(pattern.match_all_urls()); | 126 EXPECT_FALSE(pattern.match_all_urls()); |
| 125 EXPECT_EQ("/foo*", pattern.path()); | 127 EXPECT_EQ("/foo*", pattern.path()); |
| 126 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foo"))); | 128 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foo"))); |
| 127 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foobar"))); | 129 EXPECT_TRUE(pattern.MatchesURL(GURL("https://www.google.com/foobar"))); |
| 128 EXPECT_FALSE(pattern.MatchesURL(GURL("http://www.google.com/foo"))); | 130 EXPECT_FALSE(pattern.MatchesURL(GURL("http://www.google.com/foo"))); |
| 129 EXPECT_FALSE(pattern.MatchesURL(GURL("https://www.google.com/"))); | 131 EXPECT_FALSE(pattern.MatchesURL(GURL("https://www.google.com/"))); |
| 130 EXPECT_TRUE(pattern.MatchesURL( | 132 EXPECT_TRUE(pattern.MatchesURL( |
| 131 GURL("filesystem:https://www.google.com/foobar/"))); | 133 GURL("filesystem:https://www.google.com/foobar/"))); |
| 132 } | 134 } |
| 133 | 135 |
| 134 // subdomains | 136 // subdomains |
| 135 TEST(URLPatternTest, Match3) { | 137 TEST(URLPatternTest, Match3) { |
| 136 URLPattern pattern(kAllSchemes); | 138 URLPattern pattern(kAllSchemes); |
| 137 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 139 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| 138 pattern.Parse("http://*.google.com/foo*bar")); | 140 pattern.Parse("http://*.google.com/foo*bar")); |
| 139 EXPECT_EQ("http", pattern.scheme()); | 141 EXPECT_EQ("http", pattern.scheme()); |
| 140 EXPECT_EQ("google.com", pattern.host()); | 142 EXPECT_EQ("google.com", pattern.host()); |
| 141 EXPECT_TRUE(pattern.match_subdomains()); | 143 EXPECT_TRUE(pattern.match_subdomains()); |
| 144 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 142 EXPECT_FALSE(pattern.match_all_urls()); | 145 EXPECT_FALSE(pattern.match_all_urls()); |
| 143 EXPECT_EQ("/foo*bar", pattern.path()); | 146 EXPECT_EQ("/foo*bar", pattern.path()); |
| 144 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar"))); | 147 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar"))); |
| 145 EXPECT_TRUE(pattern.MatchesURL(GURL("http://www.google.com/foo?bar"))); | 148 EXPECT_TRUE(pattern.MatchesURL(GURL("http://www.google.com/foo?bar"))); |
| 146 EXPECT_TRUE(pattern.MatchesURL( | 149 EXPECT_TRUE(pattern.MatchesURL( |
| 147 GURL("http://monkey.images.google.com/foooobar"))); | 150 GURL("http://monkey.images.google.com/foooobar"))); |
| 148 EXPECT_FALSE(pattern.MatchesURL(GURL("http://yahoo.com/foobar"))); | 151 EXPECT_FALSE(pattern.MatchesURL(GURL("http://yahoo.com/foobar"))); |
| 149 EXPECT_TRUE(pattern.MatchesURL( | 152 EXPECT_TRUE(pattern.MatchesURL( |
| 150 GURL("filesystem:http://google.com/foo/bar"))); | 153 GURL("filesystem:http://google.com/foo/bar"))); |
| 151 EXPECT_FALSE(pattern.MatchesURL( | 154 EXPECT_FALSE(pattern.MatchesURL( |
| 152 GURL("filesystem:http://google.com/temporary/foobar"))); | 155 GURL("filesystem:http://google.com/temporary/foobar"))); |
| 153 } | 156 } |
| 154 | 157 |
| 155 // glob escaping | 158 // glob escaping |
| 156 TEST(ExtensionURLPatternTest, Match5) { | 159 TEST(ExtensionURLPatternTest, Match5) { |
| 157 URLPattern pattern(kAllSchemes); | 160 URLPattern pattern(kAllSchemes); |
| 158 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file:///foo?bar\\*baz")); | 161 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file:///foo?bar\\*baz")); |
| 159 EXPECT_EQ("file", pattern.scheme()); | 162 EXPECT_EQ("file", pattern.scheme()); |
| 160 EXPECT_EQ("", pattern.host()); | 163 EXPECT_EQ("", pattern.host()); |
| 161 EXPECT_FALSE(pattern.match_subdomains()); | 164 EXPECT_FALSE(pattern.match_subdomains()); |
| 165 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 162 EXPECT_FALSE(pattern.match_all_urls()); | 166 EXPECT_FALSE(pattern.match_all_urls()); |
| 163 EXPECT_EQ("/foo?bar\\*baz", pattern.path()); | 167 EXPECT_EQ("/foo?bar\\*baz", pattern.path()); |
| 164 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo?bar\\hellobaz"))); | 168 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo?bar\\hellobaz"))); |
| 165 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///fooXbar\\hellobaz"))); | 169 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///fooXbar\\hellobaz"))); |
| 166 } | 170 } |
| 167 | 171 |
| 168 // ip addresses | 172 // ip addresses |
| 169 TEST(ExtensionURLPatternTest, Match6) { | 173 TEST(ExtensionURLPatternTest, Match6) { |
| 170 URLPattern pattern(kAllSchemes); | 174 URLPattern pattern(kAllSchemes); |
| 171 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://127.0.0.1/*")); | 175 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://127.0.0.1/*")); |
| 172 EXPECT_EQ("http", pattern.scheme()); | 176 EXPECT_EQ("http", pattern.scheme()); |
| 173 EXPECT_EQ("127.0.0.1", pattern.host()); | 177 EXPECT_EQ("127.0.0.1", pattern.host()); |
| 174 EXPECT_FALSE(pattern.match_subdomains()); | 178 EXPECT_FALSE(pattern.match_subdomains()); |
| 179 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 175 EXPECT_FALSE(pattern.match_all_urls()); | 180 EXPECT_FALSE(pattern.match_all_urls()); |
| 176 EXPECT_EQ("/*", pattern.path()); | 181 EXPECT_EQ("/*", pattern.path()); |
| 177 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); | 182 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
| 178 } | 183 } |
| 179 | 184 |
| 180 // subdomain matching with ip addresses | 185 // subdomain matching with ip addresses |
| 181 TEST(ExtensionURLPatternTest, Match7) { | 186 TEST(ExtensionURLPatternTest, Match7) { |
| 182 URLPattern pattern(kAllSchemes); | 187 URLPattern pattern(kAllSchemes); |
| 183 // allowed, but useless | 188 // allowed, but useless |
| 184 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.0.0.1/*")); | 189 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("http://*.0.0.1/*")); |
| 185 EXPECT_EQ("http", pattern.scheme()); | 190 EXPECT_EQ("http", pattern.scheme()); |
| 186 EXPECT_EQ("0.0.1", pattern.host()); | 191 EXPECT_EQ("0.0.1", pattern.host()); |
| 187 EXPECT_TRUE(pattern.match_subdomains()); | 192 EXPECT_TRUE(pattern.match_subdomains()); |
| 193 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 188 EXPECT_FALSE(pattern.match_all_urls()); | 194 EXPECT_FALSE(pattern.match_all_urls()); |
| 189 EXPECT_EQ("/*", pattern.path()); | 195 EXPECT_EQ("/*", pattern.path()); |
| 190 // Subdomain matching is never done if the argument has an IP address host. | 196 // Subdomain matching is never done if the argument has an IP address host. |
| 191 EXPECT_FALSE(pattern.MatchesURL(GURL("http://127.0.0.1"))); | 197 EXPECT_FALSE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
| 192 } | 198 } |
| 193 | 199 |
| 194 // unicode | 200 // unicode |
| 195 TEST(ExtensionURLPatternTest, Match8) { | 201 TEST(ExtensionURLPatternTest, Match8) { |
| 196 URLPattern pattern(kAllSchemes); | 202 URLPattern pattern(kAllSchemes); |
| 197 // The below is the ASCII encoding of the following URL: | 203 // The below is the ASCII encoding of the following URL: |
| 198 // http://*.\xe1\x80\xbf/a\xc2\x81\xe1* | 204 // http://*.\xe1\x80\xbf/a\xc2\x81\xe1* |
| 199 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | 205 EXPECT_EQ(URLPattern::PARSE_SUCCESS, |
| 200 pattern.Parse("http://*.xn--gkd/a%C2%81%E1*")); | 206 pattern.Parse("http://*.xn--gkd/a%C2%81%E1*")); |
| 201 EXPECT_EQ("http", pattern.scheme()); | 207 EXPECT_EQ("http", pattern.scheme()); |
| 202 EXPECT_EQ("xn--gkd", pattern.host()); | 208 EXPECT_EQ("xn--gkd", pattern.host()); |
| 203 EXPECT_TRUE(pattern.match_subdomains()); | 209 EXPECT_TRUE(pattern.match_subdomains()); |
| 210 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 204 EXPECT_FALSE(pattern.match_all_urls()); | 211 EXPECT_FALSE(pattern.match_all_urls()); |
| 205 EXPECT_EQ("/a%C2%81%E1*", pattern.path()); | 212 EXPECT_EQ("/a%C2%81%E1*", pattern.path()); |
| 206 EXPECT_TRUE(pattern.MatchesURL( | 213 EXPECT_TRUE(pattern.MatchesURL( |
| 207 GURL("http://abc.\xe1\x80\xbf/a\xc2\x81\xe1xyz"))); | 214 GURL("http://abc.\xe1\x80\xbf/a\xc2\x81\xe1xyz"))); |
| 208 EXPECT_TRUE(pattern.MatchesURL( | 215 EXPECT_TRUE(pattern.MatchesURL( |
| 209 GURL("http://\xe1\x80\xbf/a\xc2\x81\xe1\xe1"))); | 216 GURL("http://\xe1\x80\xbf/a\xc2\x81\xe1\xe1"))); |
| 210 } | 217 } |
| 211 | 218 |
| 212 // chrome:// | 219 // chrome:// |
| 213 TEST(ExtensionURLPatternTest, Match9) { | 220 TEST(ExtensionURLPatternTest, Match9) { |
| 214 URLPattern pattern(kAllSchemes); | 221 URLPattern pattern(kAllSchemes); |
| 215 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("chrome://favicon/*")); | 222 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("chrome://favicon/*")); |
| 216 EXPECT_EQ("chrome", pattern.scheme()); | 223 EXPECT_EQ("chrome", pattern.scheme()); |
| 217 EXPECT_EQ("favicon", pattern.host()); | 224 EXPECT_EQ("favicon", pattern.host()); |
| 218 EXPECT_FALSE(pattern.match_subdomains()); | 225 EXPECT_FALSE(pattern.match_subdomains()); |
| 226 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 219 EXPECT_FALSE(pattern.match_all_urls()); | 227 EXPECT_FALSE(pattern.match_all_urls()); |
| 220 EXPECT_EQ("/*", pattern.path()); | 228 EXPECT_EQ("/*", pattern.path()); |
| 221 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); | 229 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
| 222 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/https://google.com"))); | 230 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/https://google.com"))); |
| 223 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://history"))); | 231 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://history"))); |
| 224 } | 232 } |
| 225 | 233 |
| 226 // *:// | 234 // *:// |
| 227 TEST(ExtensionURLPatternTest, Match10) { | 235 TEST(ExtensionURLPatternTest, Match10) { |
| 228 URLPattern pattern(kAllSchemes); | 236 URLPattern pattern(kAllSchemes); |
| 229 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("*://*/*")); | 237 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("*://*/*")); |
| 230 EXPECT_TRUE(pattern.MatchesScheme("http")); | 238 EXPECT_TRUE(pattern.MatchesScheme("http")); |
| 231 EXPECT_TRUE(pattern.MatchesScheme("https")); | 239 EXPECT_TRUE(pattern.MatchesScheme("https")); |
| 232 EXPECT_FALSE(pattern.MatchesScheme("chrome")); | 240 EXPECT_FALSE(pattern.MatchesScheme("chrome")); |
| 233 EXPECT_FALSE(pattern.MatchesScheme("file")); | 241 EXPECT_FALSE(pattern.MatchesScheme("file")); |
| 234 EXPECT_FALSE(pattern.MatchesScheme("ftp")); | 242 EXPECT_FALSE(pattern.MatchesScheme("ftp")); |
| 235 EXPECT_TRUE(pattern.match_subdomains()); | 243 EXPECT_TRUE(pattern.match_subdomains()); |
| 244 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 236 EXPECT_FALSE(pattern.match_all_urls()); | 245 EXPECT_FALSE(pattern.match_all_urls()); |
| 237 EXPECT_EQ("/*", pattern.path()); | 246 EXPECT_EQ("/*", pattern.path()); |
| 238 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); | 247 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
| 239 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); | 248 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
| 240 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///foo/bar"))); | 249 EXPECT_FALSE(pattern.MatchesURL(GURL("file:///foo/bar"))); |
| 241 EXPECT_FALSE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); | 250 EXPECT_FALSE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); |
| 242 } | 251 } |
| 243 | 252 |
| 244 // <all_urls> | 253 // <all_urls> |
| 245 TEST(ExtensionURLPatternTest, Match11) { | 254 TEST(ExtensionURLPatternTest, Match11) { |
| 246 URLPattern pattern(kAllSchemes); | 255 URLPattern pattern(kAllSchemes); |
| 247 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("<all_urls>")); | 256 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("<all_urls>")); |
| 248 EXPECT_TRUE(pattern.MatchesScheme("chrome")); | 257 EXPECT_TRUE(pattern.MatchesScheme("chrome")); |
| 249 EXPECT_TRUE(pattern.MatchesScheme("http")); | 258 EXPECT_TRUE(pattern.MatchesScheme("http")); |
| 250 EXPECT_TRUE(pattern.MatchesScheme("https")); | 259 EXPECT_TRUE(pattern.MatchesScheme("https")); |
| 251 EXPECT_TRUE(pattern.MatchesScheme("file")); | 260 EXPECT_TRUE(pattern.MatchesScheme("file")); |
| 252 EXPECT_TRUE(pattern.MatchesScheme("filesystem")); | 261 EXPECT_TRUE(pattern.MatchesScheme("filesystem")); |
| 253 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); | 262 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); |
| 254 EXPECT_TRUE(pattern.match_subdomains()); | 263 EXPECT_TRUE(pattern.match_subdomains()); |
| 264 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 255 EXPECT_TRUE(pattern.match_all_urls()); | 265 EXPECT_TRUE(pattern.match_all_urls()); |
| 256 EXPECT_EQ("/*", pattern.path()); | 266 EXPECT_EQ("/*", pattern.path()); |
| 257 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); | 267 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
| 258 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); | 268 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
| 259 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar"))); | 269 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar"))); |
| 260 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); | 270 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); |
| 261 | 271 |
| 262 // Make sure the properties are the same when creating an <all_urls> pattern | 272 // Make sure the properties are the same when creating an <all_urls> pattern |
| 263 // via SetMatchAllURLs and by parsing <all_urls>. | 273 // via SetMatchAllURLs and by parsing <all_urls>. |
| 264 URLPattern pattern2(kAllSchemes); | 274 URLPattern pattern2(kAllSchemes); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 280 EXPECT_TRUE(pattern.MatchesScheme("chrome")); | 290 EXPECT_TRUE(pattern.MatchesScheme("chrome")); |
| 281 EXPECT_TRUE(pattern.MatchesScheme("http")); | 291 EXPECT_TRUE(pattern.MatchesScheme("http")); |
| 282 EXPECT_TRUE(pattern.MatchesScheme("https")); | 292 EXPECT_TRUE(pattern.MatchesScheme("https")); |
| 283 EXPECT_TRUE(pattern.MatchesScheme("file")); | 293 EXPECT_TRUE(pattern.MatchesScheme("file")); |
| 284 EXPECT_TRUE(pattern.MatchesScheme("filesystem")); | 294 EXPECT_TRUE(pattern.MatchesScheme("filesystem")); |
| 285 EXPECT_TRUE(pattern.MatchesScheme("javascript")); | 295 EXPECT_TRUE(pattern.MatchesScheme("javascript")); |
| 286 EXPECT_TRUE(pattern.MatchesScheme("data")); | 296 EXPECT_TRUE(pattern.MatchesScheme("data")); |
| 287 EXPECT_TRUE(pattern.MatchesScheme("about")); | 297 EXPECT_TRUE(pattern.MatchesScheme("about")); |
| 288 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); | 298 EXPECT_TRUE(pattern.MatchesScheme("chrome-extension")); |
| 289 EXPECT_TRUE(pattern.match_subdomains()); | 299 EXPECT_TRUE(pattern.match_subdomains()); |
| 300 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 290 EXPECT_TRUE(pattern.match_all_urls()); | 301 EXPECT_TRUE(pattern.match_all_urls()); |
| 291 EXPECT_EQ("/*", pattern.path()); | 302 EXPECT_EQ("/*", pattern.path()); |
| 292 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); | 303 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://favicon/http://google.com"))); |
| 293 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); | 304 EXPECT_TRUE(pattern.MatchesURL(GURL("http://127.0.0.1"))); |
| 294 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar"))); | 305 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo/bar"))); |
| 295 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); | 306 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo/bar"))); |
| 296 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://newtab"))); | 307 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome://newtab"))); |
| 297 EXPECT_TRUE(pattern.MatchesURL(GURL("about:blank"))); | 308 EXPECT_TRUE(pattern.MatchesURL(GURL("about:blank"))); |
| 298 EXPECT_TRUE(pattern.MatchesURL(GURL("about:version"))); | 309 EXPECT_TRUE(pattern.MatchesURL(GURL("about:version"))); |
| 299 EXPECT_TRUE(pattern.MatchesURL( | 310 EXPECT_TRUE(pattern.MatchesURL( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 331 } | 342 } |
| 332 | 343 |
| 333 // file scheme with empty hostname | 344 // file scheme with empty hostname |
| 334 TEST(ExtensionURLPatternTest, Match14) { | 345 TEST(ExtensionURLPatternTest, Match14) { |
| 335 URLPattern pattern(kAllSchemes); | 346 URLPattern pattern(kAllSchemes); |
| 336 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file:///foo*")); | 347 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file:///foo*")); |
| 337 EXPECT_EQ("file", pattern.scheme()); | 348 EXPECT_EQ("file", pattern.scheme()); |
| 338 EXPECT_EQ("", pattern.host()); | 349 EXPECT_EQ("", pattern.host()); |
| 339 EXPECT_FALSE(pattern.match_subdomains()); | 350 EXPECT_FALSE(pattern.match_subdomains()); |
| 340 EXPECT_FALSE(pattern.match_all_urls()); | 351 EXPECT_FALSE(pattern.match_all_urls()); |
| 352 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 341 EXPECT_EQ("/foo*", pattern.path()); | 353 EXPECT_EQ("/foo*", pattern.path()); |
| 342 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); | 354 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); |
| 343 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); | 355 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); |
| 344 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); | 356 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); |
| 345 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); | 357 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); |
| 346 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); | 358 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); |
| 347 } | 359 } |
| 348 | 360 |
| 349 // file scheme without hostname part | 361 // file scheme without hostname part |
| 350 TEST(ExtensionURLPatternTest, Match15) { | 362 TEST(ExtensionURLPatternTest, Match15) { |
| 351 URLPattern pattern(kAllSchemes); | 363 URLPattern pattern(kAllSchemes); |
| 352 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file://foo*")); | 364 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file://foo*")); |
| 353 EXPECT_EQ("file", pattern.scheme()); | 365 EXPECT_EQ("file", pattern.scheme()); |
| 354 EXPECT_EQ("", pattern.host()); | 366 EXPECT_EQ("", pattern.host()); |
| 355 EXPECT_FALSE(pattern.match_subdomains()); | 367 EXPECT_FALSE(pattern.match_subdomains()); |
| 356 EXPECT_FALSE(pattern.match_all_urls()); | 368 EXPECT_FALSE(pattern.match_all_urls()); |
| 369 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 357 EXPECT_EQ("/foo*", pattern.path()); | 370 EXPECT_EQ("/foo*", pattern.path()); |
| 358 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); | 371 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); |
| 359 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); | 372 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); |
| 360 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); | 373 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); |
| 361 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); | 374 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); |
| 362 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); | 375 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); |
| 363 } | 376 } |
| 364 | 377 |
| 365 // file scheme with hostname | 378 // file scheme with hostname |
| 366 TEST(ExtensionURLPatternTest, Match16) { | 379 TEST(ExtensionURLPatternTest, Match16) { |
| 367 URLPattern pattern(kAllSchemes); | 380 URLPattern pattern(kAllSchemes); |
| 368 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file://localhost/foo*")); | 381 EXPECT_EQ(URLPattern::PARSE_SUCCESS, pattern.Parse("file://localhost/foo*")); |
| 369 EXPECT_EQ("file", pattern.scheme()); | 382 EXPECT_EQ("file", pattern.scheme()); |
| 370 // Since hostname is ignored for file://. | 383 // Since hostname is ignored for file://. |
| 371 EXPECT_EQ("", pattern.host()); | 384 EXPECT_EQ("", pattern.host()); |
| 372 EXPECT_FALSE(pattern.match_subdomains()); | 385 EXPECT_FALSE(pattern.match_subdomains()); |
| 386 EXPECT_TRUE(pattern.match_effective_tld()); | |
| 373 EXPECT_FALSE(pattern.match_all_urls()); | 387 EXPECT_FALSE(pattern.match_all_urls()); |
| 374 EXPECT_EQ("/foo*", pattern.path()); | 388 EXPECT_EQ("/foo*", pattern.path()); |
| 375 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); | 389 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foo"))); |
| 376 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); | 390 EXPECT_FALSE(pattern.MatchesURL(GURL("file://foobar"))); |
| 377 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); | 391 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foo"))); |
| 378 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); | 392 EXPECT_TRUE(pattern.MatchesURL(GURL("file:///foobar"))); |
| 379 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); | 393 EXPECT_TRUE(pattern.MatchesURL(GURL("file://localhost/foo"))); |
| 380 } | 394 } |
| 381 | 395 |
| 382 // Specific port | 396 // Specific port |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 430 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome-extension://ftw"))); | 444 EXPECT_TRUE(pattern.MatchesURL(GURL("chrome-extension://ftw"))); |
| 431 EXPECT_TRUE(pattern.MatchesURL( | 445 EXPECT_TRUE(pattern.MatchesURL( |
| 432 GURL("chrome-extension://ftw/http://google.com"))); | 446 GURL("chrome-extension://ftw/http://google.com"))); |
| 433 EXPECT_TRUE(pattern.MatchesURL( | 447 EXPECT_TRUE(pattern.MatchesURL( |
| 434 GURL("chrome-extension://ftw/https://google.com"))); | 448 GURL("chrome-extension://ftw/https://google.com"))); |
| 435 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome-extension://foobar"))); | 449 EXPECT_FALSE(pattern.MatchesURL(GURL("chrome-extension://foobar"))); |
| 436 EXPECT_TRUE(pattern.MatchesURL( | 450 EXPECT_TRUE(pattern.MatchesURL( |
| 437 GURL("filesystem:chrome-extension://ftw/t/file.txt"))); | 451 GURL("filesystem:chrome-extension://ftw/t/file.txt"))); |
| 438 } | 452 } |
| 439 | 453 |
| 454 // effective TLD wildcard | |
| 455 TEST(URLPatternTest, Match20) { | |
|
Devlin
2017/01/26 22:47:40
Match20 is a terrible name for a test. ;) (So is
nrpeter
2017/02/03 19:32:25
Done.
| |
| 456 URLPattern pattern(kAllSchemes); | |
| 457 EXPECT_EQ(URLPattern::PARSE_SUCCESS, | |
| 458 pattern.Parse("http://*.google.*/foo*bar", true)); | |
| 459 EXPECT_EQ("http", pattern.scheme()); | |
| 460 EXPECT_EQ("google", pattern.host()); | |
| 461 EXPECT_TRUE(pattern.match_subdomains()); | |
| 462 EXPECT_FALSE(pattern.match_effective_tld()); | |
| 463 EXPECT_FALSE(pattern.match_all_urls()); | |
| 464 EXPECT_EQ("/foo*bar", pattern.path()); | |
| 465 EXPECT_TRUE(pattern.MatchesURL(GURL("http://google.com/foobar"))); | |
| 466 EXPECT_TRUE(pattern.MatchesURL(GURL("http://www.google.com.br/foo?bar"))); | |
| 467 EXPECT_TRUE( | |
| 468 pattern.MatchesURL(GURL("http://monkey.images.google.co.uk/foooobar"))); | |
| 469 EXPECT_FALSE(pattern.MatchesURL(GURL("http://yahoo.com/foobar"))); | |
| 470 EXPECT_TRUE(pattern.MatchesURL(GURL("filesystem:http://google.com/foo/bar"))); | |
| 471 EXPECT_FALSE(pattern.MatchesURL( | |
| 472 GURL("filesystem:http://google.com/temporary/foobar"))); | |
| 473 } | |
|
Devlin
2017/01/26 22:47:40
Do we have tests of the inverse behavior?
nrpeter
2017/02/03 19:32:25
When you say inverse behavior, do you mean a test
| |
| 474 | |
| 440 static const struct GetAsStringPatterns { | 475 static const struct GetAsStringPatterns { |
| 441 const char* pattern; | 476 const char* pattern; |
| 442 } kGetAsStringTestCases[] = { | 477 } kGetAsStringTestCases[] = { |
| 443 { "http://www/" }, | 478 { "http://www/" }, |
| 444 { "http://*/*" }, | 479 { "http://*/*" }, |
| 445 { "chrome://*/*" }, | 480 { "chrome://*/*" }, |
| 446 { "chrome://newtab/" }, | 481 { "chrome://newtab/" }, |
| 447 { "about:*" }, | 482 { "about:*" }, |
| 448 { "about:blank" }, | 483 { "about:blank" }, |
| 449 { "chrome-extension://*/*" }, | 484 { "chrome-extension://*/*" }, |
| (...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 872 EXPECT_TRUE(pattern.MatchesURL(normal_domain)); | 907 EXPECT_TRUE(pattern.MatchesURL(normal_domain)); |
| 873 EXPECT_TRUE(pattern.MatchesURL(trailing_dot_domain)); | 908 EXPECT_TRUE(pattern.MatchesURL(trailing_dot_domain)); |
| 874 | 909 |
| 875 const URLPattern trailing_pattern(URLPattern::SCHEME_HTTP, | 910 const URLPattern trailing_pattern(URLPattern::SCHEME_HTTP, |
| 876 "*://example.com./*"); | 911 "*://example.com./*"); |
| 877 EXPECT_TRUE(trailing_pattern.MatchesURL(normal_domain)); | 912 EXPECT_TRUE(trailing_pattern.MatchesURL(normal_domain)); |
| 878 EXPECT_TRUE(trailing_pattern.MatchesURL(trailing_dot_domain)); | 913 EXPECT_TRUE(trailing_pattern.MatchesURL(trailing_dot_domain)); |
| 879 } | 914 } |
| 880 | 915 |
| 881 } // namespace | 916 } // namespace |
| OLD | NEW |