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(reason));
38 }
39
40 } // namespace
41
TEST(NetworkDelegateTest,ExcludeAllCookies)42 TEST(NetworkDelegateTest, ExcludeAllCookies) {
43 CookieAccessResultList maybe_included_cookies = {
44 {MakeCookie("1"), Include()}, {MakeCookie("2"), Include()}};
45
46 CookieAccessResultList excluded_cookies = {
47 {MakeCookie("3"),
48 Exclude(CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY)}};
49
50 NetworkDelegate::ExcludeAllCookies(
51 CookieInclusionStatus::ExclusionReason::EXCLUDE_USER_PREFERENCES,
52 maybe_included_cookies, excluded_cookies);
53
54 EXPECT_THAT(maybe_included_cookies, IsEmpty());
55 EXPECT_THAT(
56 excluded_cookies,
57 UnorderedElementsAre(
58 MatchesCookieWithAccessResult(
59 MatchesCookieWithName("1"),
60 MatchesCookieAccessResult(
61 HasExactlyExclusionReasonsForTesting(
62 std::vector<CookieInclusionStatus::ExclusionReason>{
63 CookieInclusionStatus::ExclusionReason::
64 EXCLUDE_USER_PREFERENCES}),
65 _, _, _)),
66 MatchesCookieWithAccessResult(
67 MatchesCookieWithName("2"),
68 MatchesCookieAccessResult(
69 HasExactlyExclusionReasonsForTesting(
70 std::vector<CookieInclusionStatus::ExclusionReason>{
71 CookieInclusionStatus::ExclusionReason::
72 EXCLUDE_USER_PREFERENCES}),
73 _, _, _)),
74 MatchesCookieWithAccessResult(
75 MatchesCookieWithName("3"),
76 MatchesCookieAccessResult(
77 HasExactlyExclusionReasonsForTesting(
78 std::vector<CookieInclusionStatus::ExclusionReason>{
79 CookieInclusionStatus::ExclusionReason::
80 EXCLUDE_SECURE_ONLY,
81 CookieInclusionStatus::ExclusionReason::
82 EXCLUDE_USER_PREFERENCES}),
83 _, _, _))));
84 }
85
TEST(NetworkDelegateTest,MoveExcludedCookies)86 TEST(NetworkDelegateTest, MoveExcludedCookies) {
87 CookieAccessResultList maybe_included_cookies = {
88 {MakeCookie("1"), Include()},
89 {MakeCookie("2"),
90 Exclude(CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY)},
91 {MakeCookie("3"), Include()}};
92
93 CookieAccessResultList excluded_cookies = {{
94 MakeCookie("4"),
95 Exclude(CookieInclusionStatus::ExclusionReason::EXCLUDE_SECURE_ONLY),
96 }};
97
98 NetworkDelegate::MoveExcludedCookies(maybe_included_cookies,
99 excluded_cookies);
100
101 EXPECT_THAT(
102 maybe_included_cookies,
103 ElementsAre(MatchesCookieWithAccessResult(
104 MatchesCookieWithName("1"),
105 MatchesCookieAccessResult(IsInclude(), _, _, _)),
106 MatchesCookieWithAccessResult(
107 MatchesCookieWithName("3"),
108 MatchesCookieAccessResult(IsInclude(), _, _, _))));
109 EXPECT_THAT(
110 excluded_cookies,
111 UnorderedElementsAre(
112 MatchesCookieWithAccessResult(
113 MatchesCookieWithName("2"),
114 MatchesCookieAccessResult(
115 HasExactlyExclusionReasonsForTesting(
116 std::vector<CookieInclusionStatus::ExclusionReason>{
117 CookieInclusionStatus::ExclusionReason::
118 EXCLUDE_SECURE_ONLY}),
119 _, _, _)),
120 MatchesCookieWithAccessResult(
121 MatchesCookieWithName("4"),
122 MatchesCookieAccessResult(
123 HasExactlyExclusionReasonsForTesting(
124 std::vector<CookieInclusionStatus::ExclusionReason>{
125 CookieInclusionStatus::ExclusionReason::
126 EXCLUDE_SECURE_ONLY}),
127 _, _, _))));
128 }
129
130 } // namespace net
131