OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/cronet/url_request_context_config.h" | 5 #include "components/cronet/url_request_context_config.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/json/json_reader.h" | 9 #include "base/json/json_reader.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
12 #include "base/sequenced_task_runner.h" | 12 #include "base/sequenced_task_runner.h" |
13 #include "base/strings/string_number_conversions.h" | 13 #include "base/strings/string_number_conversions.h" |
14 #include "base/strings/string_piece.h" | 14 #include "base/strings/string_piece.h" |
15 #include "base/strings/string_split.h" | 15 #include "base/strings/string_split.h" |
16 #include "base/values.h" | 16 #include "base/values.h" |
17 #include "components/cronet/stale_host_resolver.h" | 17 #include "components/cronet/stale_host_resolver.h" |
18 #include "net/base/address_family.h" | 18 #include "net/base/address_family.h" |
19 #include "net/cert/caching_cert_verifier.h" | 19 #include "net/cert/caching_cert_verifier.h" |
20 #include "net/cert/cert_verifier.h" | 20 #include "net/cert/cert_verifier.h" |
21 #include "net/cert/cert_verify_proc.h" | 21 #include "net/cert/cert_verify_proc.h" |
22 #include "net/cert/multi_threaded_cert_verifier.h" | 22 #include "net/cert/multi_threaded_cert_verifier.h" |
23 #include "net/dns/host_resolver.h" | 23 #include "net/dns/host_resolver.h" |
24 #include "net/dns/mapped_host_resolver.h" | 24 #include "net/dns/mapped_host_resolver.h" |
25 #include "net/http/http_network_session.h" | |
25 #include "net/http/http_server_properties.h" | 26 #include "net/http/http_server_properties.h" |
26 #include "net/nqe/network_quality_estimator_params.h" | 27 #include "net/nqe/network_quality_estimator_params.h" |
27 #include "net/quic/chromium/quic_utils_chromium.h" | 28 #include "net/quic/chromium/quic_utils_chromium.h" |
28 #include "net/quic/core/quic_packets.h" | 29 #include "net/quic/core/quic_packets.h" |
29 #include "net/socket/ssl_client_socket.h" | 30 #include "net/socket/ssl_client_socket.h" |
30 #include "net/url_request/url_request_context_builder.h" | 31 #include "net/url_request/url_request_context_builder.h" |
31 | 32 |
32 namespace cronet { | 33 namespace cronet { |
33 | 34 |
34 namespace { | 35 namespace { |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
148 bypass_public_key_pinning_for_local_trust_anchors( | 149 bypass_public_key_pinning_for_local_trust_anchors( |
149 bypass_public_key_pinning_for_local_trust_anchors), | 150 bypass_public_key_pinning_for_local_trust_anchors), |
150 cert_verifier_data(cert_verifier_data), | 151 cert_verifier_data(cert_verifier_data), |
151 nqe_persistent_caching_enabled(false), | 152 nqe_persistent_caching_enabled(false), |
152 experimental_options(experimental_options) {} | 153 experimental_options(experimental_options) {} |
153 | 154 |
154 URLRequestContextConfig::~URLRequestContextConfig() {} | 155 URLRequestContextConfig::~URLRequestContextConfig() {} |
155 | 156 |
156 void URLRequestContextConfig::ParseAndSetExperimentalOptions( | 157 void URLRequestContextConfig::ParseAndSetExperimentalOptions( |
157 net::URLRequestContextBuilder* context_builder, | 158 net::URLRequestContextBuilder* context_builder, |
159 net::HttpNetworkSession::Params* session_params, | |
158 net::NetLog* net_log, | 160 net::NetLog* net_log, |
159 const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) { | 161 const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) { |
160 if (experimental_options.empty()) | 162 if (experimental_options.empty()) |
161 return; | 163 return; |
162 | 164 |
163 DCHECK(net_log); | 165 DCHECK(net_log); |
164 | 166 |
165 DVLOG(1) << "Experimental Options:" << experimental_options; | 167 DVLOG(1) << "Experimental Options:" << experimental_options; |
166 std::unique_ptr<base::Value> options = | 168 std::unique_ptr<base::Value> options = |
167 base::JSONReader::Read(experimental_options); | 169 base::JSONReader::Read(experimental_options); |
(...skipping 14 matching lines...) Expand all Loading... | |
182 } | 184 } |
183 | 185 |
184 bool async_dns_enable = false; | 186 bool async_dns_enable = false; |
185 bool stale_dns_enable = false; | 187 bool stale_dns_enable = false; |
186 bool host_resolver_rules_enable = false; | 188 bool host_resolver_rules_enable = false; |
187 bool disable_ipv6_on_wifi = false; | 189 bool disable_ipv6_on_wifi = false; |
188 | 190 |
189 effective_experimental_options = dict->CreateDeepCopy(); | 191 effective_experimental_options = dict->CreateDeepCopy(); |
190 StaleHostResolver::StaleOptions stale_dns_options; | 192 StaleHostResolver::StaleOptions stale_dns_options; |
191 std::string host_resolver_rules_string; | 193 std::string host_resolver_rules_string; |
194 | |
192 for (base::DictionaryValue::Iterator it(*dict.get()); !it.IsAtEnd(); | 195 for (base::DictionaryValue::Iterator it(*dict.get()); !it.IsAtEnd(); |
193 it.Advance()) { | 196 it.Advance()) { |
194 if (it.key() == kQuicFieldTrialName) { | 197 if (it.key() == kQuicFieldTrialName) { |
195 const base::DictionaryValue* quic_args = nullptr; | 198 const base::DictionaryValue* quic_args = nullptr; |
196 if (!it.value().GetAsDictionary(&quic_args)) { | 199 if (!it.value().GetAsDictionary(&quic_args)) { |
197 LOG(ERROR) << "Quic config params \"" << it.value() | 200 LOG(ERROR) << "Quic config params \"" << it.value() |
198 << "\" is not a dictionary value"; | 201 << "\" is not a dictionary value"; |
199 effective_experimental_options->Remove(it.key(), nullptr); | 202 effective_experimental_options->Remove(it.key(), nullptr); |
200 continue; | 203 continue; |
201 } | 204 } |
202 std::string quic_connection_options; | 205 std::string quic_connection_options; |
203 if (quic_args->GetString(kQuicConnectionOptions, | 206 if (quic_args->GetString(kQuicConnectionOptions, |
204 &quic_connection_options)) { | 207 &quic_connection_options)) { |
205 context_builder->set_quic_connection_options( | 208 session_params->quic_connection_options = |
206 net::ParseQuicConnectionOptions(quic_connection_options)); | 209 net::ParseQuicConnectionOptions(quic_connection_options); |
207 } | 210 } |
208 | 211 |
209 // TODO(rtenneti): Delete this option after apps stop using it. | 212 // TODO(rtenneti): Delete this option after apps stop using it. |
210 // Added this for backward compatibility. | 213 // Added this for backward compatibility. |
211 bool quic_store_server_configs_in_properties = false; | 214 bool quic_store_server_configs_in_properties = false; |
212 if (quic_args->GetBoolean(kQuicStoreServerConfigsInProperties, | 215 if (quic_args->GetBoolean(kQuicStoreServerConfigsInProperties, |
213 &quic_store_server_configs_in_properties)) { | 216 &quic_store_server_configs_in_properties)) { |
214 context_builder->set_quic_max_server_configs_stored_in_properties( | 217 session_params->quic_max_server_configs_stored_in_properties = |
215 net::kMaxQuicServersToPersist); | 218 net::kMaxQuicServersToPersist; |
216 } | 219 } |
217 | 220 |
218 int quic_max_server_configs_stored_in_properties = 0; | 221 int quic_max_server_configs_stored_in_properties = 0; |
219 if (quic_args->GetInteger( | 222 if (quic_args->GetInteger( |
220 kQuicMaxServerConfigsStoredInProperties, | 223 kQuicMaxServerConfigsStoredInProperties, |
221 &quic_max_server_configs_stored_in_properties)) { | 224 &quic_max_server_configs_stored_in_properties)) { |
222 context_builder->set_quic_max_server_configs_stored_in_properties( | 225 session_params->quic_max_server_configs_stored_in_properties = |
223 static_cast<size_t>(quic_max_server_configs_stored_in_properties)); | 226 static_cast<size_t>(quic_max_server_configs_stored_in_properties); |
224 } | 227 } |
225 | 228 |
226 int quic_idle_connection_timeout_seconds = 0; | 229 int quic_idle_connection_timeout_seconds = 0; |
227 if (quic_args->GetInteger(kQuicIdleConnectionTimeoutSeconds, | 230 if (quic_args->GetInteger(kQuicIdleConnectionTimeoutSeconds, |
228 &quic_idle_connection_timeout_seconds)) { | 231 &quic_idle_connection_timeout_seconds)) { |
229 context_builder->set_quic_idle_connection_timeout_seconds( | 232 session_params->quic_idle_connection_timeout_seconds = |
230 quic_idle_connection_timeout_seconds); | 233 quic_idle_connection_timeout_seconds; |
231 } | 234 } |
232 | 235 |
233 bool quic_close_sessions_on_ip_change = false; | 236 bool quic_close_sessions_on_ip_change = false; |
234 if (quic_args->GetBoolean(kQuicCloseSessionsOnIpChange, | 237 if (quic_args->GetBoolean(kQuicCloseSessionsOnIpChange, |
235 &quic_close_sessions_on_ip_change)) { | 238 &quic_close_sessions_on_ip_change)) { |
236 context_builder->set_quic_close_sessions_on_ip_change( | 239 session_params->quic_close_sessions_on_ip_change = |
237 quic_close_sessions_on_ip_change); | 240 quic_close_sessions_on_ip_change; |
238 } | 241 } |
239 | 242 |
240 bool quic_migrate_sessions_on_network_change = false; | 243 bool quic_migrate_sessions_on_network_change = false; |
241 if (quic_args->GetBoolean(kQuicMigrateSessionsOnNetworkChange, | 244 if (quic_args->GetBoolean(kQuicMigrateSessionsOnNetworkChange, |
242 &quic_migrate_sessions_on_network_change)) { | 245 &quic_migrate_sessions_on_network_change)) { |
243 context_builder->set_quic_migrate_sessions_on_network_change( | 246 session_params->quic_migrate_sessions_on_network_change = |
244 quic_migrate_sessions_on_network_change); | 247 quic_migrate_sessions_on_network_change; |
245 } | 248 } |
246 | 249 |
247 std::string quic_user_agent_id; | 250 std::string quic_user_agent_id; |
248 if (quic_args->GetString(kQuicUserAgentId, &quic_user_agent_id)) { | 251 if (quic_args->GetString(kQuicUserAgentId, &quic_user_agent_id)) { |
249 context_builder->set_quic_user_agent_id(quic_user_agent_id); | 252 session_params->quic_user_agent_id = quic_user_agent_id; |
250 } | 253 } |
251 | 254 |
252 bool quic_migrate_sessions_early = false; | 255 bool quic_migrate_sessions_early = false; |
253 if (quic_args->GetBoolean(kQuicMigrateSessionsEarly, | 256 if (quic_args->GetBoolean(kQuicMigrateSessionsEarly, |
254 &quic_migrate_sessions_early)) { | 257 &quic_migrate_sessions_early)) { |
255 context_builder->set_quic_migrate_sessions_early( | 258 session_params->quic_migrate_sessions_early = |
256 quic_migrate_sessions_early); | 259 quic_migrate_sessions_early; |
257 } | 260 } |
258 | 261 |
259 bool quic_disable_bidirectional_streams = false; | 262 bool quic_disable_bidirectional_streams = false; |
260 if (quic_args->GetBoolean(kQuicDisableBidirectionalStreams, | 263 if (quic_args->GetBoolean(kQuicDisableBidirectionalStreams, |
261 &quic_disable_bidirectional_streams)) { | 264 &quic_disable_bidirectional_streams)) { |
262 context_builder->set_quic_disable_bidirectional_streams( | 265 session_params->quic_disable_bidirectional_streams = |
263 quic_disable_bidirectional_streams); | 266 quic_disable_bidirectional_streams; |
264 } | 267 } |
265 | 268 |
266 bool quic_race_cert_verification = false; | 269 bool quic_race_cert_verification = false; |
267 if (quic_args->GetBoolean(kQuicRaceCertVerification, | 270 if (quic_args->GetBoolean(kQuicRaceCertVerification, |
268 &quic_race_cert_verification)) { | 271 &quic_race_cert_verification)) { |
269 context_builder->set_quic_race_cert_verification( | 272 session_params->quic_race_cert_verification = |
270 quic_race_cert_verification); | 273 quic_race_cert_verification; |
271 } | 274 } |
272 | 275 |
273 } else if (it.key() == kAsyncDnsFieldTrialName) { | 276 } else if (it.key() == kAsyncDnsFieldTrialName) { |
274 const base::DictionaryValue* async_dns_args = nullptr; | 277 const base::DictionaryValue* async_dns_args = nullptr; |
275 if (!it.value().GetAsDictionary(&async_dns_args)) { | 278 if (!it.value().GetAsDictionary(&async_dns_args)) { |
276 LOG(ERROR) << "\"" << it.key() << "\" config params \"" << it.value() | 279 LOG(ERROR) << "\"" << it.key() << "\" config params \"" << it.value() |
277 << "\" is not a dictionary value"; | 280 << "\" is not a dictionary value"; |
278 effective_experimental_options->Remove(it.key(), nullptr); | 281 effective_experimental_options->Remove(it.key(), nullptr); |
279 continue; | 282 continue; |
280 } | 283 } |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
427 } else { | 430 } else { |
428 cache_params.type = | 431 cache_params.type = |
429 net::URLRequestContextBuilder::HttpCacheParams::IN_MEMORY; | 432 net::URLRequestContextBuilder::HttpCacheParams::IN_MEMORY; |
430 } | 433 } |
431 cache_params.max_size = http_cache_max_size; | 434 cache_params.max_size = http_cache_max_size; |
432 context_builder->EnableHttpCache(cache_params); | 435 context_builder->EnableHttpCache(cache_params); |
433 } else { | 436 } else { |
434 context_builder->DisableHttpCache(); | 437 context_builder->DisableHttpCache(); |
435 } | 438 } |
436 context_builder->set_user_agent(user_agent); | 439 context_builder->set_user_agent(user_agent); |
437 context_builder->SetSpdyAndQuicEnabled(enable_spdy, enable_quic); | |
mmenke
2017/07/07 20:00:02
I'm leaving this method on the builder for now, si
| |
438 context_builder->set_sdch_enabled(enable_sdch); | 440 context_builder->set_sdch_enabled(enable_sdch); |
441 net::HttpNetworkSession::Params session_params; | |
442 session_params.enable_http2 = enable_spdy; | |
443 session_params.enable_quic = enable_quic; | |
439 if (enable_quic) | 444 if (enable_quic) |
440 context_builder->set_quic_user_agent_id(quic_user_agent_id); | 445 session_params.quic_user_agent_id = quic_user_agent_id; |
441 | 446 |
442 ParseAndSetExperimentalOptions(context_builder, net_log, file_task_runner); | 447 ParseAndSetExperimentalOptions(context_builder, &session_params, net_log, |
448 file_task_runner); | |
449 context_builder->set_http_network_session_params(session_params); | |
443 | 450 |
444 std::unique_ptr<net::CertVerifier> cert_verifier; | 451 std::unique_ptr<net::CertVerifier> cert_verifier; |
445 if (mock_cert_verifier) { | 452 if (mock_cert_verifier) { |
446 // Because |context_builder| expects CachingCertVerifier, wrap | 453 // Because |context_builder| expects CachingCertVerifier, wrap |
447 // |mock_cert_verifier| into a CachingCertVerifier. | 454 // |mock_cert_verifier| into a CachingCertVerifier. |
448 cert_verifier = base::MakeUnique<net::CachingCertVerifier>( | 455 cert_verifier = base::MakeUnique<net::CachingCertVerifier>( |
449 std::move(mock_cert_verifier)); | 456 std::move(mock_cert_verifier)); |
450 } else { | 457 } else { |
451 // net::CertVerifier::CreateDefault() returns a CachingCertVerifier. | 458 // net::CertVerifier::CreateDefault() returns a CachingCertVerifier. |
452 cert_verifier = net::CertVerifier::CreateDefault(); | 459 cert_verifier = net::CertVerifier::CreateDefault(); |
453 } | 460 } |
454 context_builder->SetCertVerifier(std::move(cert_verifier)); | 461 context_builder->SetCertVerifier(std::move(cert_verifier)); |
455 // TODO(mef): Use |config| to set cookies. | 462 // TODO(mef): Use |config| to set cookies. |
456 } | 463 } |
457 | 464 |
458 URLRequestContextConfigBuilder::URLRequestContextConfigBuilder() {} | 465 URLRequestContextConfigBuilder::URLRequestContextConfigBuilder() {} |
459 URLRequestContextConfigBuilder::~URLRequestContextConfigBuilder() {} | 466 URLRequestContextConfigBuilder::~URLRequestContextConfigBuilder() {} |
460 | 467 |
461 std::unique_ptr<URLRequestContextConfig> | 468 std::unique_ptr<URLRequestContextConfig> |
462 URLRequestContextConfigBuilder::Build() { | 469 URLRequestContextConfigBuilder::Build() { |
463 return base::MakeUnique<URLRequestContextConfig>( | 470 return base::MakeUnique<URLRequestContextConfig>( |
464 enable_quic, quic_user_agent_id, enable_spdy, enable_sdch, enable_brotli, | 471 enable_quic, quic_user_agent_id, enable_spdy, enable_sdch, enable_brotli, |
465 http_cache, http_cache_max_size, load_disable_cache, storage_path, | 472 http_cache, http_cache_max_size, load_disable_cache, storage_path, |
466 user_agent, experimental_options, std::move(mock_cert_verifier), | 473 user_agent, experimental_options, std::move(mock_cert_verifier), |
467 enable_network_quality_estimator, | 474 enable_network_quality_estimator, |
468 bypass_public_key_pinning_for_local_trust_anchors, cert_verifier_data); | 475 bypass_public_key_pinning_for_local_trust_anchors, cert_verifier_data); |
469 } | 476 } |
470 | 477 |
471 } // namespace cronet | 478 } // namespace cronet |
OLD | NEW |