| Index: net/cookies/cookie_monster.cc
|
| diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc
|
| index 684a9653a1c00ab724a4e47cc4cc521b0ec4f08e..3b772f7b55ab5800ce514f974a2b29bc13e2d15f 100644
|
| --- a/net/cookies/cookie_monster.cc
|
| +++ b/net/cookies/cookie_monster.cc
|
| @@ -1077,7 +1077,7 @@ bool CookieMonster::SetCookieWithDetails(const GURL& url,
|
| CookieOptions::SameSiteCookieMode::INCLUDE_STRICT_AND_LAX);
|
| if (enforce_strict_secure)
|
| options.set_enforce_strict_secure();
|
| - return SetCanonicalCookie(std::move(cc), options);
|
| + return SetCanonicalCookie(std::move(cc), url, options);
|
| }
|
|
|
| CookieList CookieMonster::GetAllCookies() {
|
| @@ -1395,7 +1395,7 @@ void CookieMonster::StoreLoadedCookies(
|
|
|
| if (creation_times_.insert(cookie_creation_time).second) {
|
| CookieMap::iterator inserted =
|
| - InternalInsertCookie(GetKey((*it)->Domain()), *it, false);
|
| + InternalInsertCookie(GetKey((*it)->Domain()), *it, GURL(), false);
|
| const Time cookie_access_time((*it)->LastAccessDate());
|
| if (earliest_access_time_.is_null() ||
|
| cookie_access_time < earliest_access_time_)
|
| @@ -1612,6 +1612,7 @@ void CookieMonster::FindCookiesForKey(const std::string& key,
|
|
|
| bool CookieMonster::DeleteAnyEquivalentCookie(const std::string& key,
|
| const CanonicalCookie& ecc,
|
| + const GURL& source_url,
|
| bool skip_httponly,
|
| bool already_expired,
|
| bool enforce_strict_secure) {
|
| @@ -1636,7 +1637,7 @@ bool CookieMonster::DeleteAnyEquivalentCookie(const std::string& key,
|
| // ignoring the path attribute.
|
| //
|
| // See: https://tools.ietf.org/html/draft-west-leave-secure-cookies-alone
|
| - if (enforce_strict_secure && !ecc.Source().SchemeIsCryptographic() &&
|
| + if (enforce_strict_secure && !source_url.SchemeIsCryptographic() &&
|
| ecc.IsEquivalentForSecureCookieMatching(*cc) && cc->IsSecure()) {
|
| skipped_secure_cookie = true;
|
| histogram_cookie_delete_equivalent_->Add(
|
| @@ -1677,6 +1678,7 @@ bool CookieMonster::DeleteAnyEquivalentCookie(const std::string& key,
|
| CookieMonster::CookieMap::iterator CookieMonster::InternalInsertCookie(
|
| const std::string& key,
|
| CanonicalCookie* cc,
|
| + const GURL& source_url,
|
| bool sync_to_store) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| @@ -1708,9 +1710,9 @@ CookieMonster::CookieMap::iterator CookieMonster::InternalInsertCookie(
|
| // http:// URLs, but not cookies that are cleared by http:// URLs, to
|
| // understand if the former behavior can be deprecated for Secure
|
| // cookies.
|
| - if (!cc->Source().is_empty()) {
|
| + if (!source_url.is_empty()) {
|
| CookieSource cookie_source_sample;
|
| - if (cc->Source().SchemeIsCryptographic()) {
|
| + if (source_url.SchemeIsCryptographic()) {
|
| cookie_source_sample =
|
| cc->IsSecure() ? COOKIE_SOURCE_SECURE_COOKIE_CRYPTOGRAPHIC_SCHEME
|
| : COOKIE_SOURCE_NONSECURE_COOKIE_CRYPTOGRAPHIC_SCHEME;
|
| @@ -1750,10 +1752,11 @@ bool CookieMonster::SetCookieWithCreationTimeAndOptions(
|
| VLOG(kVlogSetCookies) << "WARNING: Failed to allocate CanonicalCookie";
|
| return false;
|
| }
|
| - return SetCanonicalCookie(std::move(cc), options);
|
| + return SetCanonicalCookie(std::move(cc), url, options);
|
| }
|
|
|
| bool CookieMonster::SetCanonicalCookie(std::unique_ptr<CanonicalCookie> cc,
|
| + const GURL& source_url,
|
| const CookieOptions& options) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| @@ -1761,8 +1764,8 @@ bool CookieMonster::SetCanonicalCookie(std::unique_ptr<CanonicalCookie> cc,
|
| const std::string key(GetKey(cc->Domain()));
|
| bool already_expired = cc->IsExpired(creation_time);
|
|
|
| - if (DeleteAnyEquivalentCookie(key, *cc, options.exclude_httponly(),
|
| - already_expired,
|
| + if (DeleteAnyEquivalentCookie(key, *cc, source_url,
|
| + options.exclude_httponly(), already_expired,
|
| options.enforce_strict_secure())) {
|
| std::string error;
|
| if (options.enforce_strict_secure()) {
|
| @@ -1789,7 +1792,7 @@ bool CookieMonster::SetCanonicalCookie(std::unique_ptr<CanonicalCookie> cc,
|
| (cc->ExpiryDate() - creation_time).InMinutes());
|
| }
|
|
|
| - InternalInsertCookie(key, cc.release(), true);
|
| + InternalInsertCookie(key, cc.release(), source_url, true);
|
| } else {
|
| VLOG(kVlogSetCookies) << "SetCookie() not storing already expired cookie.";
|
| }
|
| @@ -1811,8 +1814,9 @@ bool CookieMonster::SetCanonicalCookies(const CookieList& list) {
|
| options.set_include_httponly();
|
|
|
| for (const auto& cookie : list) {
|
| + // Use an empty GURL. This method does not support setting secure cookies.
|
| if (!SetCanonicalCookie(base::WrapUnique(new CanonicalCookie(cookie)),
|
| - options)) {
|
| + GURL(), options)) {
|
| return false;
|
| }
|
| }
|
|
|