1 // Copyright 2021 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/base/network_delegate.h"
6
7 #include "net/cookies/canonical_cookie.h"
8 #include "net/cookies/canonical_cookie_test_helpers.h"
9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace net {
13
14 using testing::_;
15 using testing::ElementsAre;
16 using testing::IsEmpty;
17 using testing::UnorderedElementsAre;
18
19 namespace {
20
21 constexpr char kURL[] = "example.test";
22
MakeCookie(const std::string & name)23 CanonicalCookie MakeCookie(const std::string& name) {
24 return *CanonicalCookie::CreateUnsafeCookieForTesting(
25 name, "value", kURL, /*path=*/"/", /*creation=*/base::Time(),
26 /*expiration=*/base::Time(), /*last_access=*/base::Time(),
27 /*last_update=*/base::Time(),
28 /*secure=*/true, /*httponly=*/false, CookieSameSite::UNSPECIFIED,
29 CookiePriority::COOKIE_PRIORITY_DEFAULT);
30 }
31
Include()32 CookieAccessResult Include() {
33 return {};
34 }
35
Exclude(CookieInclusionStatus::ExclusionReason reason)36 CookieAccessResult Exclude(CookieInclusionStatus::ExclusionReason reason) {
37 return CookieAccessResult(CookieInclusionStatus::MakeFromReasonsForTesting(
38 /*exclusions=*/{reason}));
39 }
40
41 } // namespace
42
TEST(NetworkDelegateTest,ExcludeAllCookies)43 TEST(NetworkDelegateTest, ExcludeAllCookies) {
44 CookieAccessResultList maybe_included_cookies = {
45 {MakeCookie("1"), Include()}, {MakeCookie("2"), Include()}};
46
47 CookieAccessResultList excluded_cookies = {
48 {MakeCookie("3"),
49 Exclude(CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY)}};
50
51 NetworkDelegate::ExcludeAllCookies(
52 CookieInclusionStatus::ExclusionReason::EXCLUDE_USER_PREFERENCES,
53 maybe_included_cookies, excluded_cookies);
54
55 EXPECT_THAT(maybe_included_cookies, IsEmpty());
56 EXPECT_THAT(
57 excluded_cookies,
58 UnorderedElementsAre(
59 MatchesCookieWithAccessResult(
60 MatchesCookieWithName("1"),
61 MatchesCookieAccessResult(
62 HasExactlyExclusionReasonsForTesting(
63 std::vector<CookieInclusionStatus::ExclusionReason>{
64 CookieInclusionStatus::ExclusionReason::
65 EXCLUDE_USER_PREFERENCES}),
66 _, _, _)),
67 MatchesCookieWithAccessResult(
68 MatchesCookieWithName("2"),
69 MatchesCookieAccessResult(
70 HasExactlyExclusionReasonsForTesting(
71 std::vector<CookieInclusionStatus::ExclusionReason>{
72 CookieInclusionStatus::ExclusionReason::
73 EXCLUDE_USER_PREFERENCES}),
74 _, _, _)),
75 MatchesCookieWithAccessResult(
76 MatchesCookieWithName("3"),
77 MatchesCookieAccessResult(
78 HasExactlyExclusionReasonsForTesting(
79 std::vector<CookieInclusionStatus::ExclusionReason>{
80 CookieInclusionStatus::ExclusionReason::
81 EXCLUDE_SECURE_ONLY,
82 CookieInclusionStatus::ExclusionReason::
83 EXCLUDE_USER_PREFERENCES}),
84 _, _, _))));
85 }
86
TEST(NetworkDelegateTest,MoveExcludedCookies)87 TEST(NetworkDelegateTest, MoveExcludedCookies) {
88 CookieAccessResultList maybe_included_cookies = {
89 {MakeCookie("1"), Include()},
90 {MakeCookie("2"),
91 Exclude(CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY)},
92 {MakeCookie("3"), Include()}};
93
94 CookieAccessResultList excluded_cookies = {{
95 MakeCookie("4"),
96 Exclude(CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY),
97 }};
98
99 NetworkDelegate::MoveExcludedCookies(maybe_included_cookies,
100 excluded_cookies);
101
102 EXPECT_THAT(
103 maybe_included_cookies,
104 ElementsAre(MatchesCookieWithAccessResult(
105 MatchesCookieWithName("1"),
106 MatchesCookieAccessResult(IsInclude(), _, _, _)),
107 MatchesCookieWithAccessResult(
108 MatchesCookieWithName("3"),
109 MatchesCookieAccessResult(IsInclude(), _, _, _))));
110 EXPECT_THAT(
111 excluded_cookies,
112 UnorderedElementsAre(
113 MatchesCookieWithAccessResult(
114 MatchesCookieWithName("2"),
115 MatchesCookieAccessResult(
116 HasExactlyExclusionReasonsForTesting(
117 std::vector<CookieInclusionStatus::ExclusionReason>{
118 CookieInclusionStatus::ExclusionReason::
119 EXCLUDE_SECURE_ONLY}),
120 _, _, _)),
121 MatchesCookieWithAccessResult(
122 MatchesCookieWithName("4"),
123 MatchesCookieAccessResult(
124 HasExactlyExclusionReasonsForTesting(
125 std::vector<CookieInclusionStatus::ExclusionReason>{
126 CookieInclusionStatus::ExclusionReason::
127 EXCLUDE_SECURE_ONLY}),
128 _, _, _))));
129 }
130
131 } // namespace net
132