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 "base/auto_reset.h" 69ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings_pattern.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/static_cookie_policy.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieSettingsTest : public testing::Test { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CookieSettingsTest() 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : ui_thread_(BrowserThread::UI, &message_loop_), 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) cookie_settings_(CookieSettings::Factory::GetForProfile(&profile_) 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) .get()), 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kBlockedSite("http://ads.thirdparty.com"), 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kAllowedSite("http://good.allays.com"), 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kFirstPartySite("http://cool.things.com"), 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kBlockedFirstPartySite("http://no.thirdparties.com"), 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kExtensionURL("chrome-extension://deadbeef"), 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kHttpsSite("https://example.com"), 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kAllHttpsSitesPattern(ContentSettingsPattern::FromString("https://*")) { 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop message_loop_; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile profile_; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings_; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kBlockedSite; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kAllowedSite; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kFirstPartySite; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kBlockedFirstPartySite; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kExtensionURL; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kHttpsSite; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern kAllHttpsSitesPattern; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesBlockSingle) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kBlockedSite), 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_BLOCK); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kBlockedSite)); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesBlockThirdParty) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kFirstPartySite)); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kBlockedSite)); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kFirstPartySite)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesAllowThirdParty) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kFirstPartySite)); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kFirstPartySite)); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kBlockedSite)); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesExplicitBlockSingleThirdParty) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kBlockedSite), 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_BLOCK); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kFirstPartySite)); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kFirstPartySite)); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesExplicitSessionOnly) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kBlockedSite), 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_SESSION_ONLY); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kFirstPartySite)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kFirstPartySite)); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kBlockedSite)); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_-> 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsReadingCookieAllowed(kBlockedSite, kFirstPartySite)); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_-> 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IsSettingCookieAllowed(kBlockedSite, kFirstPartySite)); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kBlockedSite)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesThirdPartyBlockedExplicitAllow) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kAllowedSite), 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_ALLOW); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite)); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extensions should always be allowed to use cookies. 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kExtensionURL)); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kExtensionURL)); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesThirdPartyBlockedAllSitesAllowed) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kAllowedSite), 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_ALLOW); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As an example for a pattern that matches all hosts but not all origins, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // match all HTTPS sites. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllHttpsSitesPattern, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_ALLOW); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |kAllowedSite| should be allowed. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kBlockedSite)); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kBlockedSite)); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite)); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HTTPS sites should be allowed in a first-party context. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kHttpsSite, kHttpsSite)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kHttpsSite, kHttpsSite)); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // HTTP sites should be allowed, but session-only. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFirstPartySite, kFirstPartySite)); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFirstPartySite, kFirstPartySite)); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsCookieSessionOnly(kFirstPartySite)); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Third-party cookies should be blocked. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFirstPartySite, kBlockedSite)); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFirstPartySite, kBlockedSite)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kHttpsSite, kBlockedSite)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kHttpsSite, kBlockedSite)); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesBlockEverything) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFirstPartySite, kFirstPartySite)); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFirstPartySite, kFirstPartySite)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesBlockEverythingExceptAllowed) { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kAllowedSite), 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_ALLOW); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFirstPartySite, kFirstPartySite)); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kFirstPartySite, kFirstPartySite)); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kAllowedSite)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kAllowedSite)); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite)); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, CookiesBlockSingleFirstParty) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kAllowedSite), 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kFirstPartySite), 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_ALLOW); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kAllowedSite), 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kBlockedFirstPartySite), 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_BLOCK); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite)); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kBlockedFirstPartySite)); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kBlockedFirstPartySite)); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsCookieSessionOnly(kAllowedSite)); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kBlockedFirstPartySite)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kBlockedFirstPartySite)); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->ResetCookieSetting( 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kAllowedSite), 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kFirstPartySite)); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsSettingCookieAllowed( 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kAllowedSite, kFirstPartySite)); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, ExtensionsRegularSettings) { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetCookieSetting( 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURL(kBlockedSite), 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_BLOCK); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Regular cookie settings also apply to extensions. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kExtensionURL)); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, ExtensionsOwnCookies) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings_->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(ENABLE_EXTENSIONS) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Extensions can always use cookies (and site data) in their own origin. 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsReadingCookieAllowed( 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kExtensionURL, kExtensionURL)); 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Except if extensions are disabled. Then the extension-specific checks do 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // not exist and the default setting is to block. 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(cookie_settings_->IsReadingCookieAllowed( 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kExtensionURL, kExtensionURL)); 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CookieSettingsTest, ExtensionsThirdParty) { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // XHRs stemming from extensions are exempt from third-party cookie blocking 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rules (as the first party is always the extension's security origin). 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cookie_settings_->IsSettingCookieAllowed( 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBlockedSite, kExtensionURL)); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 285