Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Unified Diff: components/content_settings/core/browser/cookie_settings.cc

Issue 2502743003: Allow getting both reading/setting cookie settings at one time (Closed)
Patch Set: rdevlin review Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/content_settings/core/browser/cookie_settings.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/content_settings/core/browser/cookie_settings.cc
diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc
index b5db52bd2581bba29c2a8b508f794ab8f945db67..9f616f4bbc989f7a812eff45c92bb73c993e5cb1 100644
--- a/components/content_settings/core/browser/cookie_settings.cc
+++ b/components/content_settings/core/browser/cookie_settings.cc
@@ -58,18 +58,36 @@ ContentSetting CookieSettings::GetDefaultCookieSetting(
bool CookieSettings::IsReadingCookieAllowed(const GURL& url,
const GURL& first_party_url) const {
- ContentSetting setting = GetCookieSetting(url, first_party_url, false, NULL);
- return IsAllowed(setting);
+ ContentSetting reading_setting;
+ GetCookieSetting(url, first_party_url, nullptr, &reading_setting,
+ nullptr /* setting_cookie */);
+ return IsAllowed(reading_setting);
}
bool CookieSettings::IsSettingCookieAllowed(const GURL& url,
const GURL& first_party_url) const {
- ContentSetting setting = GetCookieSetting(url, first_party_url, true, NULL);
- return IsAllowed(setting);
+ ContentSetting setting_setting;
+ GetCookieSetting(url, first_party_url, nullptr, nullptr /* reading_cookie */,
+ &setting_setting);
+ return IsAllowed(setting_setting);
+}
+
+void CookieSettings::GetReadingAndSettingCookieAllowed(
+ const GURL& url,
+ const GURL& first_party_url,
+ bool* reading_cookie_allowed,
+ bool* setting_cookie_allowed) const {
+ ContentSetting reading_setting;
+ ContentSetting setting_setting;
+ GetCookieSetting(url, first_party_url, nullptr, &reading_setting,
+ &setting_setting);
+ *reading_cookie_allowed = IsAllowed(reading_setting);
+ *setting_cookie_allowed = IsAllowed(setting_setting);
}
bool CookieSettings::IsCookieSessionOnly(const GURL& origin) const {
- ContentSetting setting = GetCookieSetting(origin, origin, true, NULL);
+ ContentSetting setting;
+ GetCookieSetting(origin, origin, nullptr, nullptr, &setting);
DCHECK(IsValidSetting(setting));
return (setting == CONTENT_SETTING_SESSION_ONLY);
}
@@ -122,18 +140,29 @@ void CookieSettings::ShutdownOnUIThread() {
pref_change_registrar_.RemoveAll();
}
-ContentSetting CookieSettings::GetCookieSetting(const GURL& url,
- const GURL& first_party_url,
- bool setting_cookie,
- SettingSource* source) const {
+void CookieSettings::GetCookieSetting(const GURL& url,
+ const GURL& first_party_url,
+ content_settings::SettingSource* source,
+ ContentSetting* reading_cookie,
+ ContentSetting* setting_cookie) const {
// Auto-allow in extensions or for WebUI embedded in a secure origin.
- if (url.SchemeIsCryptographic() && first_party_url.SchemeIs(kChromeUIScheme))
- return CONTENT_SETTING_ALLOW;
+ if (first_party_url.SchemeIs(kChromeUIScheme) &&
+ url.SchemeIsCryptographic()) {
+ if (reading_cookie)
+ *reading_cookie = CONTENT_SETTING_ALLOW;
+ if (setting_cookie)
+ *setting_cookie = CONTENT_SETTING_ALLOW;
+ return;
+ }
#if BUILDFLAG(ENABLE_EXTENSIONS)
- if (url.SchemeIs(kExtensionScheme) &&
- first_party_url.SchemeIs(kExtensionScheme)) {
- return CONTENT_SETTING_ALLOW;
+ if (url.SchemeIs(extension_scheme_) &&
+ first_party_url.SchemeIs(extension_scheme_)) {
+ if (reading_cookie)
+ *reading_cookie = CONTENT_SETTING_ALLOW;
+ if (setting_cookie)
+ *setting_cookie = CONTENT_SETTING_ALLOW;
+ return;
}
#endif
@@ -147,26 +176,27 @@ ContentSetting CookieSettings::GetCookieSetting(const GURL& url,
*source = info.source;
// If no explicit exception has been made and third-party cookies are blocked
- // by default, apply that rule.
- if (info.primary_pattern.MatchesAllHosts() &&
- info.secondary_pattern.MatchesAllHosts() &&
- ShouldBlockThirdPartyCookies() &&
- !first_party_url.SchemeIs(extension_scheme_)) {
- net::StaticCookiePolicy policy(
- net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES);
- int rv;
- if (setting_cookie)
- rv = policy.CanSetCookie(url, first_party_url);
- else
- rv = policy.CanGetCookies(url, first_party_url);
- DCHECK_NE(net::ERR_IO_PENDING, rv);
- if (rv != net::OK)
- return CONTENT_SETTING_BLOCK;
- }
+ // by default, apply CONTENT_SETTING_BLOCKED.
+ bool block_third = info.primary_pattern.MatchesAllHosts() &&
+ info.secondary_pattern.MatchesAllHosts() &&
+ ShouldBlockThirdPartyCookies() &&
+ !first_party_url.SchemeIs(extension_scheme_);
+ net::StaticCookiePolicy policy(
+ net::StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES);
// We should always have a value, at least from the default provider.
DCHECK(value.get());
- return ValueToContentSetting(value.get());
+ ContentSetting setting = ValueToContentSetting(value.get());
+ if (reading_cookie) {
+ bool block =
+ block_third && policy.CanGetCookies(url, first_party_url) != net::OK;
+ *reading_cookie = block ? CONTENT_SETTING_BLOCK : setting;
+ }
+ if (setting_cookie) {
+ bool block =
+ block_third && policy.CanSetCookie(url, first_party_url) != net::OK;
+ *setting_cookie = block ? CONTENT_SETTING_BLOCK : setting;
+ }
}
CookieSettings::~CookieSettings() {
« no previous file with comments | « components/content_settings/core/browser/cookie_settings.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698