summaryrefslogtreecommitdiff
path: root/chromium/net/cookies/cookie_util_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/cookies/cookie_util_unittest.cc')
-rw-r--r--chromium/net/cookies/cookie_util_unittest.cc143
1 files changed, 137 insertions, 6 deletions
diff --git a/chromium/net/cookies/cookie_util_unittest.cc b/chromium/net/cookies/cookie_util_unittest.cc
index b95e1d6da26..14f8edf50f7 100644
--- a/chromium/net/cookies/cookie_util_unittest.cc
+++ b/chromium/net/cookies/cookie_util_unittest.cc
@@ -1216,13 +1216,11 @@ TEST(CookieUtilTest, AdaptCookieInclusionStatusToBool) {
base::OnceCallback<void(bool)> callback = base::BindLambdaForTesting(
[&result_out](bool result) { result_out = result; });
- base::OnceCallback<void(CanonicalCookie::CookieInclusionStatus)>
- adapted_callback =
- cookie_util::AdaptCookieInclusionStatusToBool(std::move(callback));
+ base::OnceCallback<void(CookieInclusionStatus)> adapted_callback =
+ cookie_util::AdaptCookieInclusionStatusToBool(std::move(callback));
std::move(adapted_callback)
- .Run(CanonicalCookie::CookieInclusionStatus(
- CanonicalCookie::CookieInclusionStatus::EXCLUDE_UNKNOWN_ERROR));
+ .Run(CookieInclusionStatus(CookieInclusionStatus::EXCLUDE_UNKNOWN_ERROR));
EXPECT_FALSE(result_out);
@@ -1233,11 +1231,144 @@ TEST(CookieUtilTest, AdaptCookieInclusionStatusToBool) {
adapted_callback =
cookie_util::AdaptCookieInclusionStatusToBool(std::move(callback));
- std::move(adapted_callback).Run(CanonicalCookie::CookieInclusionStatus());
+ std::move(adapted_callback).Run(CookieInclusionStatus());
EXPECT_TRUE(result_out);
}
+TEST(CookieUtilTest, IsSameSiteCompatPair) {
+ ASSERT_EQ(3, cookie_util::kMinCompatPairNameLength)
+ << "This test assumes that SameSite compatibility pairs have cookie name "
+ "length at least 3.";
+ GURL url("https://www.site.example/path");
+
+ struct {
+ const char* cookie_line_1;
+ const char* cookie_line_2;
+ bool expected_is_same_site_compat_pair;
+ } kTestCases[] = {
+ // Matching cases
+ {"name=value; SameSite=None; Secure", "name_legacy=value", true},
+ {"uid=value; SameSite=None; Secure", "uid_old=value", true},
+ {"name=value; SameSite=None; Secure", "name2=value; Secure", true},
+ {"name_samesite=value; SameSite=None; Secure", "name=value", true},
+ {"__Secure-name=value; SameSite=None; Secure", "name=value", true},
+ {"__Secure-3Pname=value; SameSite=None; Secure", "name=value", true},
+ {"name=value; SameSite=None; Secure; HttpOnly", "name_legacy=value",
+ true},
+ {"name=value; SameSite=None; Secure; Domain=site.example",
+ "name_legacy=value; Secure; Domain=site.example", true},
+ // Fails because cookies are equivalent
+ {"name=value; SameSite=None; Secure", "name=value", false},
+ // Fails SameSite criterion
+ {"name=value", "name_legacy=value", false},
+ {"name=value; SameSite=None", "name_legacy=value", false},
+ {"name=value; SameSite=None; Secure", "name_legacy=value; SameSite=None",
+ false},
+ {"name=value; SameSite=None; Secure",
+ "name_legacy=value; SameSite=None; Secure", false},
+ // Fails Domain criterion
+ {"name=value; SameSite=None; Secure; Domain=site.example",
+ "name_legacy=value", false},
+ {"name=value; SameSite=None; Secure; Domain=www.site.example",
+ "name_legacy=value", false},
+ {"name=value; SameSite=None; Secure",
+ "name_legacy=value; Domain=site.example", false},
+ {"name=value; SameSite=None; Secure",
+ "name_legacy=value; Domain=www.site.example", false},
+ // Fails Path criterion
+ {"name=value; SameSite=None; Secure; Path=/path", "name_legacy=value",
+ false},
+ {"name=value; SameSite=None; Secure; Path=/path",
+ "name_legacy=value; Path=/", false},
+ {"name=value; SameSite=None; Secure; Path=/",
+ "name_legacy=value; Path=/path", false},
+ {"name=value; SameSite=None; Secure", "name_legacy=value; Path=/path",
+ false},
+ // Fails value criterion
+ {"name=value; SameSite=None; Secure", "name_legacy=foobar", false},
+ {"name=value; SameSite=None; Secure", "name_legacy=value2", false},
+ // Fails name length criterion
+ {"id=value; SameSite=None; Secure", "id_legacy=value", false},
+ {"id_samesite=value; SameSite=None; Secure", "id=value", false},
+ {"value; SameSite=None; Secure", "legacy=value", false},
+ // Fails suffix/prefix criterion
+ {"name_samesite=value; SameSite=None; Secure", "name_legacy=value",
+ false},
+ {"name1=value; SameSite=None; Secure", "name2=value", false},
+ };
+
+ for (const auto& test_case : kTestCases) {
+ auto cookie1 = CanonicalCookie::Create(url, test_case.cookie_line_1,
+ base::Time::Now(), base::nullopt);
+ auto cookie2 = CanonicalCookie::Create(url, test_case.cookie_line_2,
+ base::Time::Now(), base::nullopt);
+
+ ASSERT_TRUE(cookie1);
+ ASSERT_TRUE(cookie2);
+ EXPECT_EQ(test_case.expected_is_same_site_compat_pair,
+ cookie_util::IsSameSiteCompatPair(
+ *cookie1, *cookie2, CookieOptions::MakeAllInclusive()));
+ EXPECT_EQ(test_case.expected_is_same_site_compat_pair,
+ cookie_util::IsSameSiteCompatPair(
+ *cookie2, *cookie1, CookieOptions::MakeAllInclusive()));
+ }
+}
+
+TEST(CookieUtilTest, IsSameSiteCompatPair_HttpOnly) {
+ GURL url("https://www.site.example/path");
+ auto new_cookie =
+ CanonicalCookie::Create(url, "name=value; SameSite=None; Secure",
+ base::Time::Now(), base::nullopt);
+ auto legacy_cookie = CanonicalCookie::Create(
+ url, "name_legacy=value", base::Time::Now(), base::nullopt);
+ auto http_only_new_cookie = CanonicalCookie::Create(
+ url, "name=value; SameSite=None; Secure; HttpOnly", base::Time::Now(),
+ base::nullopt);
+ auto http_only_legacy_cookie = CanonicalCookie::Create(
+ url, "name_legacy=value; HttpOnly", base::Time::Now(), base::nullopt);
+ ASSERT_TRUE(new_cookie);
+ ASSERT_TRUE(legacy_cookie);
+ ASSERT_TRUE(http_only_new_cookie);
+ ASSERT_TRUE(http_only_legacy_cookie);
+
+ // Allows HttpOnly access.
+ CookieOptions inclusive_options = CookieOptions::MakeAllInclusive();
+ // Disallows HttpOnly access.
+ CookieOptions restrictive_options;
+ // Allows SameSite but not HttpOnly access. (SameSite shouldn't matter.)
+ CookieOptions same_site_options;
+ same_site_options.set_same_site_cookie_context(
+ CookieOptions::SameSiteCookieContext::MakeInclusive());
+
+ EXPECT_TRUE(cookie_util::IsSameSiteCompatPair(*new_cookie, *legacy_cookie,
+ inclusive_options));
+ EXPECT_TRUE(cookie_util::IsSameSiteCompatPair(
+ *http_only_new_cookie, *legacy_cookie, inclusive_options));
+ EXPECT_TRUE(cookie_util::IsSameSiteCompatPair(
+ *new_cookie, *http_only_legacy_cookie, inclusive_options));
+ EXPECT_TRUE(cookie_util::IsSameSiteCompatPair(
+ *http_only_new_cookie, *http_only_legacy_cookie, inclusive_options));
+
+ EXPECT_TRUE(cookie_util::IsSameSiteCompatPair(*new_cookie, *legacy_cookie,
+ restrictive_options));
+ EXPECT_FALSE(cookie_util::IsSameSiteCompatPair(
+ *http_only_new_cookie, *legacy_cookie, restrictive_options));
+ EXPECT_FALSE(cookie_util::IsSameSiteCompatPair(
+ *new_cookie, *http_only_legacy_cookie, restrictive_options));
+ EXPECT_FALSE(cookie_util::IsSameSiteCompatPair(
+ *http_only_new_cookie, *http_only_legacy_cookie, restrictive_options));
+
+ EXPECT_TRUE(cookie_util::IsSameSiteCompatPair(*new_cookie, *legacy_cookie,
+ same_site_options));
+ EXPECT_FALSE(cookie_util::IsSameSiteCompatPair(
+ *http_only_new_cookie, *legacy_cookie, same_site_options));
+ EXPECT_FALSE(cookie_util::IsSameSiteCompatPair(
+ *new_cookie, *http_only_legacy_cookie, same_site_options));
+ EXPECT_FALSE(cookie_util::IsSameSiteCompatPair(
+ *http_only_new_cookie, *http_only_legacy_cookie, same_site_options));
+}
+
} // namespace
} // namespace net