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