OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/ios/cronet_environment.h" | 5 #include "components/cronet/ios/cronet_environment.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/at_exit.h" | 9 #include "base/at_exit.h" |
10 #include "base/atomicops.h" | 10 #include "base/atomicops.h" |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
13 #include "base/files/file_util.h" | 13 #include "base/files/file_util.h" |
14 #include "base/files/scoped_file.h" | 14 #include "base/files/scoped_file.h" |
15 #include "base/json/json_writer.h" | 15 #include "base/json/json_writer.h" |
16 #include "base/mac/bind_objc_block.h" | 16 #include "base/mac/bind_objc_block.h" |
17 #include "base/mac/foundation_util.h" | 17 #include "base/mac/foundation_util.h" |
18 #include "base/macros.h" | 18 #include "base/macros.h" |
19 #include "base/metrics/statistics_recorder.h" | 19 #include "base/metrics/statistics_recorder.h" |
20 #include "base/path_service.h" | 20 #include "base/path_service.h" |
21 #include "base/synchronization/waitable_event.h" | 21 #include "base/synchronization/waitable_event.h" |
22 #include "base/threading/worker_pool.h" | 22 #include "base/threading/worker_pool.h" |
23 #include "components/cronet/ios/version.h" | 23 #include "components/cronet/ios/version.h" |
24 #include "components/prefs/json_pref_store.h" | 24 #include "components/prefs/json_pref_store.h" |
25 #include "components/prefs/pref_filter.h" | 25 #include "components/prefs/pref_filter.h" |
26 #include "net/base/net_errors.h" | 26 #include "net/base/net_errors.h" |
27 #include "net/base/network_change_notifier.h" | 27 #include "net/base/network_change_notifier.h" |
28 #include "net/cert/cert_verify_result.h" | 28 #include "net/cert/cert_verify_result.h" |
| 29 #include "net/cert/ct_policy_enforcer.h" |
| 30 #include "net/cert/multi_log_ct_verifier.h" |
29 #include "net/dns/host_resolver.h" | 31 #include "net/dns/host_resolver.h" |
30 #include "net/dns/mapped_host_resolver.h" | 32 #include "net/dns/mapped_host_resolver.h" |
31 #include "net/http/http_auth_handler_factory.h" | 33 #include "net/http/http_auth_handler_factory.h" |
32 #include "net/http/http_cache.h" | 34 #include "net/http/http_cache.h" |
33 #include "net/http/http_response_headers.h" | 35 #include "net/http/http_response_headers.h" |
34 #include "net/http/http_server_properties_impl.h" | 36 #include "net/http/http_server_properties_impl.h" |
35 #include "net/http/http_stream_factory.h" | 37 #include "net/http/http_stream_factory.h" |
36 #include "net/http/http_util.h" | 38 #include "net/http/http_util.h" |
37 #include "net/log/net_log.h" | 39 #include "net/log/net_log.h" |
38 #include "net/log/write_to_file_net_log_observer.h" | 40 #include "net/log/write_to_file_net_log_observer.h" |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 | 258 |
257 CronetEnvironment::~CronetEnvironment() { | 259 CronetEnvironment::~CronetEnvironment() { |
258 // net::HTTPProtocolHandlerDelegate::SetInstance(nullptr); | 260 // net::HTTPProtocolHandlerDelegate::SetInstance(nullptr); |
259 #if defined(USE_NSS_CERTS) | 261 #if defined(USE_NSS_CERTS) |
260 net::SetURLRequestContextForNSSHttpIO(nullptr); | 262 net::SetURLRequestContextForNSSHttpIO(nullptr); |
261 #endif | 263 #endif |
262 } | 264 } |
263 | 265 |
264 void CronetEnvironment::InitializeOnNetworkThread() { | 266 void CronetEnvironment::InitializeOnNetworkThread() { |
265 DCHECK(network_io_thread_->task_runner()->BelongsToCurrentThread()); | 267 DCHECK(network_io_thread_->task_runner()->BelongsToCurrentThread()); |
| 268 // TODO(mef): Use net:UrlRequestContextBuilder instead of manual build. |
266 main_context_.reset(new net::URLRequestContext); | 269 main_context_.reset(new net::URLRequestContext); |
267 main_context_->set_net_log(net_log_.get()); | 270 main_context_->set_net_log(net_log_.get()); |
268 std::string user_agent(user_agent_product_name_ + | 271 std::string user_agent(user_agent_product_name_ + |
269 " (iOS); Cronet/" CRONET_VERSION); | 272 " (iOS); Cronet/" CRONET_VERSION); |
270 main_context_->set_http_user_agent_settings( | 273 main_context_->set_http_user_agent_settings( |
271 new net::StaticHttpUserAgentSettings("en", user_agent)); | 274 new net::StaticHttpUserAgentSettings("en", user_agent)); |
272 | 275 |
273 main_context_->set_ssl_config_service(new net::SSLConfigServiceDefaults); | 276 main_context_->set_ssl_config_service(new net::SSLConfigServiceDefaults); |
274 main_context_->set_transport_security_state( | 277 main_context_->set_transport_security_state( |
275 new net::TransportSecurityState()); | 278 new net::TransportSecurityState()); |
276 http_server_properties_.reset(new net::HttpServerPropertiesImpl()); | 279 http_server_properties_.reset(new net::HttpServerPropertiesImpl()); |
277 main_context_->set_http_server_properties(http_server_properties_.get()); | 280 main_context_->set_http_server_properties(http_server_properties_.get()); |
278 | 281 |
279 // TODO(rdsmith): Note that the ".release()" calls below are leaking | 282 // TODO(rdsmith): Note that the ".release()" calls below are leaking |
280 // the objects in question; this should be fixed by having an object | 283 // the objects in question; this should be fixed by having an object |
281 // corresponding to URLRequestContextStorage that actually owns those | 284 // corresponding to URLRequestContextStorage that actually owns those |
282 // objects. See http://crbug.com/523858. | 285 // objects. See http://crbug.com/523858. |
283 std::unique_ptr<net::MappedHostResolver> mapped_host_resolver( | 286 std::unique_ptr<net::MappedHostResolver> mapped_host_resolver( |
284 new net::MappedHostResolver( | 287 new net::MappedHostResolver( |
285 net::HostResolver::CreateDefaultResolver(nullptr))); | 288 net::HostResolver::CreateDefaultResolver(nullptr))); |
286 | 289 |
287 mapped_host_resolver->SetRulesFromString(host_resolver_rules_); | 290 mapped_host_resolver->SetRulesFromString(host_resolver_rules_); |
288 main_context_->set_host_resolver(mapped_host_resolver.release()); | 291 main_context_->set_host_resolver(mapped_host_resolver.release()); |
289 | 292 |
290 if (!cert_verifier_) | 293 if (!cert_verifier_) |
291 cert_verifier_ = net::CertVerifier::CreateDefault(); | 294 cert_verifier_ = net::CertVerifier::CreateDefault(); |
292 main_context_->set_cert_verifier(cert_verifier_.get()); | 295 main_context_->set_cert_verifier(cert_verifier_.get()); |
293 | 296 |
| 297 main_context_->set_cert_transparency_verifier(new net::MultiLogCTVerifier()); |
| 298 main_context_->set_ct_policy_enforcer(new net::CTPolicyEnforcer()); |
| 299 |
294 main_context_->set_http_auth_handler_factory( | 300 main_context_->set_http_auth_handler_factory( |
295 net::HttpAuthHandlerRegistryFactory::CreateDefault( | 301 net::HttpAuthHandlerRegistryFactory::CreateDefault( |
296 main_context_->host_resolver()) | 302 main_context_->host_resolver()) |
297 .release()); | 303 .release()); |
298 main_context_->set_proxy_service( | 304 main_context_->set_proxy_service( |
299 net::ProxyService::CreateUsingSystemProxyResolver( | 305 net::ProxyService::CreateUsingSystemProxyResolver( |
300 std::move(proxy_config_service_), 0, nullptr) | 306 std::move(proxy_config_service_), 0, nullptr) |
301 .release()); | 307 .release()); |
302 | 308 |
303 // Cache | 309 // Cache |
304 base::FilePath cache_path; | 310 base::FilePath cache_path; |
305 if (!PathService::Get(base::DIR_CACHE, &cache_path)) | 311 if (!PathService::Get(base::DIR_CACHE, &cache_path)) |
306 return; | 312 return; |
307 cache_path = cache_path.Append(FILE_PATH_LITERAL("cronet")); | 313 cache_path = cache_path.Append(FILE_PATH_LITERAL("cronet")); |
308 std::unique_ptr<net::HttpCache::DefaultBackend> main_backend( | 314 std::unique_ptr<net::HttpCache::DefaultBackend> main_backend( |
309 new net::HttpCache::DefaultBackend(net::DISK_CACHE, | 315 new net::HttpCache::DefaultBackend(net::DISK_CACHE, |
310 net::CACHE_BACKEND_SIMPLE, cache_path, | 316 net::CACHE_BACKEND_SIMPLE, cache_path, |
311 0, // Default cache size. | 317 0, // Default cache size. |
312 network_cache_thread_->task_runner())); | 318 network_cache_thread_->task_runner())); |
313 | 319 |
314 net::HttpNetworkSession::Params params; | 320 net::HttpNetworkSession::Params params; |
315 | 321 |
316 params.host_resolver = main_context_->host_resolver(); | 322 params.host_resolver = main_context_->host_resolver(); |
317 params.cert_verifier = main_context_->cert_verifier(); | 323 params.cert_verifier = main_context_->cert_verifier(); |
| 324 params.cert_transparency_verifier = |
| 325 main_context_->cert_transparency_verifier(); |
| 326 params.ct_policy_enforcer = main_context_->ct_policy_enforcer(); |
318 params.channel_id_service = main_context_->channel_id_service(); | 327 params.channel_id_service = main_context_->channel_id_service(); |
319 params.transport_security_state = main_context_->transport_security_state(); | 328 params.transport_security_state = main_context_->transport_security_state(); |
320 params.proxy_service = main_context_->proxy_service(); | 329 params.proxy_service = main_context_->proxy_service(); |
321 params.ssl_config_service = main_context_->ssl_config_service(); | 330 params.ssl_config_service = main_context_->ssl_config_service(); |
322 params.http_auth_handler_factory = main_context_->http_auth_handler_factory(); | 331 params.http_auth_handler_factory = main_context_->http_auth_handler_factory(); |
323 params.http_server_properties = main_context_->http_server_properties(); | 332 params.http_server_properties = main_context_->http_server_properties(); |
324 params.net_log = main_context_->net_log(); | 333 params.net_log = main_context_->net_log(); |
325 params.enable_http2 = http2_enabled(); | 334 params.enable_http2 = http2_enabled(); |
326 params.enable_quic = quic_enabled(); | 335 params.enable_quic = quic_enabled(); |
327 | 336 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 const net::HttpUserAgentSettings* user_agent_settings = | 373 const net::HttpUserAgentSettings* user_agent_settings = |
365 main_context_->http_user_agent_settings(); | 374 main_context_->http_user_agent_settings(); |
366 if (!user_agent_settings) { | 375 if (!user_agent_settings) { |
367 return nullptr; | 376 return nullptr; |
368 } | 377 } |
369 | 378 |
370 return user_agent_settings->GetUserAgent(); | 379 return user_agent_settings->GetUserAgent(); |
371 } | 380 } |
372 | 381 |
373 } // namespace cronet | 382 } // namespace cronet |
OLD | NEW |