cookie_deletion_info_unittest.cc 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "net/cookies/cookie_deletion_info.h"
  5. #include "base/test/scoped_feature_list.h"
  6. #include "net/base/features.h"
  7. #include "testing/gtest/include/gtest/gtest.h"
  8. #include "url/gurl.h"
  9. namespace net {
  10. using TimeRange = CookieDeletionInfo::TimeRange;
  11. TEST(CookieDeletionInfoTest, TimeRangeValues) {
  12. TimeRange range;
  13. EXPECT_EQ(base::Time(), range.start());
  14. EXPECT_EQ(base::Time(), range.end());
  15. const base::Time kTestStart = base::Time::FromDoubleT(1000);
  16. const base::Time kTestEnd = base::Time::FromDoubleT(10000);
  17. EXPECT_EQ(kTestStart, TimeRange(kTestStart, base::Time()).start());
  18. EXPECT_EQ(base::Time(), TimeRange(kTestStart, base::Time()).end());
  19. EXPECT_EQ(kTestStart, TimeRange(kTestStart, kTestEnd).start());
  20. EXPECT_EQ(kTestEnd, TimeRange(kTestStart, kTestEnd).end());
  21. TimeRange range2;
  22. range2.SetStart(kTestStart);
  23. EXPECT_EQ(kTestStart, range2.start());
  24. EXPECT_EQ(base::Time(), range2.end());
  25. range2.SetEnd(kTestEnd);
  26. EXPECT_EQ(kTestStart, range2.start());
  27. EXPECT_EQ(kTestEnd, range2.end());
  28. }
  29. TEST(CookieDeletionInfoTest, TimeRangeContains) {
  30. // Default TimeRange matches all time values.
  31. TimeRange range;
  32. EXPECT_TRUE(range.Contains(base::Time::Now()));
  33. EXPECT_TRUE(range.Contains(base::Time::Max()));
  34. // With a start, but no end.
  35. const double kTestMinEpoch = 1000;
  36. range.SetStart(base::Time::FromDoubleT(kTestMinEpoch));
  37. EXPECT_FALSE(range.Contains(base::Time::Min()));
  38. EXPECT_FALSE(range.Contains(base::Time::FromDoubleT(kTestMinEpoch - 1)));
  39. EXPECT_TRUE(range.Contains(base::Time::FromDoubleT(kTestMinEpoch)));
  40. EXPECT_TRUE(range.Contains(base::Time::FromDoubleT(kTestMinEpoch + 1)));
  41. EXPECT_TRUE(range.Contains(base::Time::Max()));
  42. // With an end, but no start.
  43. const double kTestMaxEpoch = 10000000;
  44. range = TimeRange();
  45. range.SetEnd(base::Time::FromDoubleT(kTestMaxEpoch));
  46. EXPECT_TRUE(range.Contains(base::Time::Min()));
  47. EXPECT_TRUE(range.Contains(base::Time::FromDoubleT(kTestMaxEpoch - 1)));
  48. EXPECT_FALSE(range.Contains(base::Time::FromDoubleT(kTestMaxEpoch)));
  49. EXPECT_FALSE(range.Contains(base::Time::FromDoubleT(kTestMaxEpoch + 1)));
  50. EXPECT_FALSE(range.Contains(base::Time::Max()));
  51. // With both a start and an end.
  52. range.SetStart(base::Time::FromDoubleT(kTestMinEpoch));
  53. EXPECT_FALSE(range.Contains(base::Time::Min()));
  54. EXPECT_FALSE(range.Contains(base::Time::FromDoubleT(kTestMinEpoch - 1)));
  55. EXPECT_TRUE(range.Contains(base::Time::FromDoubleT(kTestMinEpoch)));
  56. EXPECT_TRUE(range.Contains(base::Time::FromDoubleT(kTestMinEpoch + 1)));
  57. EXPECT_TRUE(range.Contains(base::Time::FromDoubleT(kTestMaxEpoch - 1)));
  58. EXPECT_FALSE(range.Contains(base::Time::FromDoubleT(kTestMaxEpoch)));
  59. EXPECT_FALSE(range.Contains(base::Time::FromDoubleT(kTestMaxEpoch + 1)));
  60. EXPECT_FALSE(range.Contains(base::Time::Max()));
  61. // And where start==end.
  62. range = TimeRange(base::Time::FromDoubleT(kTestMinEpoch),
  63. base::Time::FromDoubleT(kTestMinEpoch));
  64. EXPECT_FALSE(range.Contains(base::Time::Min()));
  65. EXPECT_FALSE(range.Contains(base::Time::FromDoubleT(kTestMinEpoch - 1)));
  66. EXPECT_TRUE(range.Contains(base::Time::FromDoubleT(kTestMinEpoch)));
  67. EXPECT_FALSE(range.Contains(base::Time::FromDoubleT(kTestMinEpoch + 1)));
  68. }
  69. TEST(CookieDeletionInfoTest, CookieDeletionInfoMatchSessionControl) {
  70. auto persistent_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
  71. "persistent-cookie", "persistent-value", "persistent-domain",
  72. "persistent-path",
  73. /*creation=*/base::Time::Now(),
  74. /*expiration=*/base::Time::Max(),
  75. /*last_access=*/base::Time::Now(),
  76. /*last_update=*/base::Time::Now(),
  77. /*secure=*/true,
  78. /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
  79. CookiePriority::COOKIE_PRIORITY_DEFAULT,
  80. /*same_party=*/false);
  81. auto session_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
  82. "session-cookie", "session-value", "session-domain", "session-path",
  83. /*creation=*/base::Time::Now(),
  84. /*expiration=*/base::Time(),
  85. /*last_access=*/base::Time::Now(),
  86. /*last_update=*/base::Time::Now(),
  87. /*secure=*/true,
  88. /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
  89. CookiePriority::COOKIE_PRIORITY_DEFAULT,
  90. /*same_party=*/false);
  91. CookieDeletionInfo delete_info;
  92. EXPECT_TRUE(delete_info.Matches(
  93. *persistent_cookie,
  94. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  95. /*delegate_treats_url_as_trustworthy=*/false,
  96. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  97. EXPECT_TRUE(delete_info.Matches(
  98. *session_cookie,
  99. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  100. /*delegate_treats_url_as_trustworthy=*/false,
  101. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  102. delete_info.session_control =
  103. CookieDeletionInfo::SessionControl::PERSISTENT_COOKIES;
  104. EXPECT_TRUE(delete_info.Matches(
  105. *persistent_cookie,
  106. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  107. /*delegate_treats_url_as_trustworthy=*/false,
  108. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  109. EXPECT_FALSE(delete_info.Matches(
  110. *session_cookie,
  111. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  112. /*delegate_treats_url_as_trustworthy=*/false,
  113. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  114. delete_info.session_control =
  115. CookieDeletionInfo::SessionControl::SESSION_COOKIES;
  116. EXPECT_FALSE(delete_info.Matches(
  117. *persistent_cookie,
  118. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  119. /*delegate_treats_url_as_trustworthy=*/false,
  120. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  121. EXPECT_TRUE(delete_info.Matches(
  122. *session_cookie,
  123. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  124. /*delegate_treats_url_as_trustworthy=*/false,
  125. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  126. }
  127. TEST(CookieDeletionInfoTest, CookieDeletionInfoMatchHost) {
  128. auto domain_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
  129. "domain-cookie", "domain-cookie-value",
  130. /*domain=*/".example.com", "/path",
  131. /*creation=*/base::Time::Now(),
  132. /*expiration=*/base::Time::Max(),
  133. /*last_access=*/base::Time::Now(),
  134. /*last_update=*/base::Time::Now(),
  135. /*secure=*/true,
  136. /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
  137. CookiePriority::COOKIE_PRIORITY_DEFAULT,
  138. /*same_party=*/false);
  139. auto host_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
  140. "host-cookie", "host-cookie-value",
  141. /*domain=*/"thehost.hosting.com", "/path",
  142. /*creation=*/base::Time::Now(),
  143. /*expiration=*/base::Time::Max(),
  144. /*last_access=*/base::Time::Now(),
  145. /*last_update=*/base::Time::Now(),
  146. /*secure=*/true,
  147. /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
  148. CookiePriority::COOKIE_PRIORITY_DEFAULT,
  149. /*same_party=*/false);
  150. EXPECT_TRUE(domain_cookie->IsDomainCookie());
  151. EXPECT_TRUE(host_cookie->IsHostCookie());
  152. CookieDeletionInfo delete_info;
  153. EXPECT_TRUE(delete_info.Matches(
  154. *domain_cookie,
  155. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  156. /*delegate_treats_url_as_trustworthy=*/false,
  157. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  158. EXPECT_TRUE(delete_info.Matches(
  159. *host_cookie,
  160. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  161. /*delegate_treats_url_as_trustworthy=*/false,
  162. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  163. delete_info.host = "thehost.hosting.com";
  164. EXPECT_FALSE(delete_info.Matches(
  165. *domain_cookie,
  166. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  167. /*delegate_treats_url_as_trustworthy=*/false,
  168. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  169. EXPECT_TRUE(delete_info.Matches(
  170. *host_cookie,
  171. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  172. /*delegate_treats_url_as_trustworthy=*/false,
  173. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  174. delete_info.host = "otherhost.hosting.com";
  175. EXPECT_FALSE(delete_info.Matches(
  176. *domain_cookie,
  177. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  178. /*delegate_treats_url_as_trustworthy=*/false,
  179. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  180. EXPECT_FALSE(delete_info.Matches(
  181. *host_cookie,
  182. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  183. /*delegate_treats_url_as_trustworthy=*/false,
  184. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  185. delete_info.host = "thehost.otherhosting.com";
  186. EXPECT_FALSE(delete_info.Matches(
  187. *domain_cookie,
  188. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  189. /*delegate_treats_url_as_trustworthy=*/false,
  190. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  191. EXPECT_FALSE(delete_info.Matches(
  192. *host_cookie,
  193. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  194. /*delegate_treats_url_as_trustworthy=*/false,
  195. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  196. }
  197. TEST(CookieDeletionInfoTest, CookieDeletionInfoMatchName) {
  198. auto cookie1 = CanonicalCookie::CreateUnsafeCookieForTesting(
  199. "cookie1-name", "cookie1-value",
  200. /*domain=*/".example.com", "/path",
  201. /*creation=*/base::Time::Now(),
  202. /*expiration=*/base::Time::Max(),
  203. /*last_access=*/base::Time::Now(),
  204. /*last_update=*/base::Time::Now(),
  205. /*secure=*/true,
  206. /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
  207. CookiePriority::COOKIE_PRIORITY_DEFAULT,
  208. /*same_party=*/false);
  209. auto cookie2 = CanonicalCookie::CreateUnsafeCookieForTesting(
  210. "cookie2-name", "cookie2-value",
  211. /*domain=*/".example.com", "/path",
  212. /*creation=*/base::Time::Now(),
  213. /*expiration=*/base::Time::Max(),
  214. /*last_access=*/base::Time::Now(),
  215. /*last_update=*/base::Time::Now(),
  216. /*secure=*/true,
  217. /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
  218. CookiePriority::COOKIE_PRIORITY_DEFAULT,
  219. /*same_party=*/false);
  220. CookieDeletionInfo delete_info;
  221. delete_info.name = "cookie1-name";
  222. EXPECT_TRUE(delete_info.Matches(
  223. *cookie1,
  224. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  225. /*delegate_treats_url_as_trustworthy=*/false,
  226. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  227. EXPECT_FALSE(delete_info.Matches(
  228. *cookie2,
  229. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  230. /*delegate_treats_url_as_trustworthy=*/false,
  231. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  232. }
  233. TEST(CookieDeletionInfoTest, CookieDeletionInfoMatchValue) {
  234. auto cookie1 = CanonicalCookie::CreateUnsafeCookieForTesting(
  235. "cookie1-name", "cookie1-value",
  236. /*domain=*/".example.com", "/path",
  237. /*creation=*/base::Time::Now(),
  238. /*expiration=*/base::Time::Max(),
  239. /*last_access=*/base::Time::Now(),
  240. /*last_update=*/base::Time::Now(),
  241. /*secure=*/true,
  242. /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
  243. CookiePriority::COOKIE_PRIORITY_DEFAULT,
  244. /*same_party=*/false);
  245. auto cookie2 = CanonicalCookie::CreateUnsafeCookieForTesting(
  246. "cookie2-name", "cookie2-value",
  247. /*domain=*/".example.com", "/path",
  248. /*creation=*/base::Time::Now(),
  249. /*expiration=*/base::Time::Max(),
  250. /*last_access=*/base::Time::Now(),
  251. /*last_update=*/base::Time::Now(),
  252. /*secure=*/true,
  253. /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
  254. CookiePriority::COOKIE_PRIORITY_DEFAULT,
  255. /*same_party=*/false);
  256. CookieDeletionInfo delete_info;
  257. delete_info.value_for_testing = "cookie2-value";
  258. EXPECT_FALSE(delete_info.Matches(
  259. *cookie1,
  260. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  261. /*delegate_treats_url_as_trustworthy=*/false,
  262. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  263. EXPECT_TRUE(delete_info.Matches(
  264. *cookie2,
  265. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  266. /*delegate_treats_url_as_trustworthy=*/false,
  267. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  268. }
  269. TEST(CookieDeletionInfoTest, CookieDeletionInfoMatchUrl) {
  270. auto cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
  271. "cookie-name", "cookie-value",
  272. /*domain=*/"www.example.com", "/path",
  273. /*creation=*/base::Time::Now(),
  274. /*expiration=*/base::Time::Max(),
  275. /*last_access=*/base::Time::Now(),
  276. /*last_update=*/base::Time::Now(),
  277. /*secure=*/true,
  278. /*httponly=*/false, CookieSameSite::NO_RESTRICTION,
  279. CookiePriority::COOKIE_PRIORITY_DEFAULT,
  280. /*same_party=*/false);
  281. CookieDeletionInfo delete_info;
  282. delete_info.url = GURL("https://www.example.com/path");
  283. EXPECT_TRUE(delete_info.Matches(
  284. *cookie,
  285. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  286. /*delegate_treats_url_as_trustworthy=*/false,
  287. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  288. delete_info.url = GURL("https://www.example.com/another/path");
  289. EXPECT_FALSE(delete_info.Matches(
  290. *cookie,
  291. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  292. /*delegate_treats_url_as_trustworthy=*/false,
  293. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  294. delete_info.url = GURL("http://www.example.com/path");
  295. // Secure cookie on http:// URL -> no match.
  296. EXPECT_FALSE(delete_info.Matches(
  297. *cookie,
  298. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  299. /*delegate_treats_url_as_trustworthy=*/false,
  300. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  301. // Secure cookie on http:// URL, but delegate says treat is as trustworhy ->
  302. // match.
  303. EXPECT_TRUE(delete_info.Matches(
  304. *cookie,
  305. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  306. /*delegate_treats_url_as_trustworthy=*/true,
  307. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  308. }
  309. TEST(CookieDeletionInfoTest, CookieDeletionInfoDomainMatchesDomain) {
  310. CookieDeletionInfo delete_info;
  311. const double kTestMinEpoch = 1000;
  312. const double kTestMaxEpoch = 10000000;
  313. delete_info.creation_range.SetStart(base::Time::FromDoubleT(kTestMinEpoch));
  314. delete_info.creation_range.SetEnd(base::Time::FromDoubleT(kTestMaxEpoch));
  315. auto create_cookie = [kTestMinEpoch](std::string cookie_domain) {
  316. return *CanonicalCookie::CreateUnsafeCookieForTesting(
  317. /*name=*/"test-cookie",
  318. /*value=*/"cookie-value", cookie_domain,
  319. /*path=*/"cookie/path",
  320. /*creation=*/base::Time::FromDoubleT(kTestMinEpoch + 1),
  321. /*expiration=*/base::Time::Max(),
  322. /*last_access=*/base::Time::FromDoubleT(kTestMinEpoch + 1),
  323. /*last_update=*/base::Time::Now(),
  324. /*secure=*/true,
  325. /*httponly=*/false,
  326. /*same_site=*/CookieSameSite::NO_RESTRICTION,
  327. /*priority=*/CookiePriority::COOKIE_PRIORITY_DEFAULT,
  328. /*same_party=*/false);
  329. };
  330. // by default empty domain list and default match action will match.
  331. EXPECT_TRUE(delete_info.Matches(
  332. create_cookie("example.com"),
  333. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  334. /*delegate_treats_url_as_trustworthy=*/false,
  335. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  336. const char kExtensionHostname[] = "mgndgikekgjfcpckkfioiadnlibdjbkf";
  337. // Only using the inclusion list because this is only testing
  338. // DomainMatchesDomainSet and not CookieDeletionInfo::Matches.
  339. delete_info.domains_and_ips_to_delete =
  340. std::set<std::string>({"example.com", "another.com", "192.168.0.1"});
  341. EXPECT_TRUE(delete_info.Matches(
  342. create_cookie(".example.com"),
  343. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  344. /*delegate_treats_url_as_trustworthy=*/false,
  345. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  346. EXPECT_TRUE(delete_info.Matches(
  347. create_cookie("example.com"),
  348. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  349. /*delegate_treats_url_as_trustworthy=*/false,
  350. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  351. EXPECT_TRUE(delete_info.Matches(
  352. create_cookie(".another.com"),
  353. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  354. /*delegate_treats_url_as_trustworthy=*/false,
  355. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  356. EXPECT_TRUE(delete_info.Matches(
  357. create_cookie("192.168.0.1"),
  358. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  359. /*delegate_treats_url_as_trustworthy=*/false,
  360. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  361. EXPECT_FALSE(delete_info.Matches(
  362. create_cookie(".nomatch.com"),
  363. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  364. /*delegate_treats_url_as_trustworthy=*/false,
  365. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  366. EXPECT_FALSE(delete_info.Matches(
  367. create_cookie("192.168.0.2"),
  368. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  369. /*delegate_treats_url_as_trustworthy=*/false,
  370. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  371. EXPECT_FALSE(delete_info.Matches(
  372. create_cookie(kExtensionHostname),
  373. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  374. /*delegate_treats_url_as_trustworthy=*/false,
  375. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  376. }
  377. TEST(CookieDeletionInfoTest, CookieDeletionInfoMatchesDomainList) {
  378. CookieDeletionInfo delete_info;
  379. auto create_cookie = [](std::string cookie_domain) {
  380. return *CanonicalCookie::CreateUnsafeCookieForTesting(
  381. /*name=*/"test-cookie",
  382. /*value=*/"cookie-value", cookie_domain,
  383. /*path=*/"cookie/path",
  384. /*creation=*/base::Time::Now(),
  385. /*expiration=*/base::Time::Max(),
  386. /*last_access=*/base::Time::Now(),
  387. /*last_update=*/base::Time::Now(),
  388. /*secure=*/false,
  389. /*httponly=*/false,
  390. /*same_site=*/CookieSameSite::NO_RESTRICTION,
  391. /*priority=*/CookiePriority::COOKIE_PRIORITY_DEFAULT,
  392. /*same_party=*/false);
  393. };
  394. // With two empty lists (default) should match any domain.
  395. EXPECT_TRUE(delete_info.Matches(
  396. create_cookie("anything.com"),
  397. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  398. /*delegate_treats_url_as_trustworthy=*/false,
  399. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  400. // With only an "to_delete" list.
  401. delete_info.domains_and_ips_to_delete =
  402. std::set<std::string>({"includea.com", "includeb.com"});
  403. EXPECT_TRUE(delete_info.Matches(
  404. create_cookie("includea.com"),
  405. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  406. /*delegate_treats_url_as_trustworthy=*/false,
  407. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  408. EXPECT_TRUE(delete_info.Matches(
  409. create_cookie("includeb.com"),
  410. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  411. /*delegate_treats_url_as_trustworthy=*/false,
  412. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  413. EXPECT_FALSE(delete_info.Matches(
  414. create_cookie("anything.com"),
  415. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  416. /*delegate_treats_url_as_trustworthy=*/false,
  417. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  418. // With only an "to_ignore" list.
  419. delete_info.domains_and_ips_to_delete.clear();
  420. delete_info.domains_and_ips_to_ignore.insert("exclude.com");
  421. EXPECT_TRUE(delete_info.Matches(
  422. create_cookie("anything.com"),
  423. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  424. /*delegate_treats_url_as_trustworthy=*/false,
  425. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  426. EXPECT_FALSE(delete_info.Matches(
  427. create_cookie("exclude.com"),
  428. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  429. /*delegate_treats_url_as_trustworthy=*/false,
  430. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  431. // Now with both lists populated.
  432. //
  433. // +----------------------+
  434. // | to_delete | outside.com
  435. // | |
  436. // | left.com +---------------------+
  437. // | | mid.com | to_ignore |
  438. // | | | |
  439. // +------------|---------+ |
  440. // | right.com |
  441. // | |
  442. // +---------------------+
  443. delete_info.domains_and_ips_to_delete =
  444. std::set<std::string>({"left.com", "mid.com"});
  445. delete_info.domains_and_ips_to_ignore =
  446. std::set<std::string>({"mid.com", "right.com"});
  447. EXPECT_TRUE(delete_info.Matches(
  448. create_cookie("left.com"),
  449. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  450. /*delegate_treats_url_as_trustworthy=*/false,
  451. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  452. EXPECT_FALSE(delete_info.Matches(
  453. create_cookie("mid.com"),
  454. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  455. /*delegate_treats_url_as_trustworthy=*/false,
  456. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  457. EXPECT_FALSE(delete_info.Matches(
  458. create_cookie("right.com"),
  459. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  460. /*delegate_treats_url_as_trustworthy=*/false,
  461. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  462. EXPECT_FALSE(delete_info.Matches(
  463. create_cookie("outside.com"),
  464. CookieAccessParams{net::CookieAccessSemantics::UNKNOWN,
  465. /*delegate_treats_url_as_trustworthy=*/false,
  466. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  467. }
  468. // Test that Matches() works regardless of the cookie access semantics (because
  469. // the IncludeForRequestURL call uses CookieOptions::MakeAllInclusive).
  470. TEST(CookieDeletionInfoTest, MatchesWithCookieAccessSemantics) {
  471. // Cookie with unspecified SameSite.
  472. auto cookie = CanonicalCookie::Create(GURL("https://www.example.com"),
  473. "cookie=1", base::Time::Now(),
  474. /*server_time=*/absl::nullopt,
  475. /*cookie_partition_key=*/absl::nullopt);
  476. CookieDeletionInfo delete_info;
  477. delete_info.url = GURL("https://www.example.com/path");
  478. EXPECT_TRUE(delete_info.Matches(
  479. *cookie,
  480. CookieAccessParams{CookieAccessSemantics::UNKNOWN,
  481. /*delegate_treats_url_as_trustworthy=*/false,
  482. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  483. EXPECT_TRUE(delete_info.Matches(
  484. *cookie,
  485. CookieAccessParams{CookieAccessSemantics::LEGACY,
  486. /*delegate_treats_url_as_trustworthy=*/false,
  487. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  488. EXPECT_TRUE(delete_info.Matches(
  489. *cookie,
  490. CookieAccessParams{CookieAccessSemantics::NONLEGACY,
  491. /*delegate_treats_url_as_trustworthy=*/false,
  492. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  493. }
  494. TEST(CookieDeletionInfoTest, MatchesCookiePartitionKeyCollection) {
  495. const CookiePartitionKey kPartitionKey =
  496. CookiePartitionKey::FromURLForTesting(GURL("https://www.foo.com"));
  497. const CookiePartitionKey kOtherPartitionKey =
  498. CookiePartitionKey::FromURLForTesting(GURL("https://www.bar.com"));
  499. const CookiePartitionKeyCollection kEmptyKeychain;
  500. const CookiePartitionKeyCollection kSingletonKeychain(kPartitionKey);
  501. const CookiePartitionKeyCollection kMultipleKeysKeychain(
  502. {kPartitionKey, kOtherPartitionKey});
  503. const CookiePartitionKeyCollection kAllKeysKeychain =
  504. CookiePartitionKeyCollection::ContainsAll();
  505. const absl::optional<CookiePartitionKey> kPartitionKeyOpt =
  506. absl::make_optional(kPartitionKey);
  507. const CookiePartitionKeyCollection kOtherKeySingletonKeychain(
  508. kOtherPartitionKey);
  509. struct TestCase {
  510. const std::string desc;
  511. const CookiePartitionKeyCollection filter_cookie_partition_key_collection;
  512. const absl::optional<CookiePartitionKey> cookie_partition_key;
  513. bool expects_match;
  514. } test_cases[] = {
  515. // Unpartitioned cookie always matches
  516. {"Unpartitioned empty keychain", kEmptyKeychain, absl::nullopt, true},
  517. {"Unpartitioned singleton keychain", kSingletonKeychain, absl::nullopt,
  518. true},
  519. {"Unpartitioned multiple keys", kMultipleKeysKeychain, absl::nullopt,
  520. true},
  521. {"Unpartitioned all keys", kAllKeysKeychain, absl::nullopt, true},
  522. // Partitioned cookie only matches keychains which contain its partition
  523. // key.
  524. {"Partitioned empty keychain", kEmptyKeychain, kPartitionKeyOpt, false},
  525. {"Partitioned singleton keychain", kSingletonKeychain, kPartitionKeyOpt,
  526. true},
  527. {"Partitioned multiple keys", kMultipleKeysKeychain, kPartitionKeyOpt,
  528. true},
  529. {"Partitioned all keys", kAllKeysKeychain, kPartitionKeyOpt, true},
  530. {"Partitioned mismatched keys", kOtherKeySingletonKeychain,
  531. kPartitionKeyOpt, false},
  532. };
  533. for (const auto& test_case : test_cases) {
  534. SCOPED_TRACE(test_case.desc);
  535. auto cookie = CanonicalCookie::Create(
  536. GURL("https://www.example.com"),
  537. "__Host-foo=bar; Secure; Path=/; Partitioned", base::Time::Now(),
  538. /*server_time=*/absl::nullopt, test_case.cookie_partition_key);
  539. CookieDeletionInfo delete_info;
  540. delete_info.cookie_partition_key_collection =
  541. test_case.filter_cookie_partition_key_collection;
  542. EXPECT_EQ(
  543. test_case.expects_match,
  544. delete_info.Matches(
  545. *cookie, CookieAccessParams{
  546. net::CookieAccessSemantics::UNKNOWN,
  547. /*delegate_treats_url_as_trustworthy=*/false,
  548. CookieSamePartyStatus::kNoSamePartyEnforcement}));
  549. }
  550. }
  551. } // namespace net