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 "chrome/browser/content_settings/cookie_settings.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_utils.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings_pattern.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_dependency_manager.h" 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_keyed_service.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/constants.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/static_cookie_policy.h" 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::UserMetricsAction; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsValidSetting(ContentSetting setting) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (setting == CONTENT_SETTING_ALLOW || 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting == CONTENT_SETTING_SESSION_ONLY || 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting == CONTENT_SETTING_BLOCK); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsAllowed(ContentSetting setting) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(IsValidSetting(setting)); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (setting == CONTENT_SETTING_ALLOW || 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting == CONTENT_SETTING_SESSION_ONLY); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<CookieSettings> CookieSettings::Factory::GetForProfile( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<CookieSettings*>( 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetInstance()->GetServiceForBrowserContext(profile, true).get()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CookieSettings::Factory* CookieSettings::Factory::GetInstance() { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Singleton<CookieSettings::Factory>::get(); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CookieSettings::Factory::Factory() 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : RefcountedBrowserContextKeyedServiceFactory( 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "CookieSettings", 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserContextDependencyManager::GetInstance()) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CookieSettings::Factory::~Factory() {} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid CookieSettings::Factory::RegisterProfilePrefs( 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kBlockThirdPartyCookies, 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)content::BrowserContext* CookieSettings::Factory::GetBrowserContextToUse( 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) const { 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return chrome::GetBrowserContextRedirectedInIncognito(context); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)scoped_refptr<RefcountedBrowserContextKeyedService> 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)CookieSettings::Factory::BuildServiceInstanceFor( 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* context) const { 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile = static_cast<Profile*>(context); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new CookieSettings(profile->GetHostContentSettingsMap(), 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetPrefs()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CookieSettings::CookieSettings( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* host_content_settings_map, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : host_content_settings_map_(host_content_settings_map), 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block_third_party_cookies_( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs->GetBoolean(prefs::kBlockThirdPartyCookies)) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (block_third_party_cookies_) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("ThirdPartyCookieBlockingEnabled")); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserMetricsAction("ThirdPartyCookieBlockingDisabled")); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_change_registrar_.Init(prefs); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pref_change_registrar_.Add( 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kBlockThirdPartyCookies, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&CookieSettings::OnBlockThirdPartyCookiesChanged, 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSetting 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CookieSettings::GetDefaultCookieSetting(std::string* provider_id) const { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host_content_settings_map_->GetDefaultContentSetting( 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, provider_id); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CookieSettings::IsReadingCookieAllowed(const GURL& url, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_url) const { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = GetCookieSetting(url, first_party_url, false, NULL); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return IsAllowed(setting); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CookieSettings::IsSettingCookieAllowed(const GURL& url, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_url) const { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = GetCookieSetting(url, first_party_url, true, NULL); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return IsAllowed(setting); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CookieSettings::IsCookieSessionOnly(const GURL& origin) const { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = GetCookieSetting(origin, origin, true, NULL); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(IsValidSetting(setting)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (setting == CONTENT_SETTING_SESSION_ONLY); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CookieSettings::GetCookieSettings( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsForOneType* settings) const { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return host_content_settings_map_->GetSettingsForOneType( 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, std::string(), settings); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CookieSettings::SetDefaultCookieSetting(ContentSetting setting) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(IsValidSetting(setting)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_content_settings_map_->SetDefaultContentSetting( 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, setting); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CookieSettings::SetCookieSetting( 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& primary_pattern, 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& secondary_pattern, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting) { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(IsValidSetting(setting)); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (setting == CONTENT_SETTING_SESSION_ONLY) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(secondary_pattern == ContentSettingsPattern::Wildcard()); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host_content_settings_map_->SetContentSetting(primary_pattern, 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) secondary_pattern, 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) setting); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CookieSettings::ResetCookieSetting( 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& primary_pattern, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsPattern& secondary_pattern) { 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host_content_settings_map_->SetContentSetting(primary_pattern, 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) secondary_pattern, 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTING_DEFAULT); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CookieSettings::ShutdownOnUIThread() { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_change_registrar_.RemoveAll(); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSetting CookieSettings::GetCookieSetting( 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& first_party_url, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool setting_cookie, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings::SettingSource* source) const { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (HostContentSettingsMap::ShouldAllowAllContent( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, first_party_url, CONTENT_SETTINGS_TYPE_COOKIES)) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CONTENT_SETTING_ALLOW; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First get any host-specific settings. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings::SettingInfo info; 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<base::Value> value(host_content_settings_map_->GetWebsiteSetting( 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) url, 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) first_party_url, 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CONTENT_SETTINGS_TYPE_COOKIES, 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &info)); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (source) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *source = info.source; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If no explicit exception has been made and third-party cookies are blocked 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // by default, apply that rule. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (info.primary_pattern.MatchesAllHosts() && 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.secondary_pattern.MatchesAllHosts() && 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShouldBlockThirdPartyCookies() && 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !first_party_url.SchemeIs(extensions::kExtensionScheme)) { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool not_strict = CommandLine::ForCurrentProcess()->HasSwitch( 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switches::kOnlyBlockSettingThirdPartyCookies); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::StaticCookiePolicy policy(not_strict ? 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::StaticCookiePolicy::BLOCK_SETTING_THIRD_PARTY_COOKIES : 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rv; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (setting_cookie) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rv = policy.CanSetCookie(url, first_party_url); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rv = policy.CanGetCookies(url, first_party_url); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(net::ERR_IO_PENDING, rv); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rv != net::OK) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CONTENT_SETTING_BLOCK; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should always have a value, at least from the default provider. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(value.get()); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content_settings::ValueToContentSetting(value.get()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CookieSettings::~CookieSettings() {} 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CookieSettings::OnBlockThirdPartyCookiesChanged() { 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::AutoLock auto_lock(lock_); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) block_third_party_cookies_ = pref_change_registrar_.prefs()->GetBoolean( 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs::kBlockThirdPartyCookies); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CookieSettings::ShouldBlockThirdPartyCookies() const { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::AutoLock auto_lock(lock_); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return block_third_party_cookies_; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 237