-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathurl_request_context_config.h
285 lines (242 loc) · 9.93 KB
/
url_request_context_config.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
// Copyright 2014 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 COMPONENTS_CRONET_URL_REQUEST_CONTEXT_CONFIG_H_
#define COMPONENTS_CRONET_URL_REQUEST_CONTEXT_CONFIG_H_
#include <memory>
#include <string>
#include <vector>
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/optional.h"
#include "base/time/time.h"
#include "base/values.h"
#include "net/base/hash_value.h"
#include "net/cert/cert_verifier.h"
#include "net/http/http_network_session.h"
#include "net/nqe/effective_connection_type.h"
namespace net {
class CertVerifier;
struct QuicParams;
class URLRequestContextBuilder;
} // namespace net
namespace cronet {
// Common configuration parameters used by Cronet to configure
// URLRequestContext.
// TODO(mgersh): This shouldn't be a struct, and experimental option parsing
// should be kept more separate from applying the configuration.
struct URLRequestContextConfig {
// Type of HTTP cache.
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.net.impl
enum HttpCacheType {
// No HTTP cache.
DISABLED,
// HTTP cache persisted to disk.
DISK,
// HTTP cache kept in memory.
MEMORY,
};
// App-provided hint that server supports QUIC.
struct QuicHint {
QuicHint(const std::string& host, int port, int alternate_port);
~QuicHint();
// Host name of the server that supports QUIC.
const std::string host;
// Port of the server that supports QUIC.
const int port;
// Alternate protocol port.
const int alternate_port;
private:
DISALLOW_COPY_AND_ASSIGN(QuicHint);
};
// Public-Key-Pinning configuration structure.
struct Pkp {
Pkp(const std::string& host,
bool include_subdomains,
const base::Time& expiration_date);
~Pkp();
// Host name.
const std::string host;
// Pin hashes (currently SHA256 only).
net::HashValueVector pin_hashes;
// Indicates whether the pinning should apply to the pinned host subdomains.
const bool include_subdomains;
// Expiration date for the pins.
const base::Time expiration_date;
private:
DISALLOW_COPY_AND_ASSIGN(Pkp);
};
// Simulated headers, used to preconfigure the Reporting API and Network Error
// Logging before receiving those actual configuration headers from the
// origins.
struct PreloadedNelAndReportingHeader {
PreloadedNelAndReportingHeader(const url::Origin& origin,
std::string value);
~PreloadedNelAndReportingHeader();
// Origin that is "sending" this header.
const url::Origin origin;
// Value of the header that is "sent".
const std::string value;
};
URLRequestContextConfig(
// Enable QUIC.
bool enable_quic,
// QUIC User Agent ID.
const std::string& quic_user_agent_id,
// Enable SPDY.
bool enable_spdy,
// Enable Brotli.
bool enable_brotli,
// Type of http cache.
HttpCacheType http_cache,
// Max size of http cache in bytes.
int http_cache_max_size,
// Disable caching for HTTP responses. Other information may be stored in
// the cache.
bool load_disable_cache,
// Storage path for http cache and cookie storage.
const std::string& storage_path,
// Accept-Language request header field.
const std::string& accept_language,
// User-Agent request header field.
const std::string& user_agent,
// JSON encoded experimental options.
const std::string& experimental_options,
// MockCertVerifier to use for testing purposes.
std::unique_ptr<net::CertVerifier> mock_cert_verifier,
// Enable network quality estimator.
bool enable_network_quality_estimator,
// Enable bypassing of public key pinning for local trust anchors
bool bypass_public_key_pinning_for_local_trust_anchors,
// Optional network thread priority.
// On Android, corresponds to android.os.Process.setThreadPriority()
// values. On iOS, corresponds to NSThread::setThreadPriority values. Do
// not specify for other targets.
base::Optional<double> network_thread_priority);
~URLRequestContextConfig();
// Configures |context_builder| based on |this|.
void ConfigureURLRequestContextBuilder(
net::URLRequestContextBuilder* context_builder);
// Enable QUIC.
const bool enable_quic;
// QUIC User Agent ID.
const std::string quic_user_agent_id;
// Enable SPDY.
const bool enable_spdy;
// Enable Brotli.
const bool enable_brotli;
// Type of http cache.
const HttpCacheType http_cache;
// Max size of http cache in bytes.
const int http_cache_max_size;
// Disable caching for HTTP responses. Other information may be stored in
// the cache.
const bool load_disable_cache;
// Storage path for http cache and cookie storage.
const std::string storage_path;
// Accept-Language request header field.
const std::string accept_language;
// User-Agent request header field.
const std::string user_agent;
// Certificate verifier for testing.
std::unique_ptr<net::CertVerifier> mock_cert_verifier;
// Enable Network Quality Estimator (NQE).
const bool enable_network_quality_estimator;
// Enable public key pinning bypass for local trust anchors.
const bool bypass_public_key_pinning_for_local_trust_anchors;
// App-provided list of servers that support QUIC.
std::vector<std::unique_ptr<QuicHint>> quic_hints;
// The list of public key pins.
std::vector<std::unique_ptr<Pkp>> pkp_list;
// Enable DNS cache persistence.
bool enable_host_cache_persistence = false;
// Minimum time in milliseconds between writing the HostCache contents to
// prefs. Only relevant when |enable_host_cache_persistence| is true.
int host_cache_persistence_delay_ms = 60000;
// Experimental options that are recognized by the config parser.
std::unique_ptr<base::DictionaryValue> effective_experimental_options =
nullptr;
// If set, forces NQE to return the set value as the effective connection
// type.
base::Optional<net::EffectiveConnectionType>
nqe_forced_effective_connection_type;
// Preloaded Report-To headers, to preconfigure the Reporting API.
std::vector<PreloadedNelAndReportingHeader> preloaded_report_to_headers;
// Preloaded NEL headers, to preconfigure Network Error Logging.
std::vector<PreloadedNelAndReportingHeader> preloaded_nel_headers;
// Optional network thread priority.
// On Android, corresponds to android.os.Process.setThreadPriority() values.
// On iOS, corresponds to NSThread::setThreadPriority values.
const base::Optional<double> network_thread_priority;
private:
// Parses experimental options and makes appropriate changes to settings in
// the URLRequestContextConfig and URLRequestContextBuilder.
void ParseAndSetExperimentalOptions(
net::URLRequestContextBuilder* context_builder,
net::HttpNetworkSession::Params* session_params,
net::QuicParams* quic_params);
// Experimental options encoded as a string in a JSON format containing
// experiments and their corresponding configuration options. The format
// is a JSON object with the name of the experiment as the key, and the
// configuration options as the value. An example:
// {"experiment1": {"option1": "option_value1", "option2":
// "option_value2",
// ...}, "experiment2: {"option3", "option_value3", ...}, ...}
const std::string experimental_options;
DISALLOW_COPY_AND_ASSIGN(URLRequestContextConfig);
};
// Stores intermediate state for URLRequestContextConfig. Initializes with
// (mostly) sane defaults, then the appropriate member variables can be
// modified, and it can be finalized with Build().
struct URLRequestContextConfigBuilder {
URLRequestContextConfigBuilder();
~URLRequestContextConfigBuilder();
// Finalize state into a URLRequestContextConfig. Must only be called once,
// as once |mock_cert_verifier| is moved into a URLRequestContextConfig, it
// cannot be used again.
std::unique_ptr<URLRequestContextConfig> Build();
// Enable QUIC.
bool enable_quic = true;
// QUIC User Agent ID.
std::string quic_user_agent_id = "";
// Enable SPDY.
bool enable_spdy = true;
// Enable Brotli.
bool enable_brotli = false;
// Type of http cache.
URLRequestContextConfig::HttpCacheType http_cache =
URLRequestContextConfig::DISABLED;
// Max size of http cache in bytes.
int http_cache_max_size = 0;
// Disable caching for HTTP responses. Other information may be stored in
// the cache.
bool load_disable_cache = false;
// Storage path for http cache and cookie storage.
std::string storage_path = "";
// Accept-Language request header field.
std::string accept_language = "";
// User-Agent request header field.
std::string user_agent = "";
// Experimental options encoded as a string in a JSON format containing
// experiments and their corresponding configuration options. The format
// is a JSON object with the name of the experiment as the key, and the
// configuration options as the value. An example:
// {"experiment1": {"option1": "option_value1", "option2": "option_value2",
// ...}, "experiment2: {"option3", "option_value3", ...}, ...}
std::string experimental_options = "{}";
// Certificate verifier for testing.
std::unique_ptr<net::CertVerifier> mock_cert_verifier = nullptr;
// Enable network quality estimator.
bool enable_network_quality_estimator = false;
// Enable public key pinning bypass for local trust anchors.
bool bypass_public_key_pinning_for_local_trust_anchors = true;
// Optional network thread priority.
// On Android, corresponds to android.os.Process.setThreadPriority() values.
// On iOS, corresponds to NSThread::setThreadPriority values.
// Do not specify for other targets.
base::Optional<double> network_thread_priority;
private:
DISALLOW_COPY_AND_ASSIGN(URLRequestContextConfigBuilder);
};
} // namespace cronet
#endif // COMPONENTS_CRONET_URL_REQUEST_CONTEXT_CONFIG_H_