123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "net/base/scheme_host_port_matcher_rule.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace net {
- namespace {
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherHostnamePatternRule_HostOnlyRule) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("wWw.gOogle.com");
- EXPECT_EQ("www.google.com", rule->ToString());
- // non-hostname components don't matter.
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://www.google.com:81")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("ftp://www.google.com:99")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com/x/y?q#h")));
- // Hostname must match.
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://foo.www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://xxx.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com.baz.org")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherHostnamePatternRule_BasicDomain) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString(".gOOgle.com");
- EXPECT_EQ("*.google.com", rule->ToString());
- // non-hostname components don't matter.
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://a.google.com:81")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("ftp://www.google.com:99")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://foo.google.com/x/y?q")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://foo:bar@baz.google.com#x")));
- // Hostname must be a strict "ends with" match.
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com.baz.org")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherHostnamePatternRule_BasicDomainWithPort) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("*.GOOGLE.com:80");
- EXPECT_EQ("*.google.com:80", rule->ToString());
- // non-hostname components don't matter.
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://a.google.com:80?x")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://a.google.com:80/x/y?q#f")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("ftp://www.google.com:80")));
- // Hostname must be a strict "ends with" match.
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com.baz.org")));
- // Port must match.
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com:90")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("https://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("https://ftp.google.com")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherHostnamePatternRule_MatchAll) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("*");
- EXPECT_EQ("*", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("ftp://www.foobar.com:99")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://a.google.com:80/?x")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherHostnamePatternRule_HttpScheme) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString(
- "http://www.google.com");
- EXPECT_EQ("http://www.google.com", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com/foo")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com:99")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://foo.www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("https://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("ftp://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com.org")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherHostnamePatternRule_HttpOnlyWithWildcard) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString(
- "http://*www.GOOGLE.com");
- EXPECT_EQ("http://*www.google.com", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com/foo")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.google.com:99")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://foo.www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("https://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("ftp://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com.org")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherHostnamePatternRule_PunnyCodeHostname) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("*.xn--flw351e.cn");
- EXPECT_EQ("*.xn--flw351e.cn", rule->ToString());
- // Google Chinese site.
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://www.谷歌.cn")));
- }
- TEST(SchemeHostPortMatcherRuleTest, SuffixMatchingTest) {
- // foo1.com, suffix matching rule will match www.foo1.com but the original one
- // doesn't.
- SchemeHostPortMatcherHostnamePatternRule rule1("", "foo1.com", -1);
- std::unique_ptr<SchemeHostPortMatcherHostnamePatternRule>
- suffix_matching_rule = rule1.GenerateSuffixMatchingRule();
- EXPECT_EQ("foo1.com", rule1.ToString());
- EXPECT_EQ("*foo1.com", suffix_matching_rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule1.Evaluate(GURL("http://www.foo1.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- suffix_matching_rule->Evaluate(GURL("http://www.foo1.com")));
- // .foo2.com, suffix matching rule will match www.foo2.com but the original
- // one doesn't.
- SchemeHostPortMatcherHostnamePatternRule rule2("", ".foo2.com", -1);
- suffix_matching_rule = rule2.GenerateSuffixMatchingRule();
- EXPECT_EQ(".foo2.com", rule2.ToString());
- EXPECT_EQ("*.foo2.com", suffix_matching_rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule2.Evaluate(GURL("http://www.foo2.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- suffix_matching_rule->Evaluate(GURL("http://www.foo2.com")));
- // *foobar.com:80, this is already a suffix matching rule.
- SchemeHostPortMatcherHostnamePatternRule rule3("", "*foobar.com", 80);
- suffix_matching_rule = rule3.GenerateSuffixMatchingRule();
- EXPECT_EQ("*foobar.com:80", rule3.ToString());
- EXPECT_EQ("*foobar.com:80", suffix_matching_rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule3.Evaluate(GURL("http://www.foobar.com:80")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- suffix_matching_rule->Evaluate(GURL("http://www.foobar.com:80")));
- // *.foo, this is already a suffix matching rule.
- SchemeHostPortMatcherHostnamePatternRule rule4("", "*.foo", -1);
- suffix_matching_rule = rule4.GenerateSuffixMatchingRule();
- EXPECT_EQ("*.foo", rule4.ToString());
- EXPECT_EQ("*.foo", suffix_matching_rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule4.Evaluate(GURL("http://www.foo")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- suffix_matching_rule->Evaluate(GURL("http://www.foo")));
- // http://baz, suffix matching works for host part only.
- SchemeHostPortMatcherHostnamePatternRule rule5("http", "baz", -1);
- suffix_matching_rule = rule5.GenerateSuffixMatchingRule();
- EXPECT_EQ("http://baz", rule5.ToString());
- EXPECT_EQ("http://*baz", suffix_matching_rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule5.Evaluate(GURL("http://foobaz")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- suffix_matching_rule->Evaluate(GURL("http://foobaz")));
- }
- TEST(SchemeHostPortMatcherRuleTest, SchemeHostPortMatcherIPHostRule_IPv4) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("192.168.1.1");
- EXPECT_EQ("192.168.1.1", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1:90")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1:90/x/y?q")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1:90/x/y?q#h")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://sup.192.168.1.1")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherIPHostRule_IPv4WithPort) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("192.168.1.1:33");
- EXPECT_EQ("192.168.1.1:33", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1:33")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1:33/x/y?q#h")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.168.1.1")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.168.1.1:90")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://sup.192.168.1.1")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherIPHostRule_IPv4WithScheme) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("http://192.168.1.1");
- EXPECT_EQ("http://192.168.1.1", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1:90")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1:90/x/y?q#h")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("ftp://192.168.1.1")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("https://192.168.1.1")));
- }
- TEST(SchemeHostPortMatcherRuleTest, SchemeHostPortMatcherIPHostRule_IPv6) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString(
- "[3ffe:2a00:100:7031:0:0::1]");
- // Note that the IPv6 address is canonicalized.
- EXPECT_EQ("[3ffe:2a00:100:7031::1]", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://[3ffe:2a00:100:7031::1]")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://[3ffe:2a00:100:7031::1]:33")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://[3ffe:2a00:100:7031::1]:33/x/y?q#h")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.168.1.1")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.168.1.1:90")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://sup.192.168.1.1")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherIPHostRule_IPv6WithPort) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString(
- "[3ffe:2a00:100:7031:0:0::1]:33");
- // Note that the IPv6 address is canonicalized.
- EXPECT_EQ("[3ffe:2a00:100:7031::1]:33", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://[3ffe:2a00:100:7031::1]:33")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://[3ffe:2a00:100:7031::1]:33/x/y?q#h")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://[3ffe:2a00:100:7031::1]")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.168.1.1")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.168.1.1:90")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://www.google.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://sup.192.168.1.1")));
- }
- TEST(SchemeHostPortMatcherRuleTest,
- SchemeHostPortMatcherIPHostRule_IPv6WithScheme) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString(
- "https://[3ffe:2a00:100:7031:0:0::1]");
- // Note that the IPv6 address is canonicalized.
- EXPECT_EQ("https://[3ffe:2a00:100:7031::1]", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://[3ffe:2a00:100:7031::1]")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://[3ffe:2a00:100:7031::1]:33")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://[3ffe:2a00:100:7031::1]:33/x/y?q#h")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://[3ffe:2a00:100:7031::1]")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("ftp://[3ffe:2a00:100:7031::1]")));
- }
- TEST(SchemeHostPortMatcherRuleTest, SchemeHostPortMatcherIPBlockRule_IPv4) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("192.168.1.1/16");
- EXPECT_EQ("192.168.1.1/16", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.1.1")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.4.4")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.0.0:81")));
- // Test that an IPv4 mapped IPv6 literal matches an IPv4 CIDR rule.
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://[::ffff:192.168.11.11]")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://foobar.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.169.1.1")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://xxx.192.168.1.1")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.168.1.1.xx")));
- }
- TEST(SchemeHostPortMatcherRuleTest, SchemeHostPortMatcherIPBlockRule_IPv6) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("a:b:c:d::/48");
- EXPECT_EQ("a:b:c:d::/48", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://[A:b:C:9::]")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://foobar.com")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.168.1.1")));
- // Test that an IPv4 literal matches an IPv4 mapped IPv6 CIDR rule.
- // This is the IPv4 mapped equivalent to 192.168.1.1/16.
- rule = std::make_unique<SchemeHostPortMatcherIPBlockRule>(
- "::ffff:192.168.1.1/112", "",
- IPAddress(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
- 192, 168, 1, 1),
- 112);
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://[::ffff:192.168.1.3]")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://192.168.11.11")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://10.10.1.1")));
- // Test using an IP range that is close to IPv4 mapped, but not
- // quite. Should not result in matches.
- rule = std::make_unique<SchemeHostPortMatcherIPBlockRule>(
- "::fffe:192.168.1.1/112", "",
- IPAddress(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe,
- 192, 168, 1, 1),
- 112);
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://[::fffe:192.168.1.3]")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://[::ffff:192.168.1.3]")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://192.168.11.11")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("http://10.10.1.1")));
- }
- TEST(SchemeHostPortMatcherRuleTest, ParseWildcardAtStart) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("*.org:443");
- EXPECT_EQ("*.org:443", rule->ToString());
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://example.org:443")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("https://example.org")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kInclude,
- rule->Evaluate(GURL("http://foo.org:443")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("https://example.org:80")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("https://example.com:80")));
- EXPECT_EQ(SchemeHostPortMatcherResult::kNoMatch,
- rule->Evaluate(GURL("https://example.orgg:80")));
- }
- TEST(SchemeHostPortMatcherRuleTest, ParseInvalidPort) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("*.com:+443");
- EXPECT_EQ(nullptr, rule);
- rule = SchemeHostPortMatcherRule::FromUntrimmedRawString("*.com:-443");
- EXPECT_EQ(nullptr, rule);
- rule = SchemeHostPortMatcherRule::FromUntrimmedRawString("*.com:0x443");
- EXPECT_EQ(nullptr, rule);
- }
- // Test that parsing an IPv6 range given a bracketed literal is not supported.
- // Whether IPv6 literals need to be bracketed or not is pretty much a coin toss
- // depending on the context, and here it is expected to be unbracketed to match
- // macOS. It would be fine to support bracketed too, however none of the
- // grammars we parse need that.
- TEST(SchemeHostPortMatcherRuleTest, ParseBracketedCIDR_IPv6) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("[a:b:c:d::]/48");
- EXPECT_EQ(nullptr, rule);
- }
- TEST(SchemeHostPortMatcherRuleTest, BadInputs) {
- std::unique_ptr<SchemeHostPortMatcherRule> rule =
- SchemeHostPortMatcherRule::FromUntrimmedRawString("://");
- EXPECT_EQ(nullptr, rule);
- rule = SchemeHostPortMatcherRule::FromUntrimmedRawString(" ");
- EXPECT_EQ(nullptr, rule);
- rule = SchemeHostPortMatcherRule::FromUntrimmedRawString("http://");
- EXPECT_EQ(nullptr, rule);
- rule = SchemeHostPortMatcherRule::FromUntrimmedRawString("*.foo.com:-34");
- EXPECT_EQ(nullptr, rule);
- }
- } // anonymous namespace
- } // namespace net
|