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

Side by Side Diff: chrome/browser/io_thread.cc

Issue 2968293002: Introduce SystemNetworkContextManager. (Closed)
Patch Set: Fix windows non-component build (??) Created 3 years, 5 months 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/io_thread.h" 5 #include "chrome/browser/io_thread.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 SystemURLRequestContextGetter::SystemURLRequestContextGetter( 258 SystemURLRequestContextGetter::SystemURLRequestContextGetter(
259 IOThread* io_thread) 259 IOThread* io_thread)
260 : io_thread_(io_thread), 260 : io_thread_(io_thread),
261 network_task_runner_( 261 network_task_runner_(
262 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)) {} 262 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)) {}
263 263
264 SystemURLRequestContextGetter::~SystemURLRequestContextGetter() {} 264 SystemURLRequestContextGetter::~SystemURLRequestContextGetter() {}
265 265
266 net::URLRequestContext* SystemURLRequestContextGetter::GetURLRequestContext() { 266 net::URLRequestContext* SystemURLRequestContextGetter::GetURLRequestContext() {
267 DCHECK_CURRENTLY_ON(BrowserThread::IO); 267 DCHECK_CURRENTLY_ON(BrowserThread::IO);
268 DCHECK(io_thread_->globals()->system_request_context.get()); 268 DCHECK(io_thread_->globals()->system_request_context);
269 269
270 return io_thread_->globals()->system_request_context.get(); 270 return io_thread_->globals()->system_request_context;
271 } 271 }
272 272
273 scoped_refptr<base::SingleThreadTaskRunner> 273 scoped_refptr<base::SingleThreadTaskRunner>
274 SystemURLRequestContextGetter::GetNetworkTaskRunner() const { 274 SystemURLRequestContextGetter::GetNetworkTaskRunner() const {
275 return network_task_runner_; 275 return network_task_runner_;
276 } 276 }
277 277
278 IOThread::Globals:: 278 IOThread::Globals::
279 SystemRequestContextLeakChecker::SystemRequestContextLeakChecker( 279 SystemRequestContextLeakChecker::SystemRequestContextLeakChecker(
280 Globals* globals) 280 Globals* globals)
281 : globals_(globals) { 281 : globals_(globals) {
282 DCHECK(globals_); 282 DCHECK(globals_);
283 } 283 }
284 284
285 IOThread::Globals:: 285 IOThread::Globals::
286 SystemRequestContextLeakChecker::~SystemRequestContextLeakChecker() { 286 SystemRequestContextLeakChecker::~SystemRequestContextLeakChecker() {
287 if (globals_->system_request_context.get()) 287 if (globals_->system_request_context)
288 globals_->system_request_context->AssertNoURLRequests(); 288 globals_->system_request_context->AssertNoURLRequests();
289 } 289 }
290 290
291 IOThread::Globals::Globals() : system_request_context_leak_checker(this), 291 IOThread::Globals::Globals()
292 enable_brotli(false) {} 292 : system_request_context(nullptr),
293 system_request_context_leak_checker(this),
294 enable_brotli(false) {}
293 295
294 IOThread::Globals::~Globals() {} 296 IOThread::Globals::~Globals() {}
295 297
296 // |local_state| is passed in explicitly in order to (1) reduce implicit 298 // |local_state| is passed in explicitly in order to (1) reduce implicit
297 // dependencies and (2) make IOThread more flexible for testing. 299 // dependencies and (2) make IOThread more flexible for testing.
298 IOThread::IOThread( 300 IOThread::IOThread(
299 PrefService* local_state, 301 PrefService* local_state,
300 policy::PolicyService* policy_service, 302 policy::PolicyService* policy_service,
301 net_log::ChromeNetLog* net_log, 303 net_log::ChromeNetLog* net_log,
302 extensions::EventRouterForwarder* extension_event_router_forwarder) 304 extensions::EventRouterForwarder* extension_event_router_forwarder)
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 ->GetPolicies(policy::PolicyNamespace( 394 ->GetPolicies(policy::PolicyNamespace(
393 policy::POLICY_DOMAIN_CHROME, std::string())) 395 policy::POLICY_DOMAIN_CHROME, std::string()))
394 .GetValue(policy::key::kHttp09OnNonDefaultPortsEnabled); 396 .GetValue(policy::key::kHttp09OnNonDefaultPortsEnabled);
395 if (value) 397 if (value)
396 value->GetAsBoolean(&http_09_on_non_default_ports_enabled_); 398 value->GetAsBoolean(&http_09_on_non_default_ports_enabled_);
397 399
398 chrome_browser_net::SetGlobalSTHDistributor( 400 chrome_browser_net::SetGlobalSTHDistributor(
399 std::unique_ptr<net::ct::STHDistributor>(new net::ct::STHDistributor())); 401 std::unique_ptr<net::ct::STHDistributor>(new net::ct::STHDistributor()));
400 402
401 BrowserThread::SetIOThreadDelegate(this); 403 BrowserThread::SetIOThreadDelegate(this);
404
405 SystemNetworkContextManager::SetUp(&network_context_request_,
406 &network_context_params_);
402 } 407 }
403 408
404 IOThread::~IOThread() { 409 IOThread::~IOThread() {
405 // This isn't needed for production code, but in tests, IOThread may 410 // This isn't needed for production code, but in tests, IOThread may
406 // be multiply constructed. 411 // be multiply constructed.
407 BrowserThread::SetIOThreadDelegate(nullptr); 412 BrowserThread::SetIOThreadDelegate(nullptr);
408 413
409 pref_proxy_config_tracker_->DetachFromPrefService(); 414 pref_proxy_config_tracker_->DetachFromPrefService();
410 DCHECK(!globals_); 415 DCHECK(!globals_);
411 416
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 return quick_check_enabled_.GetValue(); 781 return quick_check_enabled_.GetValue();
777 } 782 }
778 783
779 bool IOThread::PacHttpsUrlStrippingEnabled() const { 784 bool IOThread::PacHttpsUrlStrippingEnabled() const {
780 return pac_https_url_stripping_enabled_.GetValue(); 785 return pac_https_url_stripping_enabled_.GetValue();
781 } 786 }
782 787
783 void IOThread::ConstructSystemRequestContext() { 788 void IOThread::ConstructSystemRequestContext() {
784 const base::CommandLine& command_line = 789 const base::CommandLine& command_line =
785 *base::CommandLine::ForCurrentProcess(); 790 *base::CommandLine::ForCurrentProcess();
786 net::URLRequestContextBuilderMojo builder; 791 std::unique_ptr<net::URLRequestContextBuilderMojo> builder =
792 base::MakeUnique<net::URLRequestContextBuilderMojo>();
787 793
788 builder.set_network_quality_estimator( 794 builder->set_network_quality_estimator(
789 globals_->network_quality_estimator.get()); 795 globals_->network_quality_estimator.get());
790 builder.set_enable_brotli(globals_->enable_brotli); 796 builder->set_enable_brotli(globals_->enable_brotli);
791 builder.set_name("system"); 797 builder->set_name("system");
792 798
793 builder.set_user_agent(GetUserAgent()); 799 builder->set_user_agent(GetUserAgent());
794 std::unique_ptr<ChromeNetworkDelegate> chrome_network_delegate( 800 std::unique_ptr<ChromeNetworkDelegate> chrome_network_delegate(
795 new ChromeNetworkDelegate(extension_event_router_forwarder(), 801 new ChromeNetworkDelegate(extension_event_router_forwarder(),
796 &system_enable_referrers_)); 802 &system_enable_referrers_));
797 // By default, data usage is considered off the record. 803 // By default, data usage is considered off the record.
798 chrome_network_delegate->set_data_use_aggregator( 804 chrome_network_delegate->set_data_use_aggregator(
799 globals_->data_use_aggregator.get(), 805 globals_->data_use_aggregator.get(),
800 true /* is_data_usage_off_the_record */); 806 true /* is_data_usage_off_the_record */);
801 builder.set_network_delegate( 807 builder->set_network_delegate(
802 globals_->data_use_ascriber->CreateNetworkDelegate( 808 globals_->data_use_ascriber->CreateNetworkDelegate(
803 std::move(chrome_network_delegate), GetMetricsDataUseForwarder())); 809 std::move(chrome_network_delegate), GetMetricsDataUseForwarder()));
804 builder.set_net_log(net_log_); 810 builder->set_net_log(net_log_);
805 std::unique_ptr<net::HostResolver> host_resolver( 811 std::unique_ptr<net::HostResolver> host_resolver(
806 CreateGlobalHostResolver(net_log_)); 812 CreateGlobalHostResolver(net_log_));
807 813
808 builder.set_ssl_config_service(GetSSLConfigService()); 814 builder->set_ssl_config_service(GetSSLConfigService());
809 builder.SetHttpAuthHandlerFactory( 815 builder->SetHttpAuthHandlerFactory(
810 CreateDefaultAuthHandlerFactory(host_resolver.get())); 816 CreateDefaultAuthHandlerFactory(host_resolver.get()));
811 817
812 builder.set_host_resolver(std::move(host_resolver)); 818 builder->set_host_resolver(std::move(host_resolver));
813 819
814 #if defined(OS_CHROMEOS) 820 #if defined(OS_CHROMEOS)
815 // Creates a CertVerifyProc that doesn't allow any profile-provided certs. 821 // Creates a CertVerifyProc that doesn't allow any profile-provided certs.
816 builder.SetCertVerifier(base::MakeUnique<net::CachingCertVerifier>( 822 builder->SetCertVerifier(base::MakeUnique<net::CachingCertVerifier>(
817 base::MakeUnique<net::MultiThreadedCertVerifier>( 823 base::MakeUnique<net::MultiThreadedCertVerifier>(
818 new chromeos::CertVerifyProcChromeOS()))); 824 new chromeos::CertVerifyProcChromeOS())));
819 #else 825 #else
820 builder.SetCertVerifier(IgnoreErrorsCertVerifier::MaybeWrapCertVerifier( 826 builder->SetCertVerifier(IgnoreErrorsCertVerifier::MaybeWrapCertVerifier(
821 command_line, net::CertVerifier::CreateDefault())); 827 command_line, net::CertVerifier::CreateDefault()));
822 UMA_HISTOGRAM_BOOLEAN( 828 UMA_HISTOGRAM_BOOLEAN(
823 "Net.Certificate.IgnoreCertificateErrorsSPKIListPresent", 829 "Net.Certificate.IgnoreCertificateErrorsSPKIListPresent",
824 command_line.HasSwitch(switches::kIgnoreCertificateErrorsSPKIList)); 830 command_line.HasSwitch(switches::kIgnoreCertificateErrorsSPKIList));
825 #endif 831 #endif
826 832
827 std::unique_ptr<net::MultiLogCTVerifier> ct_verifier = 833 std::unique_ptr<net::MultiLogCTVerifier> ct_verifier =
828 base::MakeUnique<net::MultiLogCTVerifier>(); 834 base::MakeUnique<net::MultiLogCTVerifier>();
829 // Add built-in logs 835 // Add built-in logs
830 ct_verifier->AddLogs(globals_->ct_logs); 836 ct_verifier->AddLogs(globals_->ct_logs);
831 837
832 // Register the ct_tree_tracker_ as observer for verified SCTs. 838 // Register the ct_tree_tracker_ as observer for verified SCTs.
833 ct_verifier->SetObserver(ct_tree_tracker_.get()); 839 ct_verifier->SetObserver(ct_tree_tracker_.get());
834 840
835 builder.set_ct_verifier(std::move(ct_verifier)); 841 builder->set_ct_verifier(std::move(ct_verifier));
836 842
837 // TODO(eroman): Figure out why this doesn't work in single-process mode. 843 // TODO(eroman): Figure out why this doesn't work in single-process mode.
838 // Should be possible now that a private isolate is used. 844 // Should be possible now that a private isolate is used.
839 // http://crbug.com/474654 845 // http://crbug.com/474654
840 if (!command_line.HasSwitch(switches::kWinHttpProxyResolver)) { 846 if (!command_line.HasSwitch(switches::kWinHttpProxyResolver)) {
841 if (command_line.HasSwitch(switches::kSingleProcess)) { 847 if (command_line.HasSwitch(switches::kSingleProcess)) {
842 LOG(ERROR) << "Cannot use V8 Proxy resolver in single process mode."; 848 LOG(ERROR) << "Cannot use V8 Proxy resolver in single process mode.";
843 } else { 849 } else {
844 builder.set_mojo_proxy_resolver_factory( 850 builder->set_mojo_proxy_resolver_factory(
845 ChromeMojoProxyResolverFactory::GetInstance()); 851 ChromeMojoProxyResolverFactory::GetInstance());
846 } 852 }
847 } 853 }
848 854
849 builder.set_pac_quick_check_enabled(WpadQuickCheckEnabled()); 855 builder->set_pac_quick_check_enabled(WpadQuickCheckEnabled());
850 builder.set_pac_sanitize_url_policy( 856 builder->set_pac_sanitize_url_policy(
851 PacHttpsUrlStrippingEnabled() 857 PacHttpsUrlStrippingEnabled()
852 ? net::ProxyService::SanitizeUrlPolicy::SAFE 858 ? net::ProxyService::SanitizeUrlPolicy::SAFE
853 : net::ProxyService::SanitizeUrlPolicy::UNSAFE); 859 : net::ProxyService::SanitizeUrlPolicy::UNSAFE);
854 #if defined(OS_CHROMEOS) 860 #if defined(OS_CHROMEOS)
855 builder.set_dhcp_fetcher_factory( 861 builder->set_dhcp_fetcher_factory(
856 base::MakeUnique<chromeos::DhcpProxyScriptFetcherFactoryChromeos>()); 862 base::MakeUnique<chromeos::DhcpProxyScriptFetcherFactoryChromeos>());
857 #endif 863 #endif
858 builder.set_proxy_config_service(std::move(system_proxy_config_service_)); 864 builder->set_proxy_config_service(std::move(system_proxy_config_service_));
859 865
860 builder.set_http_network_session_params(session_params_); 866 builder->set_http_network_session_params(session_params_);
861 867
862 builder.set_data_enabled(true); 868 builder->set_data_enabled(true);
863 builder.set_file_enabled(true); 869 builder->set_file_enabled(true);
864 #if !BUILDFLAG(DISABLE_FTP_SUPPORT) 870 #if !BUILDFLAG(DISABLE_FTP_SUPPORT)
865 builder.set_ftp_enabled(true); 871 builder->set_ftp_enabled(true);
866 #endif 872 #endif
867 873
868 builder.DisableHttpCache(); 874 builder->DisableHttpCache();
869 875
870 globals_->system_request_context = builder.Build(); 876 globals_->network_service = content::NetworkService::Create();
877 globals_->system_network_context =
878 globals_->network_service->CreateNetworkContextWithBuilder(
879 std::move(network_context_request_),
880 std::move(network_context_params_), std::move(builder),
881 &globals_->system_request_context);
871 882
872 #if defined(USE_NSS_CERTS) 883 #if defined(USE_NSS_CERTS)
873 net::SetURLRequestContextForNSSHttpIO(globals_->system_request_context.get()); 884 net::SetURLRequestContextForNSSHttpIO(globals_->system_request_context);
874 #endif 885 #endif
875 #if defined(OS_ANDROID) 886 #if defined(OS_ANDROID)
876 net::CertVerifyProcAndroid::SetCertNetFetcher( 887 net::CertVerifyProcAndroid::SetCertNetFetcher(
877 net::CreateCertNetFetcher(globals_->system_request_context.get())); 888 net::CreateCertNetFetcher(globals_->system_request_context));
878 #endif 889 #endif
879 } 890 }
880 891
881 // static 892 // static
882 void IOThread::ConfigureParamsFromFieldTrialsAndCommandLine( 893 void IOThread::ConfigureParamsFromFieldTrialsAndCommandLine(
883 const base::CommandLine& command_line, 894 const base::CommandLine& command_line,
884 bool is_quic_allowed_by_policy, 895 bool is_quic_allowed_by_policy,
885 bool http_09_on_non_default_ports_enabled, 896 bool http_09_on_non_default_ports_enabled,
886 net::HttpNetworkSession::Params* params) { 897 net::HttpNetworkSession::Params* params) {
887 std::string quic_user_agent_id = chrome::GetChannelString(); 898 std::string quic_user_agent_id = chrome::GetChannelString();
(...skipping 10 matching lines...) Expand all
898 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests)) 909 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests))
899 net::URLFetcher::SetIgnoreCertificateRequests(true); 910 net::URLFetcher::SetIgnoreCertificateRequests(true);
900 911
901 params->http_09_on_non_default_ports_enabled = 912 params->http_09_on_non_default_ports_enabled =
902 http_09_on_non_default_ports_enabled; 913 http_09_on_non_default_ports_enabled;
903 } 914 }
904 915
905 metrics::UpdateUsagePrefCallbackType IOThread::GetMetricsDataUseForwarder() { 916 metrics::UpdateUsagePrefCallbackType IOThread::GetMetricsDataUseForwarder() {
906 return base::Bind(&UpdateMetricsUsagePrefsOnUIThread); 917 return base::Bind(&UpdateMetricsUsagePrefsOnUIThread);
907 } 918 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698