diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/content_settings/cookie_settings.cc | 4 | ||||
-rw-r--r-- | chrome/browser/content_settings/cookie_settings_unittest.cc | 226 | ||||
-rw-r--r-- | chrome/common/content_settings_pattern.cc | 4 | ||||
-rw-r--r-- | chrome/common/content_settings_pattern.h | 3 |
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; |