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 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
779 return quick_check_enabled_.GetValue(); | 784 return quick_check_enabled_.GetValue(); |
780 } | 785 } |
781 | 786 |
782 bool IOThread::PacHttpsUrlStrippingEnabled() const { | 787 bool IOThread::PacHttpsUrlStrippingEnabled() const { |
783 return pac_https_url_stripping_enabled_.GetValue(); | 788 return pac_https_url_stripping_enabled_.GetValue(); |
784 } | 789 } |
785 | 790 |
786 void IOThread::ConstructSystemRequestContext() { | 791 void IOThread::ConstructSystemRequestContext() { |
787 const base::CommandLine& command_line = | 792 const base::CommandLine& command_line = |
788 *base::CommandLine::ForCurrentProcess(); | 793 *base::CommandLine::ForCurrentProcess(); |
789 net::URLRequestContextBuilderMojo builder; | 794 std::unique_ptr<net::URLRequestContextBuilderMojo> builder = |
| 795 base::MakeUnique<net::URLRequestContextBuilderMojo>(); |
790 | 796 |
791 builder.set_network_quality_estimator( | 797 builder->set_network_quality_estimator( |
792 globals_->network_quality_estimator.get()); | 798 globals_->network_quality_estimator.get()); |
793 builder.set_enable_brotli(globals_->enable_brotli); | 799 builder->set_enable_brotli(globals_->enable_brotli); |
794 builder.set_name("system"); | 800 builder->set_name("system"); |
795 | 801 |
796 builder.set_user_agent(GetUserAgent()); | 802 builder->set_user_agent(GetUserAgent()); |
797 std::unique_ptr<ChromeNetworkDelegate> chrome_network_delegate( | 803 std::unique_ptr<ChromeNetworkDelegate> chrome_network_delegate( |
798 new ChromeNetworkDelegate(extension_event_router_forwarder(), | 804 new ChromeNetworkDelegate(extension_event_router_forwarder(), |
799 &system_enable_referrers_)); | 805 &system_enable_referrers_)); |
800 // By default, data usage is considered off the record. | 806 // By default, data usage is considered off the record. |
801 chrome_network_delegate->set_data_use_aggregator( | 807 chrome_network_delegate->set_data_use_aggregator( |
802 globals_->data_use_aggregator.get(), | 808 globals_->data_use_aggregator.get(), |
803 true /* is_data_usage_off_the_record */); | 809 true /* is_data_usage_off_the_record */); |
804 builder.set_network_delegate( | 810 builder->set_network_delegate( |
805 globals_->data_use_ascriber->CreateNetworkDelegate( | 811 globals_->data_use_ascriber->CreateNetworkDelegate( |
806 std::move(chrome_network_delegate), GetMetricsDataUseForwarder())); | 812 std::move(chrome_network_delegate), GetMetricsDataUseForwarder())); |
807 builder.set_net_log(net_log_); | 813 builder->set_net_log(net_log_); |
808 std::unique_ptr<net::HostResolver> host_resolver( | 814 std::unique_ptr<net::HostResolver> host_resolver( |
809 CreateGlobalHostResolver(net_log_)); | 815 CreateGlobalHostResolver(net_log_)); |
810 | 816 |
811 builder.set_ssl_config_service(GetSSLConfigService()); | 817 builder->set_ssl_config_service(GetSSLConfigService()); |
812 builder.SetHttpAuthHandlerFactory( | 818 builder->SetHttpAuthHandlerFactory( |
813 CreateDefaultAuthHandlerFactory(host_resolver.get())); | 819 CreateDefaultAuthHandlerFactory(host_resolver.get())); |
814 | 820 |
815 builder.set_host_resolver(std::move(host_resolver)); | 821 builder->set_host_resolver(std::move(host_resolver)); |
816 | 822 |
817 #if defined(OS_CHROMEOS) | 823 #if defined(OS_CHROMEOS) |
818 // Creates a CertVerifyProc that doesn't allow any profile-provided certs. | 824 // Creates a CertVerifyProc that doesn't allow any profile-provided certs. |
819 builder.SetCertVerifier(base::MakeUnique<net::CachingCertVerifier>( | 825 builder->SetCertVerifier(base::MakeUnique<net::CachingCertVerifier>( |
820 base::MakeUnique<net::MultiThreadedCertVerifier>( | 826 base::MakeUnique<net::MultiThreadedCertVerifier>( |
821 new chromeos::CertVerifyProcChromeOS()))); | 827 new chromeos::CertVerifyProcChromeOS()))); |
822 #else | 828 #else |
823 builder.SetCertVerifier(IgnoreErrorsCertVerifier::MaybeWrapCertVerifier( | 829 builder->SetCertVerifier(IgnoreErrorsCertVerifier::MaybeWrapCertVerifier( |
824 command_line, net::CertVerifier::CreateDefault())); | 830 command_line, net::CertVerifier::CreateDefault())); |
825 UMA_HISTOGRAM_BOOLEAN( | 831 UMA_HISTOGRAM_BOOLEAN( |
826 "Net.Certificate.IgnoreCertificateErrorsSPKIListPresent", | 832 "Net.Certificate.IgnoreCertificateErrorsSPKIListPresent", |
827 command_line.HasSwitch(switches::kIgnoreCertificateErrorsSPKIList)); | 833 command_line.HasSwitch(switches::kIgnoreCertificateErrorsSPKIList)); |
828 #endif | 834 #endif |
829 | 835 |
830 std::unique_ptr<net::MultiLogCTVerifier> ct_verifier = | 836 std::unique_ptr<net::MultiLogCTVerifier> ct_verifier = |
831 base::MakeUnique<net::MultiLogCTVerifier>(); | 837 base::MakeUnique<net::MultiLogCTVerifier>(); |
832 // Add built-in logs | 838 // Add built-in logs |
833 ct_verifier->AddLogs(globals_->ct_logs); | 839 ct_verifier->AddLogs(globals_->ct_logs); |
834 | 840 |
835 // Register the ct_tree_tracker_ as observer for verified SCTs. | 841 // Register the ct_tree_tracker_ as observer for verified SCTs. |
836 ct_verifier->SetObserver(ct_tree_tracker_.get()); | 842 ct_verifier->SetObserver(ct_tree_tracker_.get()); |
837 | 843 |
838 builder.set_ct_verifier(std::move(ct_verifier)); | 844 builder->set_ct_verifier(std::move(ct_verifier)); |
839 | 845 |
840 // TODO(eroman): Figure out why this doesn't work in single-process mode. | 846 // TODO(eroman): Figure out why this doesn't work in single-process mode. |
841 // Should be possible now that a private isolate is used. | 847 // Should be possible now that a private isolate is used. |
842 // http://crbug.com/474654 | 848 // http://crbug.com/474654 |
843 if (!command_line.HasSwitch(switches::kWinHttpProxyResolver)) { | 849 if (!command_line.HasSwitch(switches::kWinHttpProxyResolver)) { |
844 if (command_line.HasSwitch(switches::kSingleProcess)) { | 850 if (command_line.HasSwitch(switches::kSingleProcess)) { |
845 LOG(ERROR) << "Cannot use V8 Proxy resolver in single process mode."; | 851 LOG(ERROR) << "Cannot use V8 Proxy resolver in single process mode."; |
846 } else { | 852 } else { |
847 builder.set_mojo_proxy_resolver_factory( | 853 builder->set_mojo_proxy_resolver_factory( |
848 ChromeMojoProxyResolverFactory::GetInstance()); | 854 ChromeMojoProxyResolverFactory::GetInstance()); |
849 } | 855 } |
850 } | 856 } |
851 | 857 |
852 builder.set_pac_quick_check_enabled(WpadQuickCheckEnabled()); | 858 builder->set_pac_quick_check_enabled(WpadQuickCheckEnabled()); |
853 builder.set_pac_sanitize_url_policy( | 859 builder->set_pac_sanitize_url_policy( |
854 PacHttpsUrlStrippingEnabled() | 860 PacHttpsUrlStrippingEnabled() |
855 ? net::ProxyService::SanitizeUrlPolicy::SAFE | 861 ? net::ProxyService::SanitizeUrlPolicy::SAFE |
856 : net::ProxyService::SanitizeUrlPolicy::UNSAFE); | 862 : net::ProxyService::SanitizeUrlPolicy::UNSAFE); |
857 #if defined(OS_CHROMEOS) | 863 #if defined(OS_CHROMEOS) |
858 builder.set_dhcp_fetcher_factory( | 864 builder->set_dhcp_fetcher_factory( |
859 base::MakeUnique<chromeos::DhcpProxyScriptFetcherFactoryChromeos>()); | 865 base::MakeUnique<chromeos::DhcpProxyScriptFetcherFactoryChromeos>()); |
860 #endif | 866 #endif |
861 builder.set_proxy_config_service(std::move(system_proxy_config_service_)); | 867 builder->set_proxy_config_service(std::move(system_proxy_config_service_)); |
862 | 868 |
863 builder.set_http_network_session_params(session_params_); | 869 builder->set_http_network_session_params(session_params_); |
864 | 870 |
865 builder.set_data_enabled(true); | 871 builder->set_data_enabled(true); |
866 builder.set_file_enabled(true); | 872 builder->set_file_enabled(true); |
867 #if !BUILDFLAG(DISABLE_FTP_SUPPORT) | 873 #if !BUILDFLAG(DISABLE_FTP_SUPPORT) |
868 builder.set_ftp_enabled(true); | 874 builder->set_ftp_enabled(true); |
869 #endif | 875 #endif |
870 | 876 |
871 builder.DisableHttpCache(); | 877 builder->DisableHttpCache(); |
872 | 878 |
873 globals_->system_request_context = builder.Build(); | 879 globals_->network_service = content::NetworkService::Create(); |
| 880 globals_->system_network_context = |
| 881 globals_->network_service->CreateNetworkContextWithBuilder( |
| 882 std::move(network_context_request_), |
| 883 std::move(network_context_params_), std::move(builder), |
| 884 &globals_->system_request_context); |
874 | 885 |
875 #if defined(USE_NSS_CERTS) | 886 #if defined(USE_NSS_CERTS) |
876 net::SetURLRequestContextForNSSHttpIO(globals_->system_request_context.get()); | 887 net::SetURLRequestContextForNSSHttpIO(globals_->system_request_context); |
877 #endif | 888 #endif |
878 #if defined(OS_ANDROID) | 889 #if defined(OS_ANDROID) |
879 net::CertVerifyProcAndroid::SetCertNetFetcher( | 890 net::CertVerifyProcAndroid::SetCertNetFetcher( |
880 net::CreateCertNetFetcher(globals_->system_request_context.get())); | 891 net::CreateCertNetFetcher(globals_->system_request_context)); |
881 #endif | 892 #endif |
882 } | 893 } |
883 | 894 |
884 // static | 895 // static |
885 void IOThread::ConfigureParamsFromFieldTrialsAndCommandLine( | 896 void IOThread::ConfigureParamsFromFieldTrialsAndCommandLine( |
886 const base::CommandLine& command_line, | 897 const base::CommandLine& command_line, |
887 bool is_quic_allowed_by_policy, | 898 bool is_quic_allowed_by_policy, |
888 bool http_09_on_non_default_ports_enabled, | 899 bool http_09_on_non_default_ports_enabled, |
889 net::HttpNetworkSession::Params* params) { | 900 net::HttpNetworkSession::Params* params) { |
890 std::string quic_user_agent_id = chrome::GetChannelString(); | 901 std::string quic_user_agent_id = chrome::GetChannelString(); |
(...skipping 10 matching lines...) Expand all Loading... |
901 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests)) | 912 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests)) |
902 net::URLFetcher::SetIgnoreCertificateRequests(true); | 913 net::URLFetcher::SetIgnoreCertificateRequests(true); |
903 | 914 |
904 params->http_09_on_non_default_ports_enabled = | 915 params->http_09_on_non_default_ports_enabled = |
905 http_09_on_non_default_ports_enabled; | 916 http_09_on_non_default_ports_enabled; |
906 } | 917 } |
907 | 918 |
908 metrics::UpdateUsagePrefCallbackType IOThread::GetMetricsDataUseForwarder() { | 919 metrics::UpdateUsagePrefCallbackType IOThread::GetMetricsDataUseForwarder() { |
909 return base::Bind(&UpdateMetricsUsagePrefsOnUIThread); | 920 return base::Bind(&UpdateMetricsUsagePrefsOnUIThread); |
910 } | 921 } |
OLD | NEW |