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

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

Issue 2968293002: Introduce SystemNetworkContextManager. (Closed)
Patch Set: Response to comments 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
« no previous file with comments | « chrome/browser/io_thread.h ('k') | chrome/browser/net/system_network_context_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/io_thread.h ('k') | chrome/browser/net/system_network_context_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698