Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Side by Side Diff: components/cronet/ios/cronet_environment.cc

Issue 2502683003: [Cronet] change InitializeOnNetworkThread to use URLRequestContextBuilder (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 #include "net/http/http_util.h" 46 #include "net/http/http_util.h"
47 #include "net/log/net_log.h" 47 #include "net/log/net_log.h"
48 #include "net/log/net_log_capture_mode.h" 48 #include "net/log/net_log_capture_mode.h"
49 #include "net/log/write_to_file_net_log_observer.h" 49 #include "net/log/write_to_file_net_log_observer.h"
50 #include "net/proxy/proxy_service.h" 50 #include "net/proxy/proxy_service.h"
51 #include "net/socket/ssl_client_socket.h" 51 #include "net/socket/ssl_client_socket.h"
52 #include "net/ssl/channel_id_service.h" 52 #include "net/ssl/channel_id_service.h"
53 #include "net/ssl/default_channel_id_store.h" 53 #include "net/ssl/default_channel_id_store.h"
54 #include "net/ssl/ssl_config_service_defaults.h" 54 #include "net/ssl/ssl_config_service_defaults.h"
55 #include "net/url_request/static_http_user_agent_settings.h" 55 #include "net/url_request/static_http_user_agent_settings.h"
56 #include "net/url_request/url_request_context.h"
57 #include "net/url_request/url_request_context_builder.h"
56 #include "net/url_request/url_request_context_storage.h" 58 #include "net/url_request/url_request_context_storage.h"
57 #include "net/url_request/url_request_job_factory_impl.h" 59 #include "net/url_request/url_request_job_factory_impl.h"
58 #include "url/scheme_host_port.h" 60 #include "url/scheme_host_port.h"
59 #include "url/url_util.h" 61 #include "url/url_util.h"
60 62
61 namespace { 63 namespace {
62 64
63 base::AtExitManager* g_at_exit_ = nullptr; 65 base::AtExitManager* g_at_exit_ = nullptr;
64 net::NetworkChangeNotifier* g_network_change_notifier = nullptr; 66 net::NetworkChangeNotifier* g_network_change_notifier = nullptr;
65 // MessageLoop on the main thread. 67 // MessageLoop on the main thread.
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 base::Unretained(this))); 268 base::Unretained(this)));
267 } 269 }
268 270
269 CronetEnvironment::~CronetEnvironment() { 271 CronetEnvironment::~CronetEnvironment() {
270 // net::HTTPProtocolHandlerDelegate::SetInstance(nullptr); 272 // net::HTTPProtocolHandlerDelegate::SetInstance(nullptr);
271 } 273 }
272 274
273 void CronetEnvironment::InitializeOnNetworkThread() { 275 void CronetEnvironment::InitializeOnNetworkThread() {
274 DCHECK(network_io_thread_->task_runner()->BelongsToCurrentThread()); 276 DCHECK(network_io_thread_->task_runner()->BelongsToCurrentThread());
275 base::FeatureList::InitializeInstance(std::string(), std::string()); 277 base::FeatureList::InitializeInstance(std::string(), std::string());
276 // TODO(mef): Use net:UrlRequestContextBuilder instead of manual build.
277 main_context_.reset(new net::URLRequestContext);
278 main_context_->set_net_log(net_log_.get());
279 278
280 if (user_agent_partial_) 279 if (user_agent_partial_)
281 user_agent_ = web::BuildUserAgentFromProduct(user_agent_); 280 user_agent_ = web::BuildUserAgentFromProduct(user_agent_);
282 281
283 main_context_->set_http_user_agent_settings(
284 new net::StaticHttpUserAgentSettings(accept_language_, user_agent_));
285
286 main_context_->set_ssl_config_service(new net::SSLConfigServiceDefaults);
287 main_context_->set_transport_security_state(
288 new net::TransportSecurityState());
289 http_server_properties_.reset(new net::HttpServerPropertiesImpl());
290 main_context_->set_http_server_properties(http_server_properties_.get());
291
292 // TODO(rdsmith): Note that the ".release()" calls below are leaking
293 // the objects in question; this should be fixed by having an object
294 // corresponding to URLRequestContextStorage that actually owns those
295 // objects. See http://crbug.com/523858.
296 std::unique_ptr<net::MappedHostResolver> mapped_host_resolver(
297 new net::MappedHostResolver(
298 net::HostResolver::CreateDefaultResolver(nullptr)));
299
300 mapped_host_resolver->SetRulesFromString(host_resolver_rules_);
301 main_context_->set_host_resolver(mapped_host_resolver.release());
302
303 if (!cert_verifier_) 282 if (!cert_verifier_)
304 cert_verifier_ = net::CertVerifier::CreateDefault(); 283 cert_verifier_ = net::CertVerifier::CreateDefault();
mmenke 2016/11/16 16:41:20 Not needed: URLRequestContextConfig will do this
lilyhoughton 2016/11/22 19:44:01 Done.
305 main_context_->set_cert_verifier(cert_verifier_.get());
306
307 std::unique_ptr<net::MultiLogCTVerifier> ct_verifier =
308 base::MakeUnique<net::MultiLogCTVerifier>();
309 ct_verifier->AddLogs(net::ct::CreateLogVerifiersForKnownLogs());
310 main_context_->set_cert_transparency_verifier(ct_verifier.release());
311 main_context_->set_ct_policy_enforcer(new net::CTPolicyEnforcer());
312
313 main_context_->set_http_auth_handler_factory(
314 net::HttpAuthHandlerRegistryFactory::CreateDefault(
315 main_context_->host_resolver())
316 .release());
317 main_context_->set_proxy_service(
318 net::ProxyService::CreateUsingSystemProxyResolver(
319 std::move(proxy_config_service_), 0, nullptr)
320 .release());
321 284
322 // Cache 285 // Cache
323 base::FilePath cache_path; 286 base::FilePath cache_path;
324 if (!PathService::Get(base::DIR_CACHE, &cache_path)) 287 if (!PathService::Get(base::DIR_CACHE, &cache_path))
325 return; 288 return;
326 cache_path = cache_path.Append(FILE_PATH_LITERAL("cronet")); 289 cache_path = cache_path.Append(FILE_PATH_LITERAL("cronet"));
327 std::unique_ptr<net::HttpCache::DefaultBackend> main_backend(
328 new net::HttpCache::DefaultBackend(net::DISK_CACHE,
329 net::CACHE_BACKEND_SIMPLE, cache_path,
330 0, // Default cache size.
331 network_cache_thread_->task_runner()));
332 290
333 net::HttpNetworkSession::Params params; 291 std::unique_ptr<URLRequestContextConfig> config(new URLRequestContextConfig(
mmenke 2016/11/16 16:41:20 include components/cronet/url_request_context_conf
lilyhoughton 2016/11/22 19:44:01 This was in cronet_environment.h. That file didn'
292 quic_enabled_, "", http2_enabled_, false, URLRequestContextConfig::DISK,
293 0, false, cache_path.value(), user_agent_, "{}", "", "", "", "",
294 std::move(cert_verifier_), false, true, ""));
mmenke 2016/11/16 16:41:20 Should have comments labeling all the inscrutable
lilyhoughton 2016/11/22 19:44:01 Done.
334 295
335 params.host_resolver = main_context_->host_resolver(); 296 net::URLRequestContextBuilder context_builder;
336 params.cert_verifier = main_context_->cert_verifier();
337 params.cert_transparency_verifier =
338 main_context_->cert_transparency_verifier();
339 params.ct_policy_enforcer = main_context_->ct_policy_enforcer();
340 params.channel_id_service = main_context_->channel_id_service();
341 params.transport_security_state = main_context_->transport_security_state();
342 params.proxy_service = main_context_->proxy_service();
343 params.ssl_config_service = main_context_->ssl_config_service();
344 params.http_auth_handler_factory = main_context_->http_auth_handler_factory();
345 params.http_server_properties = main_context_->http_server_properties();
346 params.net_log = main_context_->net_log();
347 params.enable_http2 = http2_enabled();
348 params.enable_quic = quic_enabled();
349 297
298 context_builder.set_accept_language(accept_language_);
299
300 config->ConfigureURLRequestContextBuilder(&context_builder, net_log_.get(),
301 file_thread_.get()->task_runner());
302
303 std::unique_ptr<net::MappedHostResolver> mapped_host_resolver(
304 new net::MappedHostResolver(
305 net::HostResolver::CreateDefaultResolver(nullptr)));
mmenke 2016/11/16 16:41:20 nullptr -> net_log_.get() (That was a bug in the o
lilyhoughton 2016/11/22 19:44:01 Done. What's the bug / would it be nontrivial to
mmenke 2016/11/22 19:50:42 It means we wouldn't have been emitting DNS lookup
306
307 mapped_host_resolver->SetRulesFromString(host_resolver_rules_);
308 context_builder.set_host_resolver(std::move(mapped_host_resolver));
309
310 std::unordered_set<std::string> quic_host_whitelist;
311 std::unique_ptr<net::HttpServerProperties> http_server_properties(
312 new net::HttpServerPropertiesImpl());
350 for (const auto& quic_hint : quic_hints_) { 313 for (const auto& quic_hint : quic_hints_) {
351 net::AlternativeService alternative_service(net::AlternateProtocol::QUIC, 314 net::AlternativeService alternative_service(net::AlternateProtocol::QUIC,
352 "", quic_hint.port()); 315 "", quic_hint.port());
353 url::SchemeHostPort quic_hint_server("https", quic_hint.host(), 316 url::SchemeHostPort quic_hint_server("https", quic_hint.host(),
354 quic_hint.port()); 317 quic_hint.port());
355 main_context_->http_server_properties()->SetAlternativeService( 318 http_server_properties->SetAlternativeService(
356 quic_hint_server, alternative_service, base::Time::Max()); 319 quic_hint_server, alternative_service, base::Time::Max());
357 params.quic_host_whitelist.insert(quic_hint.host()); 320 quic_host_whitelist.insert(quic_hint.host());
358 } 321 }
359 322
360 if (!params.channel_id_service) { 323 context_builder.SetHttpServerProperties(std::move(http_server_properties));
361 // The main context may not have a ChannelIDService, since it is lazily 324 context_builder.set_quic_host_whitelist(quic_host_whitelist);
362 // constructed. If not, build an ephemeral ChannelIDService with no backing
363 // disk store.
364 // TODO(ellyjones): support persisting ChannelID.
365 params.channel_id_service =
366 new net::ChannelIDService(new net::DefaultChannelIDStore(NULL),
367 base::WorkerPool::GetTaskRunner(true));
368 }
369 325
370 // TODO(mmenke): These really shouldn't be leaked. 326 main_context_ = context_builder.Build();
371 // See https://crbug.com/523858.
372 net::HttpNetworkSession* http_network_session =
373 new net::HttpNetworkSession(params);
374 net::HttpCache* main_cache =
375 new net::HttpCache(http_network_session, std::move(main_backend),
376 true /* set_up_quic_server_info */);
377 main_context_->set_http_transaction_factory(main_cache);
378
379 net::URLRequestJobFactoryImpl* job_factory =
380 new net::URLRequestJobFactoryImpl;
381 main_context_->set_job_factory(job_factory);
382 main_context_->set_net_log(net_log_.get());
383 } 327 }
384 328
385 std::string CronetEnvironment::user_agent() { 329 std::string CronetEnvironment::user_agent() {
386 const net::HttpUserAgentSettings* user_agent_settings = 330 const net::HttpUserAgentSettings* user_agent_settings =
387 main_context_->http_user_agent_settings(); 331 main_context_->http_user_agent_settings();
388 if (!user_agent_settings) { 332 if (!user_agent_settings) {
389 return nullptr; 333 return nullptr;
390 } 334 }
391 335
392 return user_agent_settings->GetUserAgent(); 336 return user_agent_settings->GetUserAgent();
393 } 337 }
394 338
395 std::vector<uint8_t> CronetEnvironment::GetHistogramDeltas() { 339 std::vector<uint8_t> CronetEnvironment::GetHistogramDeltas() {
396 base::StatisticsRecorder::Initialize(); 340 base::StatisticsRecorder::Initialize();
397 std::vector<uint8_t> data; 341 std::vector<uint8_t> data;
398 if (!HistogramManager::GetInstance()->GetDeltas(&data)) 342 if (!HistogramManager::GetInstance()->GetDeltas(&data))
399 return std::vector<uint8_t>(); 343 return std::vector<uint8_t>();
400 return data; 344 return data;
401 } 345 }
402 346
403 } // namespace cronet 347 } // namespace cronet
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698