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