forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
restricted_cookie_manager.h
165 lines (138 loc) · 6.29 KB
/
restricted_cookie_manager.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_NETWORK_RESTRICTED_COOKIE_MANAGER_H_
#define SERVICES_NETWORK_RESTRICTED_COOKIE_MANAGER_H_
#include <string>
#include "base/component_export.h"
#include "base/containers/linked_list.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_change_dispatcher.h"
#include "net/cookies/cookie_inclusion_status.h"
#include "net/cookies/cookie_store.h"
#include "net/cookies/site_for_cookies.h"
#include "services/network/public/mojom/cookie_access_observer.mojom.h"
#include "services/network/public/mojom/restricted_cookie_manager.mojom.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace net {
class CookieStore;
} // namespace net
namespace network {
class CookieSettings;
// RestrictedCookieManager implementation.
//
// Instances of this class must be created and used on the sequence that hosts
// the CookieStore passed to the constructor.
class COMPONENT_EXPORT(NETWORK_SERVICE) RestrictedCookieManager
: public mojom::RestrictedCookieManager {
public:
// All the pointers passed to the constructor are expected to point to
// objects that will outlive |this|.
RestrictedCookieManager(
mojom::RestrictedCookieManagerRole role,
net::CookieStore* cookie_store,
const CookieSettings* cookie_settings,
const url::Origin& origin,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
mojo::PendingRemote<mojom::CookieAccessObserver> cookie_observer);
~RestrictedCookieManager() override;
void OverrideSiteForCookiesForTesting(
const net::SiteForCookies& new_site_for_cookies) {
site_for_cookies_ = new_site_for_cookies;
}
void OverrideOriginForTesting(const url::Origin& new_origin) {
origin_ = new_origin;
}
void OverrideTopFrameOriginForTesting(
const url::Origin& new_top_frame_origin) {
top_frame_origin_ = new_top_frame_origin;
}
const CookieSettings* cookie_settings() const { return cookie_settings_; }
void GetAllForUrl(const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
mojom::CookieManagerGetOptionsPtr options,
GetAllForUrlCallback callback) override;
void SetCanonicalCookie(const net::CanonicalCookie& cookie,
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
SetCanonicalCookieCallback callback) override;
void AddChangeListener(
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
mojo::PendingRemote<mojom::CookieChangeListener> listener,
AddChangeListenerCallback callback) override;
void SetCookieFromString(const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
const std::string& cookie,
SetCookieFromStringCallback callback) override;
void GetCookiesString(const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
GetCookiesStringCallback callback) override;
void CookiesEnabledFor(const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
CookiesEnabledForCallback callback) override;
private:
// The state associated with a CookieChangeListener.
class Listener;
// Feeds a net::CookieList to a GetAllForUrl() callback.
void CookieListToGetAllForUrlCallback(
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
const net::CookieOptions& net_options,
mojom::CookieManagerGetOptionsPtr options,
GetAllForUrlCallback callback,
const net::CookieAccessResultList& cookie_list,
const net::CookieAccessResultList& excluded_cookies);
// Reports the result of setting the cookie to |network_context_client_|, and
// invokes the user callback.
void SetCanonicalCookieResult(const GURL& url,
const net::SiteForCookies& site_for_cookies,
const net::CanonicalCookie& cookie,
const net::CookieOptions& net_options,
SetCanonicalCookieCallback user_callback,
net::CookieAccessResult access_result);
// Called when the Mojo pipe associated with a listener is closed.
void RemoveChangeListener(Listener* listener);
// Ensures that this instance may access the cookies for a given URL.
//
// Returns true if the access should be allowed, or false if it should be
// blocked.
//
// |cookie_being_set| should be non-nullptr if setting a cookie, and should be
// nullptr otherwise (getting cookies, subscribing to cookie changes).
//
// If the access would not be allowed, this helper calls
// mojo::ReportBadMessage(), which closes the pipe.
bool ValidateAccessToCookiesAt(
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
const net::CanonicalCookie* cookie_being_set = nullptr);
const mojom::RestrictedCookieManagerRole role_;
net::CookieStore* const cookie_store_;
const CookieSettings* const cookie_settings_;
url::Origin origin_;
net::SiteForCookies site_for_cookies_;
url::Origin top_frame_origin_;
mojo::Remote<mojom::CookieAccessObserver> cookie_observer_;
base::LinkedList<Listener> listeners_;
SEQUENCE_CHECKER(sequence_checker_);
base::WeakPtrFactory<RestrictedCookieManager> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(RestrictedCookieManager);
};
} // namespace network
#endif // SERVICES_NETWORK_RESTRICTED_COOKIE_MANAGER_H_