diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/cookies/canonical_cookie.cc | 16 | ||||
-rw-r--r-- | net/cookies/canonical_cookie.h | 8 | ||||
-rw-r--r-- | net/cookies/canonical_cookie_unittest.cc | 95 | ||||
-rw-r--r-- | net/cookies/cookie_constants.cc | 17 | ||||
-rw-r--r-- | net/cookies/cookie_constants.h | 16 | ||||
-rw-r--r-- | net/cookies/cookie_monster.cc | 12 | ||||
-rw-r--r-- | net/cookies/cookie_monster.h | 4 | ||||
-rw-r--r-- | net/cookies/cookie_monster_store_test.cc | 6 | ||||
-rw-r--r-- | net/cookies/cookie_monster_unittest.cc | 226 | ||||
-rw-r--r-- | net/cookies/cookie_store.h | 2 | ||||
-rw-r--r-- | net/cookies/cookie_store_test_helpers.cc | 2 | ||||
-rw-r--r-- | net/cookies/cookie_store_test_helpers.h | 2 | ||||
-rw-r--r-- | net/cookies/cookie_store_unittest.h | 34 | ||||
-rw-r--r-- | net/cookies/parsed_cookie.cc | 13 | ||||
-rw-r--r-- | net/cookies/parsed_cookie.h | 4 | ||||
-rw-r--r-- | net/cookies/parsed_cookie_unittest.cc | 59 | ||||
-rw-r--r-- | net/extras/sqlite/sqlite_persistent_cookie_store.cc | 46 | ||||
-rw-r--r-- | net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc | 3 | ||||
-rw-r--r-- | net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc | 102 | ||||
-rw-r--r-- | net/url_request/url_request_unittest.cc | 2 |
20 files changed, 416 insertions, 253 deletions
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc index 0a5e794..5647a22 100644 --- a/net/cookies/canonical_cookie.cc +++ b/net/cookies/canonical_cookie.cc @@ -134,7 +134,7 @@ CanonicalCookie::CanonicalCookie(const GURL& url, const base::Time& last_access, bool secure, bool httponly, - bool same_site, + CookieSameSite same_site, CookiePriority priority) : source_(url.SchemeIsFile() ? url : url.GetOrigin()), name_(name), @@ -158,7 +158,7 @@ CanonicalCookie::CanonicalCookie(const GURL& url, const ParsedCookie& pc) last_access_date_(Time()), secure_(pc.IsSecure()), httponly_(pc.IsHttpOnly()), - same_site_(pc.IsSameSite()), + same_site_(pc.SameSite()), priority_(pc.Priority()) { if (pc.HasExpires()) expiry_date_ = CanonExpiration(pc, creation_date_, creation_date_); @@ -277,7 +277,7 @@ scoped_ptr<CanonicalCookie> CanonicalCookie::Create( url, parsed_cookie.Name(), parsed_cookie.Value(), cookie_domain, cookie_path, creation_time, cookie_expires, creation_time, parsed_cookie.IsSecure(), parsed_cookie.IsHttpOnly(), - parsed_cookie.IsSameSite(), parsed_cookie.Priority())); + parsed_cookie.SameSite(), parsed_cookie.Priority())); } // static @@ -291,7 +291,7 @@ scoped_ptr<CanonicalCookie> CanonicalCookie::Create( const base::Time& expiration, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority) { // Expect valid attribute tokens and values, as defined by the ParsedCookie @@ -422,8 +422,14 @@ bool CanonicalCookie::IncludeForRequestURL(const GURL& url, if (!IsOnPath(url.path())) return false; // Don't include same-site cookies for cross-site requests. - if (IsSameSite() && !options.include_same_site()) + // + // TODO(mkwst): This currently treats both "strict" and "lax" SameSite cookies + // in the same way. https://codereview.chromium.org/1783813002 will eventually + // distinguish between them based on attributes of the request. + if (SameSite() != CookieSameSite::NO_RESTRICTION && + !options.include_same_site()) { return false; + } return true; } diff --git a/net/cookies/canonical_cookie.h b/net/cookies/canonical_cookie.h index 6f43d9e..e14cf2e 100644 --- a/net/cookies/canonical_cookie.h +++ b/net/cookies/canonical_cookie.h @@ -38,7 +38,7 @@ class NET_EXPORT CanonicalCookie { const base::Time& last_access, bool secure, bool httponly, - bool same_site, + CookieSameSite same_site, CookiePriority priority); // This constructor does canonicalization but not validation. @@ -72,7 +72,7 @@ class NET_EXPORT CanonicalCookie { const base::Time& expiration, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority); @@ -87,7 +87,7 @@ class NET_EXPORT CanonicalCookie { const base::Time& ExpiryDate() const { return expiry_date_; } bool IsSecure() const { return secure_; } bool IsHttpOnly() const { return httponly_; } - bool IsSameSite() const { return same_site_; } + CookieSameSite SameSite() const { return same_site_; } CookiePriority Priority() const { return priority_; } bool IsDomainCookie() const { return !domain_.empty() && domain_[0] == '.'; } @@ -206,7 +206,7 @@ class NET_EXPORT CanonicalCookie { base::Time last_access_date_; bool secure_; bool httponly_; - bool same_site_; + CookieSameSite same_site_; CookiePriority priority_; }; diff --git a/net/cookies/canonical_cookie_unittest.cc b/net/cookies/canonical_cookie_unittest.cc index e5ad68c..11a20df8 100644 --- a/net/cookies/canonical_cookie_unittest.cc +++ b/net/cookies/canonical_cookie_unittest.cc @@ -19,7 +19,7 @@ TEST(CanonicalCookieTest, Constructor) { CanonicalCookie cookie(url, "A", "2", "www.example.com", "/test", current_time, base::Time(), current_time, false, false, - false, COOKIE_PRIORITY_DEFAULT); + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); EXPECT_EQ(url.GetOrigin(), cookie.Source()); EXPECT_EQ("A", cookie.Name()); EXPECT_EQ("2", cookie.Value()); @@ -27,11 +27,12 @@ TEST(CanonicalCookieTest, Constructor) { EXPECT_EQ("/test", cookie.Path()); EXPECT_FALSE(cookie.IsSecure()); EXPECT_FALSE(cookie.IsHttpOnly()); - EXPECT_FALSE(cookie.IsSameSite()); + EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie.SameSite()); CanonicalCookie cookie2(url, "A", "2", std::string(), std::string(), current_time, base::Time(), current_time, false, - false, false, COOKIE_PRIORITY_DEFAULT); + false, CookieSameSite::DEFAULT_MODE, + COOKIE_PRIORITY_DEFAULT); EXPECT_EQ(url.GetOrigin(), cookie.Source()); EXPECT_EQ("A", cookie2.Name()); EXPECT_EQ("2", cookie2.Value()); @@ -39,7 +40,7 @@ TEST(CanonicalCookieTest, Constructor) { EXPECT_EQ("", cookie2.Path()); EXPECT_FALSE(cookie2.IsSecure()); EXPECT_FALSE(cookie2.IsHttpOnly()); - EXPECT_FALSE(cookie2.IsSameSite()); + EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie2.SameSite()); } TEST(CanonicalCookieTest, Create) { @@ -82,19 +83,28 @@ TEST(CanonicalCookieTest, Create) { httponly_options); EXPECT_TRUE(cookie->IsHttpOnly()); - // Test creating http only cookies. + // Test creating SameSite cookies. CookieOptions same_site_options; same_site_options.set_include_same_site(); + cookie = CanonicalCookie::Create(url, "A=2; SameSite=Strict", creation_time, + same_site_options); + EXPECT_TRUE(cookie.get()); + EXPECT_EQ(CookieSameSite::STRICT_MODE, cookie->SameSite()); + cookie = CanonicalCookie::Create(url, "A=2; SameSite=Lax", creation_time, + same_site_options); + EXPECT_TRUE(cookie.get()); + EXPECT_EQ(CookieSameSite::LAX_MODE, cookie->SameSite()); cookie = CanonicalCookie::Create(url, "A=2; SameSite", creation_time, same_site_options); EXPECT_TRUE(cookie.get()); - EXPECT_TRUE(cookie->IsSameSite()); + EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie->SameSite()); // Test the creating cookies using specific parameter instead of a cookie // string. cookie = CanonicalCookie::Create(url, "A", "2", "www.example.com", "/test", creation_time, base::Time(), false, false, - false, false, COOKIE_PRIORITY_DEFAULT); + CookieSameSite::DEFAULT_MODE, false, + COOKIE_PRIORITY_DEFAULT); EXPECT_EQ(url.GetOrigin(), cookie->Source()); EXPECT_EQ("A", cookie->Name()); EXPECT_EQ("2", cookie->Value()); @@ -102,11 +112,12 @@ TEST(CanonicalCookieTest, Create) { EXPECT_EQ("/test", cookie->Path()); EXPECT_FALSE(cookie->IsSecure()); EXPECT_FALSE(cookie->IsHttpOnly()); - EXPECT_FALSE(cookie->IsSameSite()); + EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie->SameSite()); cookie = CanonicalCookie::Create(url, "A", "2", ".www.example.com", "/test", creation_time, base::Time(), false, false, - false, false, COOKIE_PRIORITY_DEFAULT); + CookieSameSite::DEFAULT_MODE, false, + COOKIE_PRIORITY_DEFAULT); EXPECT_EQ(url.GetOrigin(), cookie->Source()); EXPECT_EQ("A", cookie->Name()); EXPECT_EQ("2", cookie->Value()); @@ -114,7 +125,7 @@ TEST(CanonicalCookieTest, Create) { EXPECT_EQ("/test", cookie->Path()); EXPECT_FALSE(cookie->IsSecure()); EXPECT_FALSE(cookie->IsHttpOnly()); - EXPECT_FALSE(cookie->IsSameSite()); + EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie->SameSite()); } TEST(CanonicalCookieTest, EmptyExpiry) { @@ -159,7 +170,7 @@ TEST(CanonicalCookieTest, IsEquivalent) { base::Time expiration_time = creation_time + base::TimeDelta::FromDays(2); bool secure(false); bool httponly(false); - bool same_site(false); + CookieSameSite same_site(CookieSameSite::NO_RESTRICTION); // Test that a cookie is equivalent to itself. scoped_ptr<CanonicalCookie> cookie(new CanonicalCookie( @@ -205,8 +216,8 @@ TEST(CanonicalCookieTest, IsEquivalent) { other_cookie.reset(new CanonicalCookie( url, cookie_name, cookie_name, cookie_domain, cookie_path, creation_time, - expiration_time, last_access_time, secure, httponly, true, - COOKIE_PRIORITY_LOW)); + expiration_time, last_access_time, secure, httponly, + CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_LOW)); EXPECT_TRUE(cookie->IsEquivalent(*other_cookie)); // Tests that use different variations of attribute values that @@ -249,7 +260,7 @@ TEST(CanonicalCookieTest, IsEquivalentForSecureCookieMatching) { base::Time expiration_time = creation_time + base::TimeDelta::FromDays(2); bool secure(false); bool httponly(false); - bool same_site(false); + CookieSameSite same_site(CookieSameSite::NO_RESTRICTION); // Test that a cookie is equivalent to itself. scoped_ptr<CanonicalCookie> cookie(new CanonicalCookie( @@ -299,8 +310,8 @@ TEST(CanonicalCookieTest, IsEquivalentForSecureCookieMatching) { other_cookie.reset(new CanonicalCookie( url, cookie_name, cookie_name, cookie_domain, cookie_path, creation_time, - expiration_time, last_access_time, secure, httponly, true, - COOKIE_PRIORITY_LOW)); + expiration_time, last_access_time, secure, httponly, + CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_LOW)); EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie)); // The following 3 tests' expected results differ from their IsEquivalent @@ -444,34 +455,34 @@ TEST(CanonicalCookieTest, IncludeSameSiteForSameSiteURL) { // Same-site cookies are not included for cross-site requests, // even if other properties match: - cookie = CanonicalCookie::Create(secure_url, "A=2; SameSite", creation_time, - options); - EXPECT_TRUE(cookie->IsSameSite()); + cookie = CanonicalCookie::Create(secure_url, "A=2; SameSite=Strict", + creation_time, options); + EXPECT_EQ(CookieSameSite::STRICT_MODE, cookie->SameSite()); EXPECT_FALSE(cookie->IncludeForRequestURL(secure_url, options)); - cookie = CanonicalCookie::Create(secure_url, "A=2; Secure; SameSite", + cookie = CanonicalCookie::Create(secure_url, "A=2; Secure; SameSite=Strict", creation_time, options); - EXPECT_TRUE(cookie->IsSameSite()); + EXPECT_EQ(CookieSameSite::STRICT_MODE, cookie->SameSite()); EXPECT_FALSE(cookie->IncludeForRequestURL(secure_url, options)); cookie = CanonicalCookie::Create(secure_url_with_path, - "A=2; SameSite; path=/foo/bar", + "A=2; SameSite=Strict; path=/foo/bar", creation_time, options); - EXPECT_TRUE(cookie->IsSameSite()); + EXPECT_EQ(CookieSameSite::STRICT_MODE, cookie->SameSite()); EXPECT_FALSE(cookie->IncludeForRequestURL(secure_url, options)); // Same-site cookies are included for same-site requests: options.set_include_same_site(); - cookie = CanonicalCookie::Create(secure_url, "A=2; SameSite", creation_time, - options); - EXPECT_TRUE(cookie->IsSameSite()); + cookie = CanonicalCookie::Create(secure_url, "A=2; SameSite=Strict", + creation_time, options); + EXPECT_EQ(CookieSameSite::STRICT_MODE, cookie->SameSite()); EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url, options)); - cookie = CanonicalCookie::Create(secure_url, "A=2; Secure; SameSite", + cookie = CanonicalCookie::Create(secure_url, "A=2; Secure; SameSite=Strict", creation_time, options); - EXPECT_TRUE(cookie->IsSameSite()); + EXPECT_EQ(CookieSameSite::STRICT_MODE, cookie->SameSite()); EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url, options)); cookie = CanonicalCookie::Create(secure_url_with_path, - "A=2; SameSite; path=/foo/bar", + "A=2; SameSite=Strict; path=/foo/bar", creation_time, options); - EXPECT_TRUE(cookie->IsSameSite()); + EXPECT_EQ(CookieSameSite::STRICT_MODE, cookie->SameSite()); EXPECT_TRUE(cookie->IncludeForRequestURL(secure_url_with_path, options)); } @@ -635,21 +646,21 @@ TEST(CanonicalCookieTest, EnforceSecureCookiesRequireSecureScheme) { EXPECT_TRUE(https_cookie_secure.get()); scoped_ptr<CanonicalCookie> http_cookie_no_secure_extended( - CanonicalCookie::Create(http_url, "a", "b", "", "", creation_time, - creation_time, false, false, false, true, - COOKIE_PRIORITY_DEFAULT)); + CanonicalCookie::Create( + http_url, "a", "b", "", "", creation_time, creation_time, false, + false, CookieSameSite::STRICT_MODE, true, COOKIE_PRIORITY_DEFAULT)); scoped_ptr<CanonicalCookie> http_cookie_secure_extended( - CanonicalCookie::Create(http_url, "a", "b", "", "", creation_time, - creation_time, true, false, false, true, - COOKIE_PRIORITY_DEFAULT)); + CanonicalCookie::Create( + http_url, "a", "b", "", "", creation_time, creation_time, true, false, + CookieSameSite::STRICT_MODE, true, COOKIE_PRIORITY_DEFAULT)); scoped_ptr<CanonicalCookie> https_cookie_no_secure_extended( - CanonicalCookie::Create(https_url, "a", "b", "", "", creation_time, - creation_time, false, false, false, true, - COOKIE_PRIORITY_DEFAULT)); + CanonicalCookie::Create( + https_url, "a", "b", "", "", creation_time, creation_time, false, + false, CookieSameSite::STRICT_MODE, true, COOKIE_PRIORITY_DEFAULT)); scoped_ptr<CanonicalCookie> https_cookie_secure_extended( - CanonicalCookie::Create(https_url, "a", "b", "", "", creation_time, - creation_time, true, false, false, true, - COOKIE_PRIORITY_DEFAULT)); + CanonicalCookie::Create( + https_url, "a", "b", "", "", creation_time, creation_time, true, + false, CookieSameSite::STRICT_MODE, true, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(http_cookie_no_secure_extended.get()); EXPECT_FALSE(http_cookie_secure_extended.get()); diff --git a/net/cookies/cookie_constants.cc b/net/cookies/cookie_constants.cc index 05fe22e..b618261 100644 --- a/net/cookies/cookie_constants.cc +++ b/net/cookies/cookie_constants.cc @@ -10,12 +10,17 @@ namespace net { namespace { + const char kPriorityLow[] = "low"; const char kPriorityMedium[] = "medium"; const char kPriorityHigh[] = "high"; + +const char kSameSiteLax[] = "lax"; +const char kSameSiteStrict[] = "strict"; + } // namespace -NET_EXPORT const std::string CookiePriorityToString(CookiePriority priority) { +std::string CookiePriorityToString(CookiePriority priority) { switch(priority) { case COOKIE_PRIORITY_HIGH: return kPriorityHigh; @@ -29,7 +34,7 @@ NET_EXPORT const std::string CookiePriorityToString(CookiePriority priority) { return std::string(); } -NET_EXPORT CookiePriority StringToCookiePriority(const std::string& priority) { +CookiePriority StringToCookiePriority(const std::string& priority) { std::string priority_comp = base::ToLowerASCII(priority); if (priority_comp == kPriorityHigh) @@ -42,4 +47,12 @@ NET_EXPORT CookiePriority StringToCookiePriority(const std::string& priority) { return COOKIE_PRIORITY_DEFAULT; } +CookieSameSite StringToCookieSameSite(const std::string& same_site) { + if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteLax)) + return CookieSameSite::LAX_MODE; + if (base::EqualsCaseInsensitiveASCII(same_site, kSameSiteStrict)) + return CookieSameSite::STRICT_MODE; + return CookieSameSite::DEFAULT_MODE; +} + } // namespace net diff --git a/net/cookies/cookie_constants.h b/net/cookies/cookie_constants.h index 7e27e14..49dafbd 100644 --- a/net/cookies/cookie_constants.h +++ b/net/cookies/cookie_constants.h @@ -18,13 +18,27 @@ enum CookiePriority { COOKIE_PRIORITY_DEFAULT = COOKIE_PRIORITY_MEDIUM }; +enum class CookieSameSite { + NO_RESTRICTION = 0, + LAX_MODE = 1, + STRICT_MODE = 2, + DEFAULT_MODE = NO_RESTRICTION +}; + // Returns the Set-Cookie header priority token corresponding to |priority|. -NET_EXPORT const std::string CookiePriorityToString(CookiePriority priority); +// +// TODO(mkwst): Remove this once its callsites are refactored. +NET_EXPORT std::string CookiePriorityToString(CookiePriority priority); // Converts the Set-Cookie header priority token |priority| to a CookiePriority. // Defaults to COOKIE_PRIORITY_DEFAULT for empty or unrecognized strings. NET_EXPORT CookiePriority StringToCookiePriority(const std::string& priority); +// Converst the Set-Cookie header SameSite token |same_site| to a +// CookieSameSite. Defaults to CookieSameSite::DEFAULT_MODE for empty or +// unrecognized strings. +NET_EXPORT CookieSameSite StringToCookieSameSite(const std::string& same_site); + } // namespace net #endif // NET_COOKIES_COOKIE_CONSTANTS_H_ diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc index 1984bad..a4f99dc 100644 --- a/net/cookies/cookie_monster.cc +++ b/net/cookies/cookie_monster.cc @@ -380,7 +380,7 @@ class CookieMonster::SetCookieWithDetailsTask : public CookieMonsterTask { base::Time last_access_time, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority, const SetCookiesCallback& callback) @@ -417,7 +417,7 @@ class CookieMonster::SetCookieWithDetailsTask : public CookieMonsterTask { base::Time last_access_time_; bool secure_; bool http_only_; - bool same_site_; + CookieSameSite same_site_; bool enforce_strict_secure_; CookiePriority priority_; SetCookiesCallback callback_; @@ -824,7 +824,7 @@ void CookieMonster::SetCookieWithDetailsAsync( Time last_access_time, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority, const SetCookiesCallback& callback) { @@ -1014,7 +1014,7 @@ bool CookieMonster::SetCookieWithDetails(const GURL& url, base::Time last_access_time, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority) { DCHECK(thread_checker_.CalledOnValidThread()); @@ -1677,7 +1677,9 @@ CookieMonster::CookieMap::iterator CookieMonster::InternalInsertCookie( } // See InitializeHistograms() for details. - int32_t type_sample = cc->IsSameSite() ? 1 << COOKIE_TYPE_SAME_SITE : 0; + int32_t type_sample = cc->SameSite() != CookieSameSite::NO_RESTRICTION + ? 1 << COOKIE_TYPE_SAME_SITE + : 0; type_sample |= cc->IsHttpOnly() ? 1 << COOKIE_TYPE_HTTPONLY : 0; type_sample |= cc->IsSecure() ? 1 << COOKIE_TYPE_SECURE : 0; histogram_cookie_type_->Add(type_sample); diff --git a/net/cookies/cookie_monster.h b/net/cookies/cookie_monster.h index d288a84..12e0494 100644 --- a/net/cookies/cookie_monster.h +++ b/net/cookies/cookie_monster.h @@ -163,7 +163,7 @@ class NET_EXPORT CookieMonster : public CookieStore { base::Time last_access_time, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority, const SetCookiesCallback& callback) override; @@ -394,7 +394,7 @@ class NET_EXPORT CookieMonster : public CookieStore { base::Time last_access_time, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority); diff --git a/net/cookies/cookie_monster_store_test.cc b/net/cookies/cookie_monster_store_test.cc index 4271298..54fe5c4 100644 --- a/net/cookies/cookie_monster_store_test.cc +++ b/net/cookies/cookie_monster_store_test.cc @@ -138,7 +138,7 @@ CanonicalCookie BuildCanonicalCookie(const std::string& key, return CanonicalCookie(GURL(), pc.Name(), pc.Value(), key, cookie_path, creation_time, cookie_expires, creation_time, - pc.IsSecure(), pc.IsHttpOnly(), pc.IsSameSite(), + pc.IsSecure(), pc.IsHttpOnly(), pc.SameSite(), pc.Priority()); } @@ -248,8 +248,8 @@ scoped_ptr<CookieMonster> CreateMonsterFromStoreForGC( CanonicalCookie cc(GURL(), "a", "1", base::StringPrintf("h%05d.izzle", i), "/path", creation_time, expiration_time, - last_access_time, secure, false, false, - COOKIE_PRIORITY_DEFAULT); + last_access_time, secure, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); store->AddCookie(cc); } diff --git a/net/cookies/cookie_monster_unittest.cc b/net/cookies/cookie_monster_unittest.cc index 5a48d7d..741807c 100644 --- a/net/cookies/cookie_monster_unittest.cc +++ b/net/cookies/cookie_monster_unittest.cc @@ -187,72 +187,73 @@ class CookieMonsterTestBase : public CookieStoreTest<T> { // Domain cookies EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_1, "dom_1", "X", ".harvard.edu", "/", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2, "dom_2", "X", ".math.harvard.edu", "/", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_3, "dom_3", "X", ".bourbaki.math.harvard.edu", "/", base::Time(), base::Time(), - base::Time(), false, false, false, COOKIE_PRIORITY_DEFAULT)); + base::Time(), false, false, CookieSameSite::DEFAULT_MODE, + COOKIE_PRIORITY_DEFAULT)); // Host cookies EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_1, "host_1", "X", std::string(), "/", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2, "host_2", "X", std::string(), "/", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_3, "host_3", "X", std::string(), "/", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // http_only cookie EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2, "httpo_check", "x", std::string(), "/", - base::Time(), base::Time(), base::Time(), false, true, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, true, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // same-site cookie EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2, "firstp_check", "x", std::string(), - "/", base::Time(), base::Time(), base::Time(), false, false, true, - COOKIE_PRIORITY_DEFAULT)); + "/", base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT)); // Secure cookies EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2_secure, "sec_dom", "X", ".math.harvard.edu", "/", base::Time(), base::Time(), base::Time(), - true, false, false, COOKIE_PRIORITY_DEFAULT)); + true, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2_secure, "sec_host", "X", std::string(), - "/", base::Time(), base::Time(), base::Time(), true, false, false, - COOKIE_PRIORITY_DEFAULT)); + "/", base::Time(), base::Time(), base::Time(), true, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Domain path cookies EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2, "dom_path_1", "X", ".math.harvard.edu", - "/dir1", base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + "/dir1", base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2, "dom_path_2", "X", ".math.harvard.edu", "/dir1/dir2", base::Time(), base::Time(), base::Time(), false, false, - false, COOKIE_PRIORITY_DEFAULT)); + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Host path cookies EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2, "host_path_1", "X", std::string(), - "/dir1", base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + "/dir1", base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(this->SetCookieWithDetails( cm, url_top_level_domain_plus_2, "host_path_2", "X", std::string(), "/dir1/dir2", base::Time(), base::Time(), base::Time(), false, false, - false, COOKIE_PRIORITY_DEFAULT)); + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_EQ(14U, this->GetAllCookies(cm).size()); } @@ -622,7 +623,7 @@ struct CookiesInputInfo { const base::Time expiration_time; bool secure; bool http_only; - bool same_site; + CookieSameSite same_site; CookiePriority priority; }; @@ -855,14 +856,14 @@ TEST_F(DeferredCookieTaskTest, DeferredSetCookie) { TEST_F(DeferredCookieTaskTest, DeferredSetAllCookies) { MockSetCookiesCallback set_cookies_callback; CookieList list; - list.push_back(CanonicalCookie(http_www_google_.url(), "A", "B", - http_www_google_.domain(), "/", - base::Time::Now(), base::Time(), base::Time(), - false, true, false, COOKIE_PRIORITY_DEFAULT)); - list.push_back(CanonicalCookie(http_www_google_.url(), "C", "D", - http_www_google_.domain(), "/", - base::Time::Now(), base::Time(), base::Time(), - false, true, false, COOKIE_PRIORITY_DEFAULT)); + list.push_back(CanonicalCookie( + http_www_google_.url(), "A", "B", http_www_google_.domain(), "/", + base::Time::Now(), base::Time(), base::Time(), false, true, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); + list.push_back(CanonicalCookie( + http_www_google_.url(), "C", "D", http_www_google_.domain(), "/", + base::Time::Now(), base::Time(), base::Time(), false, true, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); BeginWith( SetAllCookiesAction(&cookie_monster(), list, &set_cookies_callback)); @@ -910,7 +911,7 @@ TEST_F(DeferredCookieTaskTest, DeferredSetCookieWithDetails) { base::Time(), false, false, - false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT}; BeginWithForDomainKey( http_www_google_.domain(), @@ -927,7 +928,7 @@ TEST_F(DeferredCookieTaskTest, DeferredSetCookieWithDetails) { base::Time(), false, false, - false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT}; EXPECT_CALL(set_cookies_callback, Invoke(true)) .WillOnce(SetCookieWithDetailsAction(&cookie_monster(), cookie_info_exp, @@ -1743,15 +1744,15 @@ TEST_F(CookieMonsterTest, UniqueCreationTime) { EXPECT_TRUE(SetCookieWithDetails( cm.get(), http_www_google_.url(), "setCookieWithDetails1", "A", http_www_google_.Format(".%D"), "/", Time(), Time(), Time(), false, false, - false, COOKIE_PRIORITY_DEFAULT)); + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(SetCookieWithDetails( cm.get(), http_www_google_.url(), "setCookieWithDetails2", "A", http_www_google_.Format(".%D"), "/", Time(), Time(), Time(), false, false, - false, COOKIE_PRIORITY_DEFAULT)); + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(SetCookieWithDetails( cm.get(), http_www_google_.url(), "setCookieWithDetails3", "A", http_www_google_.Format(".%D"), "/", Time(), Time(), Time(), false, false, - false, COOKIE_PRIORITY_DEFAULT)); + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Now we check CookieList cookie_list(GetAllCookies(cm.get())); @@ -1811,36 +1812,14 @@ TEST_F(CookieMonsterTest, BackingStoreCommunication) { base::Time expires(base::Time::Now() + base::TimeDelta::FromSeconds(100)); const CookiesInputInfo input_info[] = { - {GURL("http://a.b.google.com"), - "a", - "1", - "", - "/path/to/cookie", - expires, - false, - false, - false, - COOKIE_PRIORITY_DEFAULT}, - {GURL("https://www.google.com"), - "b", - "2", - ".google.com", - "/path/from/cookie", - expires + TimeDelta::FromSeconds(10), - true, - true, - false, - COOKIE_PRIORITY_DEFAULT}, - {GURL("https://google.com"), - "c", - "3", - "", - "/another/path/to/cookie", - base::Time::Now() + base::TimeDelta::FromSeconds(100), - true, - false, - true, - COOKIE_PRIORITY_DEFAULT}}; + {GURL("http://a.b.google.com"), "a", "1", "", "/path/to/cookie", expires, + false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT}, + {GURL("https://www.google.com"), "b", "2", ".google.com", + "/path/from/cookie", expires + TimeDelta::FromSeconds(10), true, true, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT}, + {GURL("https://google.com"), "c", "3", "", "/another/path/to/cookie", + base::Time::Now() + base::TimeDelta::FromSeconds(100), true, false, + CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT}}; const int INPUT_DELETE = 1; // Create new cookies and flush them to the store. @@ -1880,7 +1859,7 @@ TEST_F(CookieMonsterTest, BackingStoreCommunication) { output->CreationDate().ToInternalValue()); EXPECT_EQ(input->secure, output->IsSecure()); EXPECT_EQ(input->http_only, output->IsHttpOnly()); - EXPECT_EQ(input->same_site, output->IsSameSite()); + EXPECT_EQ(input->same_site, output->SameSite()); EXPECT_TRUE(output->IsPersistent()); EXPECT_EQ(input->expiration_time.ToInternalValue(), output->ExpiryDate().ToInternalValue()); @@ -2316,18 +2295,18 @@ TEST_F(CookieMonsterTest, SetAllCookies) { EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "Y=Z; path=/")); CookieList list; - list.push_back(CanonicalCookie(http_www_google_.url(), "A", "B", - http_www_google_.url().host(), "/", - base::Time::Now(), base::Time(), base::Time(), - false, false, false, COOKIE_PRIORITY_DEFAULT)); - list.push_back(CanonicalCookie(http_www_google_.url(), "W", "X", - http_www_google_.url().host(), "/bar", - base::Time::Now(), base::Time(), base::Time(), - false, false, false, COOKIE_PRIORITY_DEFAULT)); - list.push_back(CanonicalCookie(http_www_google_.url(), "Y", "Z", - http_www_google_.url().host(), "/", - base::Time::Now(), base::Time(), base::Time(), - false, false, false, COOKIE_PRIORITY_DEFAULT)); + list.push_back(CanonicalCookie( + http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/", + base::Time::Now(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); + list.push_back(CanonicalCookie( + http_www_google_.url(), "W", "X", http_www_google_.url().host(), "/bar", + base::Time::Now(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); + list.push_back(CanonicalCookie( + http_www_google_.url(), "Y", "Z", http_www_google_.url().host(), "/", + base::Time::Now(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // SetAllCookies must not flush. ASSERT_EQ(0, store->flush_count()); @@ -2359,49 +2338,50 @@ TEST_F(CookieMonsterTest, ComputeCookieDiff) { base::Time now = base::Time::Now(); base::Time creation_time = now - base::TimeDelta::FromSeconds(1); - CanonicalCookie cookie1(http_www_google_.url(), "A", "B", - http_www_google_.url().host(), "/", creation_time, - base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); - CanonicalCookie cookie2(http_www_google_.url(), "C", "D", - http_www_google_.url().host(), "/", creation_time, - base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); - CanonicalCookie cookie3(http_www_google_.url(), "E", "F", - http_www_google_.url().host(), "/", creation_time, - base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); - CanonicalCookie cookie4(http_www_google_.url(), "G", "H", - http_www_google_.url().host(), "/", creation_time, - base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); + CanonicalCookie cookie1( + http_www_google_.url(), "A", "B", http_www_google_.url().host(), "/", + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); + CanonicalCookie cookie2( + http_www_google_.url(), "C", "D", http_www_google_.url().host(), "/", + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); + CanonicalCookie cookie3( + http_www_google_.url(), "E", "F", http_www_google_.url().host(), "/", + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); + CanonicalCookie cookie4( + http_www_google_.url(), "G", "H", http_www_google_.url().host(), "/", + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); CanonicalCookie cookie4_with_new_value( http_www_google_.url(), "G", "iamnew", http_www_google_.url().host(), "/", - creation_time, base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); - CanonicalCookie cookie5(http_www_google_.url(), "I", "J", - http_www_google_.url().host(), "/", creation_time, - base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); + CanonicalCookie cookie5( + http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/", + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); CanonicalCookie cookie5_with_new_creation_time( http_www_google_.url(), "I", "J", http_www_google_.url().host(), "/", now, - base::Time(), base::Time(), false, false, false, COOKIE_PRIORITY_DEFAULT); - CanonicalCookie cookie6(http_www_google_.url(), "K", "L", - http_www_google_.url().host(), "/foo", creation_time, - base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); + base::Time(), base::Time(), false, false, CookieSameSite::DEFAULT_MODE, + COOKIE_PRIORITY_DEFAULT); + CanonicalCookie cookie6( + http_www_google_.url(), "K", "L", http_www_google_.url().host(), "/foo", + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); CanonicalCookie cookie6_with_new_path( http_www_google_.url(), "K", "L", http_www_google_.url().host(), "/bar", - creation_time, base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); - CanonicalCookie cookie7(http_www_google_.url(), "M", "N", - http_www_google_.url().host(), "/foo", creation_time, - base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); + CanonicalCookie cookie7( + http_www_google_.url(), "M", "N", http_www_google_.url().host(), "/foo", + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); CanonicalCookie cookie7_with_new_path( http_www_google_.url(), "M", "N", http_www_google_.url().host(), "/bar", - creation_time, base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT); + creation_time, base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); CookieList old_cookies; old_cookies.push_back(cookie1); @@ -2495,7 +2475,7 @@ TEST_F(CookieMonsterTest, HistogramCheck) { ASSERT_TRUE(SetCookieWithDetails( cm.get(), GURL("http://fake.a.url"), "a", "b", "a.url", "/", base::Time(), base::Time::Now() + base::TimeDelta::FromMinutes(59), base::Time(), false, - false, false, COOKIE_PRIORITY_DEFAULT)); + false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); scoped_ptr<base::HistogramSamples> samples2( expired_histogram->SnapshotSamples()); @@ -2613,12 +2593,12 @@ TEST_F(CookieMonsterTest, ControlCharacterPurge) { // We have to manually build this cookie because it contains a control // character, and our cookie line parser rejects control characters. - CanonicalCookie* cc = - new CanonicalCookie(url, "baz", - "\x05" - "boo", - domain, path, now2, later, now2, false, false, false, - COOKIE_PRIORITY_DEFAULT); + CanonicalCookie* cc = new CanonicalCookie( + url, "baz", + "\x05" + "boo", + domain, path, now2, later, now2, false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT); initial_cookies.push_back(cc); AddCookieToList(domain, "hello=world; path=" + path, now3, &initial_cookies); diff --git a/net/cookies/cookie_store.h b/net/cookies/cookie_store.h index c44139b..6fabe92 100644 --- a/net/cookies/cookie_store.h +++ b/net/cookies/cookie_store.h @@ -91,7 +91,7 @@ class NET_EXPORT CookieStore { base::Time last_access_time, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority, const SetCookiesCallback& callback) = 0; diff --git a/net/cookies/cookie_store_test_helpers.cc b/net/cookies/cookie_store_test_helpers.cc index fdb8e92..d2dc210 100644 --- a/net/cookies/cookie_store_test_helpers.cc +++ b/net/cookies/cookie_store_test_helpers.cc @@ -86,7 +86,7 @@ void DelayedCookieMonster::SetCookieWithDetailsAsync( base::Time last_access_time, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority, const SetCookiesCallback& callback) { diff --git a/net/cookies/cookie_store_test_helpers.h b/net/cookies/cookie_store_test_helpers.h index 068296c..0ebae5b 100644 --- a/net/cookies/cookie_store_test_helpers.h +++ b/net/cookies/cookie_store_test_helpers.h @@ -41,7 +41,7 @@ class DelayedCookieMonster : public CookieStore { base::Time last_access_time, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, bool enforce_strict_secure, CookiePriority priority, const SetCookiesCallback& callback) override; diff --git a/net/cookies/cookie_store_unittest.h b/net/cookies/cookie_store_unittest.h index a47e953..b226d31 100644 --- a/net/cookies/cookie_store_unittest.h +++ b/net/cookies/cookie_store_unittest.h @@ -171,7 +171,7 @@ class CookieStoreTest : public testing::Test { const base::Time last_access_time, bool secure, bool http_only, - bool same_site, + CookieSameSite same_site, CookiePriority priority) { DCHECK(cs); ResultSavingCookieCallback<bool> callback; @@ -347,40 +347,40 @@ TYPED_TEST_P(CookieStoreTest, SetCookieWithDetailsAsync) { EXPECT_TRUE(this->SetCookieWithDetails( cs, this->www_google_foo_.url(), "A", "B", std::string(), "/foo", - one_hour_ago, one_hour_from_now, base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + one_hour_ago, one_hour_from_now, base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Note that for the creation time to be set exactly, without modification, // it must be different from the one set by the line above. EXPECT_TRUE(this->SetCookieWithDetails( cs, this->www_google_bar_.url(), "C", "D", this->www_google_bar_.domain(), - "/bar", two_hours_ago, base::Time(), one_hour_ago, false, true, false, - COOKIE_PRIORITY_DEFAULT)); + "/bar", two_hours_ago, base::Time(), one_hour_ago, false, true, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_TRUE(this->SetCookieWithDetails( cs, this->http_www_google_.url(), "E", "F", std::string(), std::string(), - base::Time(), base::Time(), base::Time(), true, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), true, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Test that malformed attributes fail to set the cookie. EXPECT_FALSE(this->SetCookieWithDetails( cs, this->www_google_foo_.url(), " A", "B", std::string(), "/foo", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_FALSE(this->SetCookieWithDetails( cs, this->www_google_foo_.url(), "A;", "B", std::string(), "/foo", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_FALSE(this->SetCookieWithDetails( cs, this->www_google_foo_.url(), "A=", "B", std::string(), "/foo", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_FALSE(this->SetCookieWithDetails( cs, this->www_google_foo_.url(), "A", "B", "google.ozzzzzzle", "foo", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); EXPECT_FALSE(this->SetCookieWithDetails( cs, this->www_google_foo_.url(), "A=", "B", std::string(), "foo", - base::Time(), base::Time(), base::Time(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + base::Time(), base::Time(), base::Time(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Get all the cookies for a given URL, regardless of properties. This 'get()' // operation shouldn't update the access time, as the test checks that the diff --git a/net/cookies/parsed_cookie.cc b/net/cookies/parsed_cookie.cc index 5294f07..a6c1e95 100644 --- a/net/cookies/parsed_cookie.cc +++ b/net/cookies/parsed_cookie.cc @@ -182,6 +182,12 @@ bool ParsedCookie::IsValid() const { return !pairs_.empty(); } +CookieSameSite ParsedCookie::SameSite() const { + return (same_site_index_ == 0) + ? CookieSameSite::DEFAULT_MODE + : StringToCookieSameSite(pairs_[same_site_index_].second); +} + CookiePriority ParsedCookie::Priority() const { return (priority_index_ == 0) ? COOKIE_PRIORITY_DEFAULT @@ -230,8 +236,8 @@ bool ParsedCookie::SetIsHttpOnly(bool is_http_only) { return SetBool(&httponly_index_, kHttpOnlyTokenName, is_http_only); } -bool ParsedCookie::SetIsSameSite(bool is_same_site) { - return SetBool(&same_site_index_, kSameSiteTokenName, is_same_site); +bool ParsedCookie::SetSameSite(const std::string& is_same_site) { + return SetString(&same_site_index_, kSameSiteTokenName, is_same_site); } bool ParsedCookie::SetPriority(const std::string& priority) { @@ -244,8 +250,7 @@ std::string ParsedCookie::ToCookieLine() const { if (!out.empty()) out.append("; "); out.append(it->first); - if (it->first != kSecureTokenName && it->first != kHttpOnlyTokenName && - it->first != kSameSiteTokenName) { + if (it->first != kSecureTokenName && it->first != kHttpOnlyTokenName) { out.append("="); out.append(it->second); } diff --git a/net/cookies/parsed_cookie.h b/net/cookies/parsed_cookie.h index bce984c..ebb14de 100644 --- a/net/cookies/parsed_cookie.h +++ b/net/cookies/parsed_cookie.h @@ -50,7 +50,7 @@ class NET_EXPORT ParsedCookie { const std::string& MaxAge() const { return pairs_[maxage_index_].second; } bool IsSecure() const { return secure_index_ != 0; } bool IsHttpOnly() const { return httponly_index_ != 0; } - bool IsSameSite() const { return same_site_index_ != 0; } + CookieSameSite SameSite() const; CookiePriority Priority() const; // Returns the number of attributes, for example, returning 2 for: @@ -70,7 +70,7 @@ class NET_EXPORT ParsedCookie { bool SetMaxAge(const std::string& maxage); bool SetIsSecure(bool is_secure); bool SetIsHttpOnly(bool is_http_only); - bool SetIsSameSite(bool is_same_site); + bool SetSameSite(const std::string& same_site); bool SetPriority(const std::string& priority); // Returns the cookie description as it appears in a HTML response header. diff --git a/net/cookies/parsed_cookie_unittest.cc b/net/cookies/parsed_cookie_unittest.cc index 6cfcf3c..0a3048e 100644 --- a/net/cookies/parsed_cookie_unittest.cc +++ b/net/cookies/parsed_cookie_unittest.cc @@ -92,11 +92,12 @@ TEST(ParsedCookieTest, TestNameless) { } TEST(ParsedCookieTest, TestAttributeCase) { - ParsedCookie pc("BLAHHH; Path=/; sECuRe; httpONLY; sAmESitE; pRIoRitY=hIgH"); + ParsedCookie pc( + "BLAHHH; Path=/; sECuRe; httpONLY; sAmESitE=StrIct; pRIoRitY=hIgH"); EXPECT_TRUE(pc.IsValid()); EXPECT_TRUE(pc.IsSecure()); EXPECT_TRUE(pc.IsHttpOnly()); - EXPECT_TRUE(pc.IsSameSite()); + EXPECT_EQ(CookieSameSite::STRICT_MODE, pc.SameSite()); EXPECT_TRUE(pc.HasPath()); EXPECT_EQ("/", pc.Path()); EXPECT_EQ("", pc.Name()); @@ -147,7 +148,7 @@ TEST(ParsedCookieTest, MissingValue) { } TEST(ParsedCookieTest, Whitespace) { - ParsedCookie pc(" A = BC ;secure;;; samesite "); + ParsedCookie pc(" A = BC ;secure;;; samesite = lax "); EXPECT_TRUE(pc.IsValid()); EXPECT_EQ("A", pc.Name()); EXPECT_EQ("BC", pc.Value()); @@ -155,7 +156,7 @@ TEST(ParsedCookieTest, Whitespace) { EXPECT_FALSE(pc.HasDomain()); EXPECT_TRUE(pc.IsSecure()); EXPECT_FALSE(pc.IsHttpOnly()); - EXPECT_TRUE(pc.IsSameSite()); + EXPECT_EQ(CookieSameSite::LAX_MODE, pc.SameSite()); EXPECT_EQ(COOKIE_PRIORITY_DEFAULT, pc.Priority()); // We parse anything between ; as attributes, so we end up with two // attributes with an empty string name and value. @@ -170,7 +171,7 @@ TEST(ParsedCookieTest, MultipleEquals) { EXPECT_FALSE(pc.HasDomain()); EXPECT_TRUE(pc.IsSecure()); EXPECT_TRUE(pc.IsHttpOnly()); - EXPECT_FALSE(pc.IsSameSite()); + EXPECT_EQ(CookieSameSite::DEFAULT_MODE, pc.SameSite()); EXPECT_EQ(COOKIE_PRIORITY_DEFAULT, pc.Priority()); EXPECT_EQ(4U, pc.NumberOfAttributes()); } @@ -356,12 +357,12 @@ TEST(ParsedCookieTest, SetAttributes) { EXPECT_TRUE(pc.SetIsSecure(true)); EXPECT_TRUE(pc.SetIsHttpOnly(true)); EXPECT_TRUE(pc.SetIsHttpOnly(true)); - EXPECT_TRUE(pc.SetIsSameSite(true)); + EXPECT_TRUE(pc.SetSameSite("LAX")); EXPECT_TRUE(pc.SetPriority("HIGH")); EXPECT_EQ( "name=value; domain=domain.com; path=/; " "expires=Sun, 18-Apr-2027 21:06:29 GMT; max-age=12345; secure; " - "httponly; samesite; priority=HIGH", + "httponly; samesite=LAX; priority=HIGH", pc.ToCookieLine()); EXPECT_TRUE(pc.HasDomain()); EXPECT_TRUE(pc.HasPath()); @@ -369,7 +370,7 @@ TEST(ParsedCookieTest, SetAttributes) { EXPECT_TRUE(pc.HasMaxAge()); EXPECT_TRUE(pc.IsSecure()); EXPECT_TRUE(pc.IsHttpOnly()); - EXPECT_TRUE(pc.IsSameSite()); + EXPECT_EQ(CookieSameSite::LAX_MODE, pc.SameSite()); EXPECT_EQ(COOKIE_PRIORITY_HIGH, pc.Priority()); // Clear one attribute from the middle. @@ -382,7 +383,7 @@ TEST(ParsedCookieTest, SetAttributes) { EXPECT_EQ( "name=value; domain=domain.com; path=/foo; " "expires=Sun, 18-Apr-2027 21:06:29 GMT; max-age=12345; secure; " - "httponly; samesite; priority=HIGH", + "httponly; samesite=LAX; priority=HIGH", pc.ToCookieLine()); // Set priority to medium. @@ -390,7 +391,7 @@ TEST(ParsedCookieTest, SetAttributes) { EXPECT_EQ( "name=value; domain=domain.com; path=/foo; " "expires=Sun, 18-Apr-2027 21:06:29 GMT; max-age=12345; secure; " - "httponly; samesite; priority=medium", + "httponly; samesite=LAX; priority=medium", pc.ToCookieLine()); // Clear the rest and change the name and value. @@ -400,7 +401,7 @@ TEST(ParsedCookieTest, SetAttributes) { EXPECT_TRUE(pc.SetMaxAge(std::string())); EXPECT_TRUE(pc.SetIsSecure(false)); EXPECT_TRUE(pc.SetIsHttpOnly(false)); - EXPECT_TRUE(pc.SetIsSameSite(false)); + EXPECT_TRUE(pc.SetSameSite(std::string())); EXPECT_TRUE(pc.SetName("name2")); EXPECT_TRUE(pc.SetValue("value2")); EXPECT_TRUE(pc.SetPriority(std::string())); @@ -410,7 +411,7 @@ TEST(ParsedCookieTest, SetAttributes) { EXPECT_FALSE(pc.HasMaxAge()); EXPECT_FALSE(pc.IsSecure()); EXPECT_FALSE(pc.IsHttpOnly()); - EXPECT_FALSE(pc.IsSameSite()); + EXPECT_EQ(CookieSameSite::NO_RESTRICTION, pc.SameSite()); EXPECT_EQ("name2=value2", pc.ToCookieLine()); } @@ -448,6 +449,40 @@ TEST(ParsedCookieTest, SetPriority) { EXPECT_EQ(COOKIE_PRIORITY_DEFAULT, pc.Priority()); } +TEST(ParsedCookieTest, SetSameSite) { + ParsedCookie pc("name=value"); + EXPECT_TRUE(pc.IsValid()); + + EXPECT_EQ("name=value", pc.ToCookieLine()); + EXPECT_EQ(CookieSameSite::DEFAULT_MODE, pc.SameSite()); + + // Test each priority, expect case-insensitive compare. + EXPECT_TRUE(pc.SetSameSite("strict")); + EXPECT_EQ("name=value; samesite=strict", pc.ToCookieLine()); + EXPECT_EQ(CookieSameSite::STRICT_MODE, pc.SameSite()); + + EXPECT_TRUE(pc.SetSameSite("lAx")); + EXPECT_EQ("name=value; samesite=lAx", pc.ToCookieLine()); + EXPECT_EQ(CookieSameSite::LAX_MODE, pc.SameSite()); + + EXPECT_TRUE(pc.SetSameSite("LAX")); + EXPECT_EQ("name=value; samesite=LAX", pc.ToCookieLine()); + EXPECT_EQ(CookieSameSite::LAX_MODE, pc.SameSite()); + + // Interpret invalid priority values as CookieSameSite::DEFAULT_MODE. + EXPECT_TRUE(pc.SetSameSite("Blah")); + EXPECT_EQ("name=value; samesite=Blah", pc.ToCookieLine()); + EXPECT_EQ(CookieSameSite::DEFAULT_MODE, pc.SameSite()); + + EXPECT_TRUE(pc.SetSameSite("lowerest")); + EXPECT_EQ("name=value; samesite=lowerest", pc.ToCookieLine()); + EXPECT_EQ(CookieSameSite::DEFAULT_MODE, pc.SameSite()); + + EXPECT_TRUE(pc.SetSameSite("")); + EXPECT_EQ("name=value", pc.ToCookieLine()); + EXPECT_EQ(CookieSameSite::DEFAULT_MODE, pc.SameSite()); +} + TEST(ParsedCookieTest, InvalidNonAlphanumericChars) { ParsedCookie pc1("name=\x05"); ParsedCookie pc2( diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store.cc b/net/extras/sqlite/sqlite_persistent_cookie_store.cc index 1145871..911f05a 100644 --- a/net/extras/sqlite/sqlite_persistent_cookie_store.cc +++ b/net/extras/sqlite/sqlite_persistent_cookie_store.cc @@ -373,6 +373,41 @@ CookiePriority DBCookiePriorityToCookiePriority(DBCookiePriority value) { return COOKIE_PRIORITY_DEFAULT; } +// Possible values for the 'samesite' column +enum DBCookieSameSite { + kCookieSameSiteNoRestriction = 0, + kCookieSameSiteLax = 1, + kCookieSameSiteStrict = 2, +}; + +DBCookieSameSite CookieSameSiteToDBCookieSameSite(CookieSameSite value) { + switch (value) { + case CookieSameSite::NO_RESTRICTION: + return kCookieSameSiteNoRestriction; + case CookieSameSite::LAX_MODE: + return kCookieSameSiteLax; + case CookieSameSite::STRICT_MODE: + return kCookieSameSiteStrict; + } + + NOTREACHED(); + return kCookieSameSiteNoRestriction; +} + +CookieSameSite DBCookieSameSiteToCookieSameSite(DBCookieSameSite value) { + switch (value) { + case kCookieSameSiteNoRestriction: + return CookieSameSite::NO_RESTRICTION; + case kCookieSameSiteLax: + return CookieSameSite::LAX_MODE; + case kCookieSameSiteStrict: + return CookieSameSite::STRICT_MODE; + } + + NOTREACHED(); + return CookieSameSite::DEFAULT_MODE; +} + // Increments a specified TimeDelta by the duration between this object's // constructor and destructor. Not thread safe. Multiple instances may be // created with the same delta instance as long as their lifetimes are nested. @@ -414,8 +449,9 @@ bool InitTable(sql::Connection* db) { "persistent INTEGER NOT NULL DEFAULT 1," "priority INTEGER NOT NULL DEFAULT %d," "encrypted_value BLOB DEFAULT ''," - "firstpartyonly INTEGER NOT NULL DEFAULT 0)", - CookiePriorityToDBCookiePriority(COOKIE_PRIORITY_DEFAULT))); + "firstpartyonly INTEGER NOT NULL DEFAULT %d)", + CookiePriorityToDBCookiePriority(COOKIE_PRIORITY_DEFAULT), + CookieSameSiteToDBCookieSameSite(CookieSameSite::DEFAULT_MODE))); if (!db->Execute(stmt.c_str())) return false; @@ -795,7 +831,8 @@ void SQLitePersistentCookieStore::Backend::MakeCookiesFromSQLStatement( Time::FromInternalValue(smt.ColumnInt64(10)), // last_access_utc smt.ColumnInt(7) != 0, // secure smt.ColumnInt(8) != 0, // httponly - smt.ColumnInt(9) != 0, // firstpartyonly + DBCookieSameSiteToCookieSameSite( + static_cast<DBCookieSameSite>(smt.ColumnInt(9))), // samesite DBCookiePriorityToCookiePriority( static_cast<DBCookiePriority>(smt.ColumnInt(13))))); // priority DLOG_IF(WARNING, cc->CreationDate() > Time::Now()) @@ -1130,7 +1167,8 @@ void SQLitePersistentCookieStore::Backend::Commit() { add_smt.BindInt64(6, po->cc().ExpiryDate().ToInternalValue()); add_smt.BindInt(7, po->cc().IsSecure()); add_smt.BindInt(8, po->cc().IsHttpOnly()); - add_smt.BindInt(9, po->cc().IsSameSite()); + add_smt.BindInt(9, + CookieSameSiteToDBCookieSameSite(po->cc().SameSite())); add_smt.BindInt64(10, po->cc().LastAccessDate().ToInternalValue()); add_smt.BindInt(11, po->cc().IsPersistent()); add_smt.BindInt(12, po->cc().IsPersistent()); diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc b/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc index 4be580b..bbf594c 100644 --- a/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc +++ b/net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc @@ -80,7 +80,8 @@ class SQLitePersistentCookieStorePerfTest : public testing::Test { t += base::TimeDelta::FromInternalValue(10); store_->AddCookie(CanonicalCookie( gurl, base::StringPrintf("Cookie_%d", cookie_num), "1", domain_name, - "/", t, t, t, false, false, false, COOKIE_PRIORITY_DEFAULT)); + "/", t, t, t, false, false, CookieSameSite::DEFAULT_MODE, + COOKIE_PRIORITY_DEFAULT)); } } // Replace the store effectively destroying the current one and forcing it diff --git a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc index 2166be0..8315d74 100644 --- a/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc +++ b/net/extras/sqlite/sqlite_persistent_cookie_store_unittest.cc @@ -168,9 +168,9 @@ class SQLitePersistentCookieStoreTest : public testing::Test { const std::string& domain, const std::string& path, const base::Time& creation) { - store_->AddCookie(CanonicalCookie(GURL(), name, value, domain, path, - creation, creation, creation, false, - false, false, COOKIE_PRIORITY_DEFAULT)); + store_->AddCookie(CanonicalCookie( + GURL(), name, value, domain, path, creation, creation, creation, false, + false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); } void AddCookieWithExpiration(const std::string& name, @@ -179,9 +179,9 @@ class SQLitePersistentCookieStoreTest : public testing::Test { const std::string& path, const base::Time& creation, const base::Time& expiration) { - store_->AddCookie(CanonicalCookie(GURL(), name, value, domain, path, - creation, expiration, creation, false, - false, false, COOKIE_PRIORITY_DEFAULT)); + store_->AddCookie(CanonicalCookie( + GURL(), name, value, domain, path, creation, expiration, creation, + false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); } std::string ReadRawDBContents() { @@ -442,10 +442,10 @@ TEST_F(SQLitePersistentCookieStoreTest, TestLoadOldSessionCookies) { InitializeStore(false, true); // Add a session cookie. - store_->AddCookie(CanonicalCookie(GURL(), "C", "D", "sessioncookie.com", "/", - base::Time::Now(), base::Time(), - base::Time::Now(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + store_->AddCookie(CanonicalCookie( + GURL(), "C", "D", "sessioncookie.com", "/", base::Time::Now(), + base::Time(), base::Time::Now(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Force the store to write its data to the disk. DestroyStore(); @@ -469,10 +469,10 @@ TEST_F(SQLitePersistentCookieStoreTest, TestDontLoadOldSessionCookies) { InitializeStore(false, true); // Add a session cookie. - store_->AddCookie(CanonicalCookie(GURL(), "C", "D", "sessioncookie.com", "/", - base::Time::Now(), base::Time(), - base::Time::Now(), false, false, false, - COOKIE_PRIORITY_DEFAULT)); + store_->AddCookie(CanonicalCookie( + GURL(), "C", "D", "sessioncookie.com", "/", base::Time::Now(), + base::Time(), base::Time::Now(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Force the store to write its data to the disk. DestroyStore(); @@ -499,16 +499,16 @@ TEST_F(SQLitePersistentCookieStoreTest, PersistIsPersistent) { static const char kPersistentName[] = "persistent"; // Add a session cookie. - store_->AddCookie(CanonicalCookie(GURL(), kSessionName, "val", - "sessioncookie.com", "/", base::Time::Now(), - base::Time(), base::Time::Now(), false, - false, false, COOKIE_PRIORITY_DEFAULT)); + store_->AddCookie(CanonicalCookie( + GURL(), kSessionName, "val", "sessioncookie.com", "/", base::Time::Now(), + base::Time(), base::Time::Now(), false, false, + CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Add a persistent cookie. store_->AddCookie(CanonicalCookie( GURL(), kPersistentName, "val", "sessioncookie.com", "/", base::Time::Now() - base::TimeDelta::FromDays(1), base::Time::Now() + base::TimeDelta::FromDays(1), base::Time::Now(), - false, false, false, COOKIE_PRIORITY_DEFAULT)); + false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_DEFAULT)); // Force the store to write its data to the disk. DestroyStore(); @@ -552,21 +552,21 @@ TEST_F(SQLitePersistentCookieStoreTest, PriorityIsPersistent) { GURL(), kLowName, kCookieValue, kCookieDomain, kCookiePath, base::Time::Now() - base::TimeDelta::FromMinutes(1), base::Time::Now() + base::TimeDelta::FromDays(1), base::Time::Now(), - false, false, false, COOKIE_PRIORITY_LOW)); + false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_LOW)); // Add a medium-priority persistent cookie. store_->AddCookie(CanonicalCookie( GURL(), kMediumName, kCookieValue, kCookieDomain, kCookiePath, base::Time::Now() - base::TimeDelta::FromMinutes(2), base::Time::Now() + base::TimeDelta::FromDays(1), base::Time::Now(), - false, false, false, COOKIE_PRIORITY_MEDIUM)); + false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_MEDIUM)); // Add a high-priority peristent cookie. store_->AddCookie(CanonicalCookie( GURL(), kHighName, kCookieValue, kCookieDomain, kCookiePath, base::Time::Now() - base::TimeDelta::FromMinutes(3), base::Time::Now() + base::TimeDelta::FromDays(1), base::Time::Now(), - false, false, false, COOKIE_PRIORITY_HIGH)); + false, false, CookieSameSite::DEFAULT_MODE, COOKIE_PRIORITY_HIGH)); // Force the store to write its data to the disk. DestroyStore(); @@ -601,6 +601,64 @@ TEST_F(SQLitePersistentCookieStoreTest, PriorityIsPersistent) { STLDeleteElements(&cookies); } +TEST_F(SQLitePersistentCookieStoreTest, SameSiteIsPersistent) { + const char kNoneName[] = "none"; + const char kLaxName[] = "lax"; + const char kStrictName[] = "strict"; + const char kCookieDomain[] = "sessioncookie.com"; + const char kCookieValue[] = "value"; + const char kCookiePath[] = "/"; + + InitializeStore(false, true); + + // Add a non-samesite cookie. + store_->AddCookie(CanonicalCookie( + GURL(), kNoneName, kCookieValue, kCookieDomain, kCookiePath, + base::Time::Now() - base::TimeDelta::FromMinutes(1), + base::Time::Now() + base::TimeDelta::FromDays(1), base::Time::Now(), + false, false, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_DEFAULT)); + + // Add a lax-samesite persistent cookie. + store_->AddCookie(CanonicalCookie( + GURL(), kLaxName, kCookieValue, kCookieDomain, kCookiePath, + base::Time::Now() - base::TimeDelta::FromMinutes(2), + base::Time::Now() + base::TimeDelta::FromDays(1), base::Time::Now(), + false, false, CookieSameSite::LAX_MODE, COOKIE_PRIORITY_DEFAULT)); + + // Add a strict-samesite peristent cookie. + store_->AddCookie(CanonicalCookie( + GURL(), kStrictName, kCookieValue, kCookieDomain, kCookiePath, + base::Time::Now() - base::TimeDelta::FromMinutes(3), + base::Time::Now() + base::TimeDelta::FromDays(1), base::Time::Now(), + false, false, CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT)); + + // Force the store to write its data to the disk. + DestroyStore(); + + // Create a store that loads session cookie and test that the priority + // attribute values are restored. + CanonicalCookieVector cookies; + CreateAndLoad(false, true, &cookies); + ASSERT_EQ(3U, cookies.size()); + + // Put the cookies into a map, by name, for comparison below. + std::map<std::string, CanonicalCookie*> cookie_map; + for (const auto& cookie : cookies) + cookie_map[cookie->Name()] = cookie; + + // Validate that each cookie has the correct SameSite. + ASSERT_EQ(1u, cookie_map.count(kNoneName)); + EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie_map[kNoneName]->SameSite()); + + ASSERT_EQ(1u, cookie_map.count(kLaxName)); + EXPECT_EQ(CookieSameSite::LAX_MODE, cookie_map[kLaxName]->SameSite()); + + ASSERT_EQ(1u, cookie_map.count(kStrictName)); + EXPECT_EQ(CookieSameSite::STRICT_MODE, cookie_map[kStrictName]->SameSite()); + + STLDeleteElements(&cookies); +} + TEST_F(SQLitePersistentCookieStoreTest, UpdateToEncryption) { CanonicalCookieVector cookies; diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index a2da83a..fef773d 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc @@ -2664,7 +2664,7 @@ TEST_F(URLRequestTest, SameSiteCookiesEnabled) { { TestDelegate d; scoped_ptr<URLRequest> req(default_context_.CreateRequest( - test_server.GetURL("/set-cookie?SameSiteCookieToSet=1;SameSite"), + test_server.GetURL("/set-cookie?SameSiteCookieToSet=1;SameSite=Strict"), DEFAULT_PRIORITY, &d)); req->Start(); base::RunLoop().Run(); |