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