forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnetwork_context.h
299 lines (248 loc) · 12.4 KB
/
network_context.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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
// 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_NETWORK_CONTEXT_H_
#define SERVICES_NETWORK_NETWORK_CONTEXT_H_
#include <stdint.h>
#include <memory>
#include <set>
#include <string>
#include <vector>
#include "base/callback.h"
#include "base/component_export.h"
#include "base/containers/unique_ptr_adapters.h"
#include "base/files/file.h"
#include "base/macros.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/strong_binding_set.h"
#include "services/network/cookie_manager.h"
#include "services/network/http_cache_data_remover.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/restricted_cookie_manager.mojom.h"
#include "services/network/public/mojom/tcp_socket.mojom.h"
#include "services/network/public/mojom/udp_socket.mojom.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h"
#include "services/network/public/mojom/websocket.mojom.h"
#include "services/network/socket_factory.h"
#include "services/network/url_request_context_owner.h"
namespace net {
class CertVerifier;
class HostResolver;
class HttpAuthPreferences;
class NetworkQualityEstimator;
class ReportSender;
class StaticHttpUserAgentSettings;
class URLRequestContext;
} // namespace net
namespace certificate_transparency {
class ChromeRequireCTDelegate;
class TreeStateTracker;
class STHReporter;
} // namespace certificate_transparency
namespace network {
class NetworkService;
class ResourceScheduler;
class ResourceSchedulerClient;
class URLLoaderFactory;
class URLRequestContextBuilderMojo;
class WebSocketFactory;
// A NetworkContext creates and manages access to a URLRequestContext.
//
// When the network service is enabled, NetworkContexts are created through
// NetworkService's mojo interface and are owned jointly by the NetworkService
// and the NetworkContextPtr used to talk to them, and the NetworkContext is
// destroyed when either one is torn down.
//
// When the network service is disabled, NetworkContexts may be created through
// NetworkService::CreateNetworkContextWithBuilder, and take in a
// URLRequestContextBuilderMojo to seed construction of the NetworkContext's
// URLRequestContext. When that happens, the consumer takes ownership of the
// NetworkContext directly, has direct access to its URLRequestContext, and is
// responsible for destroying it before the NetworkService.
class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkContext
: public mojom::NetworkContext {
public:
using OnConnectionCloseCallback =
base::OnceCallback<void(NetworkContext* network_context)>;
NetworkContext(NetworkService* network_service,
mojom::NetworkContextRequest request,
mojom::NetworkContextParamsPtr params,
OnConnectionCloseCallback on_connection_close_callback =
OnConnectionCloseCallback());
// DEPRECATED: Creates an in-process NetworkContext with a partially
// pre-populated URLRequestContextBuilderMojo. This API should not be used
// in new code, as some |params| configuration may be ignored, in favor of
// the pre-configured URLRequestContextBuilderMojo configuration.
NetworkContext(NetworkService* network_service,
mojom::NetworkContextRequest request,
mojom::NetworkContextParamsPtr params,
std::unique_ptr<URLRequestContextBuilderMojo> builder);
// DEPRECATED: Creates a NetworkContext that simply wraps a consumer-provided
// URLRequestContext that is not owned by the NetworkContext.
// TODO(mmenke): Remove this constructor when the network service ships.
NetworkContext(NetworkService* network_service,
mojom::NetworkContextRequest request,
net::URLRequestContext* url_request_context);
~NetworkContext() override;
// Sets a global CertVerifier to use when initializing all profiles.
static void SetCertVerifierForTesting(net::CertVerifier* cert_verifier);
// Whether the NetworkContext should be used by all NetworkContexts to
// validate certs on some platforms. May only be set to true the first
// NetworkContext created using the NetworkService. Destroying the
// NetworkContext with this set to true will destroy all other
// NetworkContexts.
bool UseToValidateCerts() const;
net::URLRequestContext* url_request_context() { return url_request_context_; }
NetworkService* network_service() { return network_service_; }
ResourceScheduler* resource_scheduler() { return resource_scheduler_.get(); }
bool block_third_party_cookies() const { return block_third_party_cookies_; }
// Creates a URLLoaderFactory with a ResourceSchedulerClient specified. This
// is used to reuse the existing ResourceSchedulerClient for cloned
// URLLoaderFactory.
void CreateURLLoaderFactory(
mojom::URLLoaderFactoryRequest request,
network::mojom::URLLoaderFactoryParamsPtr params,
scoped_refptr<ResourceSchedulerClient> resource_scheduler_client);
// mojom::NetworkContext implementation:
void CreateURLLoaderFactory(
mojom::URLLoaderFactoryRequest request,
network::mojom::URLLoaderFactoryParamsPtr params) override;
void GetCookieManager(mojom::CookieManagerRequest request) override;
void GetRestrictedCookieManager(mojom::RestrictedCookieManagerRequest request,
const url::Origin& origin) override;
void ClearNetworkingHistorySince(
base::Time time,
base::OnceClosure completion_callback) override;
void ClearHttpCache(base::Time start_time,
base::Time end_time,
mojom::ClearDataFilterPtr filter,
ClearHttpCacheCallback callback) override;
void ClearChannelIds(base::Time start_time,
base::Time end_time,
mojom::ClearDataFilterPtr filter,
ClearChannelIdsCallback callback) override;
void ClearHostCache(mojom::ClearDataFilterPtr filter,
ClearHostCacheCallback callback) override;
void ClearHttpAuthCache(base::Time start_time,
ClearHttpAuthCacheCallback callback) override;
void ClearReportingCacheReports(
mojom::ClearDataFilterPtr filter,
ClearReportingCacheReportsCallback callback) override;
void ClearReportingCacheClients(
mojom::ClearDataFilterPtr filter,
ClearReportingCacheClientsCallback callback) override;
void ClearNetworkErrorLogging(
mojom::ClearDataFilterPtr filter,
ClearNetworkErrorLoggingCallback callback) override;
void SetNetworkConditions(const std::string& profile_id,
mojom::NetworkConditionsPtr conditions) override;
void SetAcceptLanguage(const std::string& new_accept_language) override;
void SetCTPolicy(
const std::vector<std::string>& required_hosts,
const std::vector<std::string>& excluded_hosts,
const std::vector<std::string>& excluded_spkis,
const std::vector<std::string>& excluded_legacy_spkis) override;
void CreateUDPSocket(mojom::UDPSocketRequest request,
mojom::UDPSocketReceiverPtr receiver) override;
void CreateTCPServerSocket(
const net::IPEndPoint& local_addr,
uint32_t backlog,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
mojom::TCPServerSocketRequest request,
CreateTCPServerSocketCallback callback) override;
void CreateTCPConnectedSocket(
const base::Optional<net::IPEndPoint>& local_addr,
const net::AddressList& remote_addr_list,
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
mojom::TCPConnectedSocketRequest request,
mojom::SocketObserverPtr observer,
CreateTCPConnectedSocketCallback callback) override;
void CreateWebSocket(mojom::WebSocketRequest request,
int32_t process_id,
int32_t render_frame_id,
const url::Origin& origin,
mojom::AuthenticationHandlerPtr auth_handler) override;
void CreateNetLogExporter(mojom::NetLogExporterRequest request) override;
void BlockThirdPartyCookies(bool block) override;
void AddHSTSForTesting(const std::string& host,
base::Time expiry,
bool include_subdomains,
AddHSTSForTestingCallback callback) override;
void SetFailingHttpTransactionForTesting(
int32_t rv,
SetFailingHttpTransactionForTestingCallback callback) override;
// Disables use of QUIC by the NetworkContext.
void DisableQuic();
// Destroys the specified URLLoaderFactory. Called by the URLLoaderFactory
// itself when it has no open pipes.
void DestroyURLLoaderFactory(URLLoaderFactory* url_loader_factory);
private:
friend class URLRequestContextBuilderMojo;
// Applies the values in |network_context_params| to |builder|, and builds
// the URLRequestContext. If |out_http_user_agent_settings| is non-null, it
// will be set to point to StaticHttpUserAgentSettings owned by the
// URLRequestContext.
static URLRequestContextOwner ApplyContextParamsToBuilder(
URLRequestContextBuilderMojo* builder,
mojom::NetworkContextParams* network_context_params,
bool quic_disabled,
net::NetLog* net_log,
net::HostResolver* host_resolver,
net::NetworkQualityEstimator* network_quality_estimator,
certificate_transparency::STHReporter* sth_reporter,
std::unique_ptr<certificate_transparency::TreeStateTracker>*
out_tree_state_tracker,
std::unique_ptr<certificate_transparency::ChromeRequireCTDelegate>*
out_require_ct_delegate,
std::unique_ptr<net::ReportSender>* out_certificate_report_sender,
net::StaticHttpUserAgentSettings** out_http_user_agent_settings);
// Invoked when the HTTP cache was cleared. Invokes |callback|.
void OnHttpCacheCleared(ClearHttpCacheCallback callback,
HttpCacheDataRemover* remover);
// On connection errors the NetworkContext destroys itself.
void OnConnectionError();
URLRequestContextOwner MakeURLRequestContext(
mojom::NetworkContextParams* network_context_params);
NetworkService* const network_service_;
std::unique_ptr<ResourceScheduler> resource_scheduler_;
std::unique_ptr<net::HttpAuthPreferences> http_auth_preferences_;
// Holds owning pointer to |url_request_context_|. Will contain a nullptr for
// |url_request_context| when the NetworkContextImpl doesn't own its own
// URLRequestContext.
URLRequestContextOwner url_request_context_owner_;
net::URLRequestContext* url_request_context_;
mojom::NetworkContextParamsPtr params_;
// If non-null, called when the mojo pipe for the NetworkContext is closed.
OnConnectionCloseCallback on_connection_close_callback_;
mojo::Binding<mojom::NetworkContext> binding_;
std::unique_ptr<CookieManager> cookie_manager_;
std::unique_ptr<SocketFactory> socket_factory_;
#if !defined(OS_IOS)
std::unique_ptr<WebSocketFactory> websocket_factory_;
#endif // !defined(OS_IOS)
std::vector<std::unique_ptr<HttpCacheDataRemover>> http_cache_data_removers_;
// This must be below |url_request_context_| so that the URLRequestContext
// outlives all the URLLoaderFactories and URLLoaders that depend on it.
std::set<std::unique_ptr<URLLoaderFactory>, base::UniquePtrComparator>
url_loader_factories_;
mojo::StrongBindingSet<mojom::NetLogExporter> net_log_exporter_bindings_;
mojo::StrongBindingSet<mojom::RestrictedCookieManager>
restricted_cookie_manager_bindings_;
int current_resource_scheduler_client_id_ = 0;
// Owned by the URLRequestContext
net::StaticHttpUserAgentSettings* user_agent_settings_ = nullptr;
// TODO(yhirano): Consult with switches::kDisableResourceScheduler.
constexpr static bool enable_resource_scheduler_ = true;
bool block_third_party_cookies_ = false;
// Pointed to by the TransportSecurityState (owned by the
// URLRequestContext), and must be disconnected from it before it's destroyed.
std::unique_ptr<net::ReportSender> certificate_report_sender_;
std::unique_ptr<certificate_transparency::ChromeRequireCTDelegate>
require_ct_delegate_;
std::unique_ptr<certificate_transparency::TreeStateTracker> ct_tree_tracker_;
DISALLOW_COPY_AND_ASSIGN(NetworkContext);
};
} // namespace network
#endif // SERVICES_NETWORK_NETWORK_CONTEXT_H_