summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/content_settings/cookie_settings.cc4
-rw-r--r--chrome/browser/content_settings/cookie_settings_unittest.cc226
-rw-r--r--chrome/common/content_settings_pattern.cc4
-rw-r--r--chrome/common/content_settings_pattern.h3
4 files changed, 131 insertions, 106 deletions
diff --git a/chrome/browser/content_settings/cookie_settings.cc b/chrome/browser/content_settings/cookie_settings.cc
index ff27e34..fb2eb4f 100644
--- a/chrome/browser/content_settings/cookie_settings.cc
+++ b/chrome/browser/content_settings/cookie_settings.cc
@@ -200,8 +200,8 @@ ContentSetting CookieSettings::GetCookieSetting(
// If no explicit exception has been made and third-party cookies are blocked
// by default, apply that rule.
- if (info.primary_pattern == ContentSettingsPattern::Wildcard() &&
- info.secondary_pattern == ContentSettingsPattern::Wildcard() &&
+ if (info.primary_pattern.MatchesAllHosts() &&
+ info.secondary_pattern.MatchesAllHosts() &&
ShouldBlockThirdPartyCookies() &&
!first_party_url.SchemeIs(chrome::kExtensionScheme)) {
bool not_strict = CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/chrome/browser/content_settings/cookie_settings_unittest.cc b/chrome/browser/content_settings/cookie_settings_unittest.cc
index 23572add..b638f61 100644
--- a/chrome/browser/content_settings/cookie_settings_unittest.cc
+++ b/chrome/browser/content_settings/cookie_settings_unittest.cc
@@ -24,251 +24,269 @@ class CookieSettingsTest : public testing::Test {
public:
CookieSettingsTest() :
ui_thread_(BrowserThread::UI, &message_loop_),
+ cookie_settings_(CookieSettings::Factory::GetForProfile(&profile_)),
kBlockedSite("http://ads.thirdparty.com"),
kAllowedSite("http://good.allays.com"),
kFirstPartySite("http://cool.things.com"),
kBlockedFirstPartySite("http://no.thirdparties.com"),
- kExtensionURL("chrome-extension://deadbeef") {}
+ kExtensionURL("chrome-extension://deadbeef"),
+ kHttpsSite("https://example.com"),
+ kAllHttpsSitesPattern(ContentSettingsPattern::FromString("https://*")) {
+}
protected:
MessageLoop message_loop_;
content::TestBrowserThread ui_thread_;
+ TestingProfile profile_;
+ CookieSettings* cookie_settings_;
const GURL kBlockedSite;
const GURL kAllowedSite;
const GURL kFirstPartySite;
const GURL kBlockedFirstPartySite;
const GURL kExtensionURL;
+ const GURL kHttpsSite;
+ ContentSettingsPattern kAllHttpsSitesPattern;
};
TEST_F(CookieSettingsTest, CookiesBlockSingle) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- cookie_settings->SetCookieSetting(
+ cookie_settings_->SetCookieSetting(
ContentSettingsPattern::FromURL(kBlockedSite),
ContentSettingsPattern::Wildcard(),
CONTENT_SETTING_BLOCK);
- EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
kBlockedSite, kBlockedSite));
}
TEST_F(CookieSettingsTest, CookiesBlockThirdParty) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- profile.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
- EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed(
+ profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
kBlockedSite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsCookieSessionOnly(kBlockedSite));
- EXPECT_FALSE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kBlockedSite));
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
kBlockedSite, kFirstPartySite));
CommandLine* cmd = CommandLine::ForCurrentProcess();
AutoReset<CommandLine> auto_reset(cmd, *cmd);
cmd->AppendSwitch(switches::kOnlyBlockSettingThirdPartyCookies);
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kBlockedSite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
kBlockedSite, kFirstPartySite));
}
TEST_F(CookieSettingsTest, CookiesAllowThirdParty) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kBlockedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kBlockedSite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsCookieSessionOnly(kBlockedSite));
+ EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kBlockedSite));
}
TEST_F(CookieSettingsTest, CookiesExplicitBlockSingleThirdParty) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- cookie_settings->SetCookieSetting(
+ cookie_settings_->SetCookieSetting(
ContentSettingsPattern::FromURL(kBlockedSite),
ContentSettingsPattern::Wildcard(),
CONTENT_SETTING_BLOCK);
- EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
kBlockedSite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
kBlockedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kFirstPartySite));
}
TEST_F(CookieSettingsTest, CookiesExplicitSessionOnly) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- cookie_settings->SetCookieSetting(
+ cookie_settings_->SetCookieSetting(
ContentSettingsPattern::FromURL(kBlockedSite),
ContentSettingsPattern::Wildcard(),
CONTENT_SETTING_SESSION_ONLY);
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kBlockedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kBlockedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsCookieSessionOnly(kBlockedSite));
+ EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kBlockedSite));
- profile.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
- EXPECT_TRUE(cookie_settings->
+ profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
+ EXPECT_TRUE(cookie_settings_->
IsReadingCookieAllowed(kBlockedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->
+ EXPECT_TRUE(cookie_settings_->
IsSettingCookieAllowed(kBlockedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsCookieSessionOnly(kBlockedSite));
+ EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kBlockedSite));
}
TEST_F(CookieSettingsTest, CookiesThirdPartyBlockedExplicitAllow) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- cookie_settings->SetCookieSetting(
+ cookie_settings_->SetCookieSetting(
ContentSettingsPattern::FromURL(kAllowedSite),
ContentSettingsPattern::Wildcard(),
CONTENT_SETTING_ALLOW);
- profile.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsCookieSessionOnly(kAllowedSite));
+ EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
// Extensions should always be allowed to use cookies.
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kExtensionURL));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kExtensionURL));
// Extensions should always be allowed to use cookies.
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kExtensionURL));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kExtensionURL));
}
+TEST_F(CookieSettingsTest, CookiesThirdPartyBlockedAllSitesAllowed) {
+ cookie_settings_->SetCookieSetting(
+ ContentSettingsPattern::FromURL(kAllowedSite),
+ ContentSettingsPattern::Wildcard(),
+ CONTENT_SETTING_ALLOW);
+ profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
+ // As an example for a pattern that matches all hosts but not all origins,
+ // match all HTTPS sites.
+ cookie_settings_->SetCookieSetting(
+ kAllHttpsSitesPattern,
+ ContentSettingsPattern::Wildcard(),
+ CONTENT_SETTING_ALLOW);
+ cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY);
+
+ // |kAllowedSite| should be allowed.
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
+ kAllowedSite, kBlockedSite));
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
+ kAllowedSite, kBlockedSite));
+ EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
+
+ // HTTPS sites should be allowed in a first-party context.
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
+ kHttpsSite, kHttpsSite));
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
+ kHttpsSite, kHttpsSite));
+ EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
+
+ // HTTP sites should be allowed, but session-only.
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
+ kFirstPartySite, kFirstPartySite));
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
+ kFirstPartySite, kFirstPartySite));
+ EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kFirstPartySite));
+
+ // Third-party cookies should be blocked.
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
+ kFirstPartySite, kBlockedSite));
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
+ kFirstPartySite, kBlockedSite));
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
+ kHttpsSite, kBlockedSite));
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
+ kHttpsSite, kBlockedSite));
+}
+
TEST_F(CookieSettingsTest, CookiesBlockEverything) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- cookie_settings->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
+ cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
- EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
kFirstPartySite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
kFirstPartySite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kFirstPartySite));
}
TEST_F(CookieSettingsTest, CookiesBlockEverythingExceptAllowed) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- cookie_settings->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
- cookie_settings->SetCookieSetting(
+ cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
+ cookie_settings_->SetCookieSetting(
ContentSettingsPattern::FromURL(kAllowedSite),
ContentSettingsPattern::Wildcard(),
CONTENT_SETTING_ALLOW);
- EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
kFirstPartySite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
kFirstPartySite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kAllowedSite));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kAllowedSite));
- EXPECT_FALSE(cookie_settings->IsCookieSessionOnly(kAllowedSite));
+ EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
}
TEST_F(CookieSettingsTest, CookiesBlockSingleFirstParty) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- cookie_settings->SetCookieSetting(
+ cookie_settings_->SetCookieSetting(
ContentSettingsPattern::FromURL(kAllowedSite),
ContentSettingsPattern::FromURL(kFirstPartySite),
CONTENT_SETTING_ALLOW);
- cookie_settings->SetCookieSetting(
+ cookie_settings_->SetCookieSetting(
ContentSettingsPattern::FromURL(kAllowedSite),
ContentSettingsPattern::FromURL(kBlockedFirstPartySite),
CONTENT_SETTING_BLOCK);
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsCookieSessionOnly(kAllowedSite));
+ EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
- EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kBlockedFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kBlockedFirstPartySite));
- cookie_settings->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
+ cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kFirstPartySite));
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsCookieSessionOnly(kAllowedSite));
+ EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite));
- EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kBlockedFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kBlockedFirstPartySite));
- cookie_settings->ResetCookieSetting(
+ cookie_settings_->ResetCookieSetting(
ContentSettingsPattern::FromURL(kAllowedSite),
ContentSettingsPattern::FromURL(kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
kAllowedSite, kFirstPartySite));
- EXPECT_FALSE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed(
kAllowedSite, kFirstPartySite));
}
TEST_F(CookieSettingsTest, ExtensionsRegularSettings) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- cookie_settings->SetCookieSetting(
+ cookie_settings_->SetCookieSetting(
ContentSettingsPattern::FromURL(kBlockedSite),
ContentSettingsPattern::Wildcard(),
CONTENT_SETTING_BLOCK);
// Regular cookie settings also apply to extensions.
- EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed(
kBlockedSite, kExtensionURL));
}
TEST_F(CookieSettingsTest, ExtensionsOwnCookies) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- cookie_settings->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
+ cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK);
// Extensions can always use cookies (and site data) in their own origin.
- EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed(
kExtensionURL, kExtensionURL));
}
TEST_F(CookieSettingsTest, ExtensionsThirdParty) {
- TestingProfile profile;
- CookieSettings* cookie_settings =
- CookieSettings::Factory::GetForProfile(&profile);
- profile.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
+ profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true);
// XHRs stemming from extensions are exempt from third-party cookie blocking
// rules (as the first party is always the extension's security origin).
- EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed(
+ EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed(
kBlockedSite, kExtensionURL));
}
diff --git a/chrome/common/content_settings_pattern.cc b/chrome/common/content_settings_pattern.cc
index dbe70af..f5aa898 100644
--- a/chrome/common/content_settings_pattern.cc
+++ b/chrome/common/content_settings_pattern.cc
@@ -478,6 +478,10 @@ bool ContentSettingsPattern::Matches(
return true;
}
+bool ContentSettingsPattern::MatchesAllHosts() const {
+ return parts_.has_domain_wildcard && parts_.host.empty();
+}
+
const std::string ContentSettingsPattern::ToString() const {
if (IsValid())
return content_settings::PatternParser::ToString(parts_);
diff --git a/chrome/common/content_settings_pattern.h b/chrome/common/content_settings_pattern.h
index 858d210..13b75e9 100644
--- a/chrome/common/content_settings_pattern.h
+++ b/chrome/common/content_settings_pattern.h
@@ -177,6 +177,9 @@ class ContentSettingsPattern {
// True if |url| matches this pattern.
bool Matches(const GURL& url) const;
+ // True if this pattern matches all hosts (i.e. it has a host wildcard).
+ bool MatchesAllHosts() const;
+
// Returns a std::string representation of this pattern.
const std::string ToString() const;