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