Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: chrome/browser/io_thread.cc

Issue 2968293002: Introduce SystemNetworkContextManager. (Closed)
Patch Set: Merge Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698