15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings_pattern.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingsPattern Pattern(const std::string& str) { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ContentSettingsPattern::FromString(str); 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, RealWorldPatterns) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is the place for real world patterns that unveiled bugs. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("[*.]ikea.com", 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]ikea.com").ToString().c_str()); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, GURL) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Document and verify GURL behavior. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url("http://mail.google.com:80"); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(-1, url.IntPort()); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", url.port()); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = GURL("http://mail.google.com"); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(-1, url.IntPort()); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", url.port()); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = GURL("https://mail.google.com:443"); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(-1, url.IntPort()); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", url.port()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = GURL("https://mail.google.com"); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(-1, url.IntPort()); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", url.port()); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = GURL("http://mail.google.com"); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(-1, url.IntPort()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", url.port()); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, FromURL) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTICE: When content settings pattern are created from a GURL the following 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // happens: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - If the GURL scheme is "http" the scheme wildcard is used. Otherwise the 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GURL scheme is used. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - A domain wildcard is added to the GURL host. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // - A port wildcard is used instead of the schemes default port. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In case of non-default ports the specific GURL port is used. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern = ContentSettingsPattern::FromURL( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.youtube.com")); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.IsValid()); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("[*.]www.youtube.com", pattern.ToString().c_str()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Patterns created from a URL. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = ContentSettingsPattern::FromURL(GURL("http://www.google.com")); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("http://www.google.com"))); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("http://foo.www.google.com"))); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("http://www.google.com:80"))); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("http://www.google.com:81"))); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches(GURL("https://mail.google.com"))); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("https://www.google.com"))); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = ContentSettingsPattern::FromURL(GURL("http://www.google.com:80")); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("http://www.google.com"))); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("http://www.google.com:80"))); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("http://www.google.com:81"))); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = ContentSettingsPattern::FromURL(GURL("https://www.google.com:443")); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("https://www.google.com"))); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("https://foo.www.google.com"))); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("https://www.google.com:443"))); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches(GURL("https://www.google.com:444"))); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches(GURL("http://www.google.com:443"))); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = ContentSettingsPattern::FromURL(GURL("https://127.0.0.1")); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.IsValid()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("https://127.0.0.1:443", pattern.ToString().c_str()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = ContentSettingsPattern::FromURL(GURL("http://[::1]")); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.IsValid()); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = ContentSettingsPattern::FromURL(GURL("file:///foo/bar.html")); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.IsValid()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("file:///foo/bar.html", pattern.ToString()); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, FilesystemUrls) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern = 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(GURL("http://www.google.com")); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches( 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:http://www.google.com/temporary/"))); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches( 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:http://foo.www.google.com/temporary/"))); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:http://www.google.com:80/temporary/"))); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches( 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:http://www.google.com:81/temporary/"))); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = ContentSettingsPattern::FromURL(GURL("https://www.google.com")); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches( 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:https://www.google.com/temporary/"))); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches( 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:https://www.google.com:443/temporary/"))); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches( 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:https://foo.www.google.com/temporary/"))); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches( 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:https://www.google.com:81/temporary/"))); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A pattern from a filesystem URLs is equivalent to a pattern from the inner 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL of the filesystem URL. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern2 = ContentSettingsPattern::FromURL( 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:https://www.google.com/temporary/")); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::IDENTITY, pattern.Compare(pattern2)); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("https://[*.]www.google.com:443", pattern2.ToString().c_str()); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL( 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:file:///temporary/foo/bar")); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("filesystem:file:///temporary/"))); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("filesystem:file:///temporary/test.txt"))); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("file:///temporary"))); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches(GURL("file://foo/bar"))); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern2 = 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL( 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:file:///persistent/foo2/bar2")); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::IDENTITY, pattern.Compare(pattern2)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, FromURLNoWildcard) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If no port is specifed GURLs always use the default port for the schemes 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HTTP and HTTPS. Hence a GURL always carries a port specification either 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // explicitly or implicitly. Therefore if a content settings pattern is 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // created from a GURL with no wildcard, specific values are used for the 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // scheme, host and port part of the pattern. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating content settings patterns from strings behaves different. Pattern 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // parts that are omitted in pattern specifications (strings), are completed 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with a wildcard. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern = ContentSettingsPattern::FromURLNoWildcard( 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.example.com")); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.IsValid()); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("http://www.example.com:80", pattern.ToString().c_str()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("http://www.example.com"))); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches(GURL("https://www.example.com"))); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches(GURL("http://foo.www.example.com"))); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = ContentSettingsPattern::FromURLNoWildcard( 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("https://www.example.com")); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.IsValid()); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("https://www.example.com:443", pattern.ToString().c_str()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches(GURL("http://www.example.com"))); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("https://www.example.com"))); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches(GURL("http://foo.www.example.com"))); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Pattern for filesystem URLs 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pattern = 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURLNoWildcard( 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:http://www.google.com/temporary/")); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.IsValid()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches(GURL("http://www.google.com"))); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches(GURL("http://foo.www.google.com"))); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(pattern.Matches( 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:http://www.google.com/persistent/"))); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches( 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:https://www.google.com/persistent/"))); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches( 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:https://www.google.com:81/temporary/"))); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(pattern.Matches( 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("filesystem:https://foo.www.google.com/temporary/"))); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, Wildcard) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ContentSettingsPattern::Wildcard().IsValid()); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ContentSettingsPattern::Wildcard().Matches( 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.google.com"))); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ContentSettingsPattern::Wildcard().Matches( 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("https://www.google.com"))); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ContentSettingsPattern::Wildcard().Matches( 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("https://myhost:8080"))); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ContentSettingsPattern::Wildcard().Matches( 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("file:///foo/bar.txt"))); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("*", ContentSettingsPattern::Wildcard().ToString().c_str()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::IDENTITY, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard().Compare( 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard())); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, TrimEndingDotFromHost) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com").IsValid()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com").Matches( 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.example.com"))); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com").Matches( 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.example.com."))); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com.").IsValid()); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("www.example.com", 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("www.example.com.").ToString().c_str()); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com.") == Pattern("www.example.com")); 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(Pattern(".").IsValid()); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_STREQ(".", Pattern(".").ToString().c_str()); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, FromString_WithNoWildcards) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HTTP patterns with default port. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.example.com:80").IsValid()); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("http://www.example.com:80", 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.example.com:80").ToString().c_str()); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HTTP patterns with none default port. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.example.com:81").IsValid()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("http://www.example.com:81", 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.example.com:81").ToString().c_str()); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HTTPS patterns with default port. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("https://www.example.com:443").IsValid()); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("https://www.example.com:443", 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://www.example.com:443").ToString().c_str()); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HTTPS patterns with none default port. 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("https://www.example.com:8080").IsValid()); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("https://www.example.com:8080", 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://www.example.com:8080").ToString().c_str()); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, FromString_FilePatterns) { 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "/" is an invalid file path. 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///").IsValid()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Non-empty domains aren't allowed in file patterns. 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file://foo/").IsValid()); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file://localhost/foo/bar/test.html").IsValid()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file://*").IsValid()); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file://*/").IsValid()); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file://*/*").IsValid()); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file://*/foo/bar/test.html").IsValid()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file://[*.]/").IsValid()); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is the only valid file path wildcard format. 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("file:///*").IsValid()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("file:///*", Pattern("file:///*").ToString()); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wildcards are not allowed anywhere in the file path. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///f*o/bar/file.html").IsValid()); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///*/bar/file.html").IsValid()); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///foo/*").IsValid()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///foo/bar/*").IsValid()); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///foo/*/file.html").IsValid()); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///foo/bar/*.html").IsValid()); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///foo/bar/file.*").IsValid()); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("file:///tmp/test.html").IsValid()); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("file:///tmp/file.html", 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///tmp/file.html").ToString()); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("file:///tmp/test.html").Matches( 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("file:///tmp/test.html"))); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///tmp/test.html").Matches( 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("file:///tmp/other.html"))); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///tmp/test.html").Matches( 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.org/"))); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("file:///*").Matches(GURL("file:///tmp/test.html"))); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("file:///*").Matches( 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("file://localhost/tmp/test.html"))); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, FromString_ExtensionPatterns) { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("chrome-extension://peoadpeiejnhkmpaakpnompolbglelel/") 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .IsValid()); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("chrome-extension://peoadpeiejnhkmpaakpnompolbglelel/", 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("chrome-extension://peoadpeiejnhkmpaakpnompolbglelel/") 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .ToString()); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("chrome-extension://peoadpeiejnhkmpaakpnompolbglelel/") 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Matches(GURL("chrome-extension://peoadpeiejnhkmpaakpnompolbglelel/"))); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, FromString_WithIPAdresses) { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPv4 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("192.168.0.1").IsValid()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("192.168.1.1", Pattern("192.168.1.1").ToString().c_str()); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("https://192.168.0.1:8080").IsValid()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("https://192.168.0.1:8080", 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://192.168.0.1:8080").ToString().c_str()); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Subdomain wildcards should be only valid for hosts, not for IP addresses. 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("[*.]127.0.0.1").IsValid()); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPv6 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[::1]").IsValid()); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("[::1]", Pattern("[::1]").ToString().c_str()); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("https://[::1]:8080").IsValid()); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("https://[::1]:8080", 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://[::1]:8080").ToString().c_str()); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, FromString_WithWildcards) { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creating content settings patterns from strings completes pattern parts 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that are omitted in pattern specifications (strings) with a wildcard. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The wildcard pattern. 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("*").IsValid()); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("*", Pattern("*").ToString().c_str()); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::IDENTITY, 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*").Compare(ContentSettingsPattern::Wildcard())); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Patterns with port wildcard. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://example.com:*").IsValid()); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("http://example.com", 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://example.com:*").ToString().c_str()); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("https://example.com").IsValid()); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("https://example.com", 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://example.com").ToString().c_str()); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("*://www.google.com.com:8080").IsValid()); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("www.google.com:8080", 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://www.google.com:8080").ToString().c_str()); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("*://www.google.com:8080").Matches( 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.google.com:8080"))); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("*://www.google.com:8080").Matches( 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("https://www.google.com:8080"))); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://www.google.com").Matches(GURL("file:///foo/bar.html"))); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com:8080").IsValid()); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Patterns with port and scheme wildcard. 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("*://www.example.com:*").IsValid()); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("www.example.com", 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://www.example.com:*").ToString().c_str()); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("*://www.example.com").IsValid()); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("www.example.com", 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://www.example.com").ToString().c_str()); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com:*").IsValid()); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("www.example.com", 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("www.example.com:*").ToString().c_str()); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com").IsValid()); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("www.example.com", 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("www.example.com").ToString().c_str()); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com").Matches( 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.example.com/"))); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("example.com").Matches( 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.org/"))); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Patterns with domain wildcard. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]example.com").IsValid()); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("[*.]example.com", 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]example.com").ToString().c_str()); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]example.com").Matches( 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.com/"))); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]example.com").Matches( 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://foo.example.com/"))); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("[*.]example.com").Matches( 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.org/"))); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]google.com:80").Matches( 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://mail.google.com:80"))); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("[*.]google.com:80").Matches( 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://mail.google.com:81"))); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]google.com:80").Matches( 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.google.com"))); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]google.com:8080").Matches( 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://mail.google.com:8080"))); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]google.com:443").Matches( 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("https://mail.google.com:443"))); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]google.com:443").Matches( 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("https://www.google.com"))); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]google.com:4321").Matches( 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("https://mail.google.com:4321"))); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]example.com").Matches( 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.com/"))); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]example.com").Matches( 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.example.com/"))); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Patterns with host wildcard 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]").IsValid()); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://*").IsValid()); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://[*.]").IsValid()); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string("http://*"), Pattern("http://[*.]").ToString()); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://*:8080").IsValid()); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("*://*").IsValid()); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("*", Pattern("*://*").ToString().c_str()); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, FromString_Canonicalized) { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UTF-8 patterns. 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]\xC4\x87ira.com").IsValid()); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("[*.]xn--ira-ppa.com", 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]\xC4\x87ira.com").ToString().c_str()); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("\xC4\x87ira.com").IsValid()); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("xn--ira-ppa.com", 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("\xC4\x87ira.com").ToString().c_str()); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("file:///\xC4\x87ira.html").IsValid()); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("file:///%C4%87ira.html", 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///\xC4\x87ira.html").ToString().c_str()); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // File path normalization. 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("file:///tmp/bar/../test.html").IsValid()); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("file:///tmp/test.html", 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///tmp/bar/../test.html").ToString().c_str()); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, InvalidPatterns) { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // StubObserver expects an empty pattern top be returned as empty string. 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(ContentSettingsPattern().IsValid()); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", ContentSettingsPattern().ToString().c_str()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Empty pattern string 423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(Pattern(std::string()).IsValid()); 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_STREQ("", Pattern(std::string()).ToString().c_str()); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pattern strings with invalid scheme part. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("ftp://myhost.org").IsValid()); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("ftp://myhost.org").ToString().c_str()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pattern strings with invalid host part. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("*example.com").IsValid()); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("*example.com").ToString().c_str()); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("example.*").IsValid()); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("example.*").ToString().c_str()); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("*\xC4\x87ira.com").IsValid()); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("*\xC4\x87ira.com").ToString().c_str()); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("\xC4\x87ira.*").IsValid()); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("\xC4\x87ira.*").ToString().c_str()); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pattern strings with invalid port parts. 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("example.com:abc").IsValid()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("example.com:abc").ToString().c_str()); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invalid file pattern strings. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file://").IsValid()); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("file://").ToString().c_str()); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("file:///foo/bar.html:8080").IsValid()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("file:///foo/bar.html:8080").ToString().c_str()); 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Host having multiple ending dots. 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(Pattern("www.example.com..").IsValid()); 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_STREQ("", Pattern("www.example.com..").ToString().c_str()); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, UnequalOperator) { 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.foo.com") != Pattern("http://www.foo.com*")); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.foo.com*") != 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard()); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.foo.com") != 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard()); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.foo.com") != Pattern("www.foo.com")); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.foo.com") != 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.foo.com:80")); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("http://www.foo.com") != Pattern("http://www.foo.com")); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.foo.com") == Pattern("http://www.foo.com")); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, Compare) { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test identical patterns patterns. 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern1 = 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.google.com"); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::IDENTITY, pattern1.Compare(pattern1)); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::IDENTITY, 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.google.com:80").Compare( 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.google.com:80"))); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::IDENTITY, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://[*.]google.com:*").Compare( 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://[*.]google.com:*"))); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern invalid_pattern1; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern invalid_pattern2 = 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString("google.com*"); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compare invalid patterns. 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(!invalid_pattern1.IsValid()); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(!invalid_pattern2.IsValid()); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::IDENTITY, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) invalid_pattern1.Compare(invalid_pattern2)); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(invalid_pattern1 == invalid_pattern2); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compare a pattern with an IPv4 addresse to a pattern with a domain name. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_POST, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.google.com").Compare( 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("127.0.0.1"))); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_PRE, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("127.0.0.1").Compare( 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.google.com"))); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("127.0.0.1") > Pattern("http://www.google.com")); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.google.com") < Pattern("127.0.0.1")); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compare a pattern with an IPv6 address to a patterns with a domain name. 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_POST, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.google.com").Compare( 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[::1]"))); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_PRE, 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[::1]").Compare( 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.google.com"))); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[::1]") > Pattern("http://www.google.com")); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("http://www.google.com") < Pattern("[::1]")); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compare a pattern with an IPv6 addresse to a pattern with an IPv4 addresse. 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_PRE, 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("127.0.0.1").Compare( 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[::1]"))); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_POST, 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[::1]").Compare( 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("127.0.0.1"))); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[::1]") < Pattern("127.0.0.1")); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("127.0.0.1") > Pattern("[::1]")); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_PRE, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.google.com").Compare( 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.youtube.com"))); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_PRE, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://[*.]google.com").Compare( 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://[*.]youtube.com"))); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_POST, 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://[*.]host.com").Compare( 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://[*.]evilhost.com"))); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_POST, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://www.google.com:80").Compare( 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://www.google.com:8080"))); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_PRE, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://www.google.com:80").Compare( 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://www.google.com:80"))); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_PRE, 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://[*.]google.com:90").Compare( 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://mail.google.com:80"))); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_PRE, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://[*.]google.com:80").Compare( 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://mail.google.com:80"))); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::DISJOINT_ORDER_PRE, 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://mail.google.com:*").Compare( 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://mail.google.com:80"))); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test patterns with different precedences. 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::PREDECESSOR, 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("mail.google.com").Compare( 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]google.com"))); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::SUCCESSOR, 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]google.com").Compare( 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("mail.google.com"))); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::PREDECESSOR, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]mail.google.com").Compare( 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]google.com"))); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::SUCCESSOR, 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]google.com").Compare( 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]mail.google.com"))); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::PREDECESSOR, 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("mail.google.com:80").Compare( 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("mail.google.com:*"))); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::SUCCESSOR, 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("mail.google.com:*").Compare( 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("mail.google.com:80"))); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::PREDECESSOR, 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://mail.google.com:*").Compare( 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://mail.google.com:*"))); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::SUCCESSOR, 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://mail.google.com:*").Compare( 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://mail.google.com:*"))); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::PREDECESSOR, 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://mail.google.com:80").Compare( 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://mail.google.com:*"))); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::SUCCESSOR, 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://mail.google.com:*").Compare( 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("*://mail.google.com:80"))); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test the wildcard pattern. 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::IDENTITY, 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard().Compare( 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard())); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::PREDECESSOR, 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]google.com").Compare( 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard())); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::SUCCESSOR, 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard().Compare( 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]google.com"))); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::PREDECESSOR, 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("mail.google.com").Compare( 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard())); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentSettingsPattern::SUCCESSOR, 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard().Compare( 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("mail.google.com"))); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Legacy tests to ensure backwards compatibility. 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, PatternSupport_Legacy) { 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]example.com").IsValid()); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("example.com").IsValid()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("192.168.0.1").IsValid()); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[::1]").IsValid()); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///tmp/test.html").IsValid()); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("*example.com").IsValid()); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("example.*").IsValid()); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("http://example.com").IsValid()); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("https://example.com").IsValid()); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]example.com").Matches( 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.com/"))); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("[*.]example.com").Matches( 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.example.com/"))); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(Pattern("www.example.com").Matches( 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.example.com/"))); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE( 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///tmp/test.html").Matches( 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("file:///tmp/test.html"))); 633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(Pattern(std::string()).Matches(GURL("http://www.example.com/"))); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("[*.]example.com").Matches( 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.org/"))); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(Pattern("example.com").Matches( 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.org/"))); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///tmp/test.html").Matches( 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("file:///tmp/other.html"))); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE( 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///tmp/test.html").Matches( 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://example.org/"))); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ContentSettingsPatternTest, CanonicalizePattern_Legacy) { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Basic patterns. 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("[*.]ikea.com", Pattern("[*.]ikea.com").ToString().c_str()); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("example.com", Pattern("example.com").ToString().c_str()); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("192.168.1.1", Pattern("192.168.1.1").ToString().c_str()); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("[::1]", Pattern("[::1]").ToString().c_str()); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("file:///tmp/file.html", 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///tmp/file.html").ToString().c_str()); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UTF-8 patterns. 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("[*.]xn--ira-ppa.com", 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("[*.]\xC4\x87ira.com").ToString().c_str()); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("xn--ira-ppa.com", 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("\xC4\x87ira.com").ToString().c_str()); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("file:///%C4%87ira.html", 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///\xC4\x87ira.html").ToString().c_str()); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // file:/// normalization. 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("file:///tmp/test.html", 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Pattern("file:///tmp/bar/../test.html").ToString().c_str()); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invalid patterns. 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("*example.com").ToString().c_str()); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("example.*").ToString().c_str()); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("*\xC4\x87ira.com").ToString().c_str()); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", Pattern("\xC4\x87ira.*").ToString().c_str()); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 673