OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |