| 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 |