| Index: chrome/browser/browsing_data/origin_filter_builder_unittest.cc
|
| diff --git a/chrome/browser/browsing_data/origin_filter_builder_unittest.cc b/chrome/browser/browsing_data/origin_filter_builder_unittest.cc
|
| index 32fef25dadf3028c49a8e48852343732e3b5e3fd..e0430bb23a422b9796a26bd29fe6eee496d46085 100644
|
| --- a/chrome/browser/browsing_data/origin_filter_builder_unittest.cc
|
| +++ b/chrome/browser/browsing_data/origin_filter_builder_unittest.cc
|
| @@ -9,6 +9,7 @@
|
| #include <vector>
|
|
|
| #include "base/callback.h"
|
| +#include "components/content_settings/core/common/content_settings_pattern.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "url/gurl.h"
|
| #include "url/origin.h"
|
| @@ -17,6 +18,12 @@ namespace url {
|
|
|
| namespace {
|
|
|
| +struct CookieTestCase {
|
| + std::string url;
|
| + std::string cookie_domain;
|
| + bool should_match;
|
| +};
|
| +
|
| struct TestCase {
|
| std::string url;
|
| bool should_match;
|
| @@ -24,12 +31,47 @@ struct TestCase {
|
|
|
| void RunTestCase(
|
| TestCase test_case, const base::Callback<bool(const GURL&)>& filter) {
|
| + GURL url(test_case.url);
|
| + EXPECT_TRUE(url.is_valid()) << test_case.url << " is not valid.";
|
| if (test_case.should_match)
|
| EXPECT_TRUE(filter.Run(GURL(test_case.url)));
|
| else
|
| EXPECT_FALSE(filter.Run(GURL(test_case.url)));
|
| }
|
|
|
| +void RunTestCase(
|
| + TestCase test_case,
|
| + const base::Callback<bool(const ContentSettingsPattern&)>& filter) {
|
| + ContentSettingsPattern pattern =
|
| + ContentSettingsPattern::FromString(test_case.url);
|
| + EXPECT_TRUE(pattern.IsValid()) << test_case.url << " is not valid.";
|
| + if (test_case.should_match)
|
| + EXPECT_TRUE(filter.Run(pattern)) << pattern.ToString() << " should match.";
|
| + else
|
| + EXPECT_FALSE(filter.Run(pattern)) << pattern.ToString()
|
| + << " should not match.";
|
| +}
|
| +
|
| +void RunTestCase(
|
| + CookieTestCase test_case,
|
| + const base::Callback<bool(const net::CanonicalCookie&)>& filter) {
|
| + std::string cookie_line =
|
| + std::string("A=2; Domain=") + test_case.cookie_domain;
|
| + scoped_ptr<net::CanonicalCookie> cookie =
|
| + net::CanonicalCookie::Create(GURL(test_case.url), cookie_line,
|
| + base::Time::Now(), net::CookieOptions());
|
| + EXPECT_TRUE(cookie) << cookie_line << " from " << test_case.url
|
| + << " is not a valid cookie";
|
| + if (cookie) {
|
| + if (test_case.should_match)
|
| + EXPECT_TRUE(filter.Run(*cookie)) << cookie->DebugString()
|
| + << " should match.";
|
| + else
|
| + EXPECT_FALSE(filter.Run(*cookie)) << cookie->DebugString()
|
| + << " should not match.";
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| TEST(OriginFilterBuilderTest, Noop) {
|
| @@ -77,6 +119,54 @@ TEST(OriginFilterBuilderTest, Whitelist) {
|
| RunTestCase(test_case, filter);
|
| }
|
|
|
| +TEST(OriginFilterBuilderTest, WhitelistContentSettings) {
|
| + OriginFilterBuilder builder(OriginFilterBuilder::WHITELIST);
|
| + builder.AddOrigin(Origin(GURL("https://www.google.com")));
|
| + builder.AddOrigin(Origin(GURL("http://www.example.com")));
|
| + base::Callback<bool(const ContentSettingsPattern&)> filter =
|
| + builder.BuildSameOriginContentSettingsFilter();
|
| +
|
| + TestCase test_cases[] = {
|
| + // Whitelist matches any patterns that include the whitelist origins.
|
| + {"https://www.google.com", true},
|
| + {"https://[*.]google.com", true},
|
| + {"https://[*.]google.com:443", true},
|
| + {"[*.]google.com", true},
|
| + {"[*.]google.com/foo/bar", true},
|
| + {"www.google.com/?q=test", true},
|
| + {"http://www.example.com", true},
|
| + {"[*.]example.com:80", true},
|
| + {"http://www.example.com/index.html", true},
|
| + {"http://www.example.com/foo/bar", true},
|
| + {"*", true},
|
| + {"*:80", true},
|
| + {"*:443", true},
|
| +
|
| + // Subdomains are different origins.
|
| + {"https://test.www.google.com", false},
|
| + {"https://google.com", false},
|
| +
|
| + // Different TLDs are different origins.
|
| + {"[*.]google", false},
|
| + {"[*.]google.net", false},
|
| + {"https://[*.]google.org", false},
|
| +
|
| + // Different scheme or port is a different origin.
|
| + {"http://www.google.com", false},
|
| + {"http://[*.].google.com", false},
|
| + {"*:8000", false},
|
| + {"https://www.example.com/index.html", false},
|
| +
|
| + // Different host is a different origin.
|
| + {"https://www.youtube.com", false},
|
| + {"https://www.chromium.org", false},
|
| + {"[*.]youtube", false},
|
| + };
|
| +
|
| + for (TestCase test_case : test_cases)
|
| + RunTestCase(test_case, filter);
|
| +}
|
| +
|
| TEST(OriginFilterBuilderTest, Blacklist) {
|
| OriginFilterBuilder builder(OriginFilterBuilder::BLACKLIST);
|
| builder.AddOrigin(Origin(GURL("https://www.google.com")));
|
| @@ -108,6 +198,112 @@ TEST(OriginFilterBuilderTest, Blacklist) {
|
| RunTestCase(test_case, filter);
|
| }
|
|
|
| +TEST(OriginFilterBuilderTest, BlacklistContentSettings) {
|
| + OriginFilterBuilder builder(OriginFilterBuilder::BLACKLIST);
|
| + builder.AddOrigin(Origin(GURL("https://www.google.com")));
|
| + builder.AddOrigin(Origin(GURL("http://www.example.com")));
|
| + base::Callback<bool(const ContentSettingsPattern&)> filter =
|
| + builder.BuildSameOriginContentSettingsFilter();
|
| +
|
| + TestCase test_cases[] = {
|
| + // Blacklist matches any patterns that don't include the origins.
|
| + {"https://www.google.com", false},
|
| + {"https://[*.]google.com", false},
|
| + {"https://[*.]google.com:443", false},
|
| + {"[*.]google.com", false},
|
| + {"[*.]google.com/foo/bar", false},
|
| + {"www.google.com/?q=test", false},
|
| + {"http://www.example.com", false},
|
| + {"[*.]example.com:80", false},
|
| + {"http://www.example.com/index.html", false},
|
| + {"http://www.example.com/foo/bar", false},
|
| + {"*", false},
|
| + {"*:80", false},
|
| + {"*:443", false},
|
| +
|
| + // Subdomains are different origins.
|
| + {"https://test.www.google.com", true},
|
| + {"https://google.com", true},
|
| +
|
| + // Different TLDs are different origins.
|
| + {"[*.]google", true},
|
| + {"[*.]google.net", true},
|
| + {"https://[*.]google.org", true},
|
| +
|
| + // Different scheme or port is a different origin.
|
| + {"http://www.google.com", true},
|
| + {"http://[*.].google.com", true},
|
| + {"*:8000", true},
|
| + {"https://www.example.com/index.html", true},
|
| +
|
| + // Different host is a different origin.
|
| + {"https://www.youtube.com", true},
|
| + {"https://www.chromium.org", true},
|
| + {"[*.]youtube", true},
|
| + };
|
| +
|
| + for (TestCase test_case : test_cases)
|
| + RunTestCase(test_case, filter);
|
| +}
|
| +
|
| +TEST(OriginFilterBuilderTest, MatchesCookiesWhitelist) {
|
| + OriginFilterBuilder builder(OriginFilterBuilder::WHITELIST);
|
| + builder.AddOrigin(Origin(GURL("https://www.google.com")));
|
| + base::Callback<bool(const net::CanonicalCookie&)> filter =
|
| + builder.BuildDomainCookieFilter();
|
| +
|
| + CookieTestCase test_cases[] = {
|
| + // Any URL on the specified origin is matched.
|
| + {"https://www.google.com", ".google.com", true},
|
| + {"https://mail.google.com", ".google.com", true},
|
| + {"http://google.com", ".google.com", true},
|
| + {"https://www.google.com", "www.google.com", true},
|
| + {"http://www.google.com", "www.google.com", true},
|
| +
|
| + // Different tlds, and subdomains.
|
| + {"https://www.google.org", ".google.org", false},
|
| + {"https://www.google.org", ".google.org", false},
|
| + {"http://mail.google.com", "mail.google.com", false},
|
| + {"https://mail.google.com", "mail.google.com", false},
|
| +
|
| + // Different hosts in general.
|
| + {"https://www.chrome.com", "www.chrome.com", false},
|
| + {"http://youtube.com", ".youtube.com", false},
|
| + };
|
| +
|
| + for (CookieTestCase test_case : test_cases)
|
| + RunTestCase(test_case, filter);
|
| +}
|
| +
|
| +TEST(OriginFilterBuilderTest, MatchesCookiesBlacklist) {
|
| + OriginFilterBuilder builder(OriginFilterBuilder::BLACKLIST);
|
| + builder.AddOrigin(Origin(GURL("https://www.google.com")));
|
| + base::Callback<bool(const net::CanonicalCookie&)> filter =
|
| + builder.BuildDomainCookieFilter();
|
| +
|
| + CookieTestCase test_cases[] = {
|
| + // Any URL on the specified origin is matched.
|
| + {"https://www.google.com", ".google.com", false},
|
| + {"https://mail.google.com", ".google.com", false},
|
| + {"http://google.com", ".google.com", false},
|
| + {"https://www.google.com", "www.google.com", false},
|
| + {"http://www.google.com", "www.google.com", false},
|
| +
|
| + // Different tlds, and subdomains.
|
| + {"https://www.google.org", ".google.org", true},
|
| + {"https://www.google.org", ".google.org", true},
|
| + {"http://mail.google.com", "mail.google.com", true},
|
| + {"https://mail.google.com", "mail.google.com", true},
|
| +
|
| + // Different hosts in general.
|
| + {"https://www.chrome.com", "www.chrome.com", true},
|
| + {"http://youtube.com", ".youtube.com", true},
|
| + };
|
| +
|
| + for (CookieTestCase test_case : test_cases)
|
| + RunTestCase(test_case, filter);
|
| +}
|
| +
|
| TEST(OriginFilterBuilderTest, MatchesURLWithSubdomain) {
|
| OriginFilterBuilder builder(OriginFilterBuilder::WHITELIST);
|
| builder.AddOrigin(Origin(GURL("https://www.google.com")));
|
|
|