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

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

Issue 2872903006: Use URLRequestContextStorage for the SystemURLRequestContext. (Closed)
Patch Set: Merge Created 3 years, 7 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') | no next file » | 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 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 #include "net/ssl/channel_id_service.h" 101 #include "net/ssl/channel_id_service.h"
102 #include "net/ssl/default_channel_id_store.h" 102 #include "net/ssl/default_channel_id_store.h"
103 #include "net/url_request/data_protocol_handler.h" 103 #include "net/url_request/data_protocol_handler.h"
104 #include "net/url_request/file_protocol_handler.h" 104 #include "net/url_request/file_protocol_handler.h"
105 #include "net/url_request/ftp_protocol_handler.h" 105 #include "net/url_request/ftp_protocol_handler.h"
106 #include "net/url_request/static_http_user_agent_settings.h" 106 #include "net/url_request/static_http_user_agent_settings.h"
107 #include "net/url_request/url_fetcher.h" 107 #include "net/url_request/url_fetcher.h"
108 #include "net/url_request/url_request_context.h" 108 #include "net/url_request/url_request_context.h"
109 #include "net/url_request/url_request_context_builder.h" 109 #include "net/url_request/url_request_context_builder.h"
110 #include "net/url_request/url_request_context_getter.h" 110 #include "net/url_request/url_request_context_getter.h"
111 #include "net/url_request/url_request_context_storage.h"
111 #include "net/url_request/url_request_job_factory_impl.h" 112 #include "net/url_request/url_request_job_factory_impl.h"
112 #include "url/url_constants.h" 113 #include "url/url_constants.h"
113 114
114 #if BUILDFLAG(ENABLE_EXTENSIONS) 115 #if BUILDFLAG(ENABLE_EXTENSIONS)
115 #include "chrome/browser/extensions/event_router_forwarder.h" 116 #include "chrome/browser/extensions/event_router_forwarder.h"
116 #endif 117 #endif
117 118
118 #if defined(USE_NSS_CERTS) 119 #if defined(USE_NSS_CERTS)
119 #include "net/cert_net/nss_ocsp.h" 120 #include "net/cert_net/nss_ocsp.h"
120 #endif 121 #endif
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 SystemURLRequestContext() { 190 SystemURLRequestContext() {
190 #if defined(USE_NSS_CERTS) 191 #if defined(USE_NSS_CERTS)
191 net::SetURLRequestContextForNSSHttpIO(this); 192 net::SetURLRequestContextForNSSHttpIO(this);
192 #endif 193 #endif
193 #if defined(OS_ANDROID) 194 #if defined(OS_ANDROID)
194 net::CertVerifyProcAndroid::SetCertNetFetcher( 195 net::CertVerifyProcAndroid::SetCertNetFetcher(
195 net::CreateCertNetFetcher(this)); 196 net::CreateCertNetFetcher(this));
196 #endif 197 #endif
197 } 198 }
198 199
199 private:
200 ~SystemURLRequestContext() override { 200 ~SystemURLRequestContext() override {
201 AssertNoURLRequests(); 201 AssertNoURLRequests();
202 #if defined(USE_NSS_CERTS) 202 #if defined(USE_NSS_CERTS)
203 net::SetURLRequestContextForNSSHttpIO(NULL); 203 net::SetURLRequestContextForNSSHttpIO(NULL);
204 #endif 204 #endif
205 205
206 #if defined(OS_ANDROID) 206 #if defined(OS_ANDROID)
207 net::CertVerifyProcAndroid::ShutdownCertNetFetcher(); 207 net::CertVerifyProcAndroid::ShutdownCertNetFetcher();
208 #endif 208 #endif
209 } 209 }
210
211 private:
212 DISALLOW_COPY_AND_ASSIGN(SystemURLRequestContext);
210 }; 213 };
211 214
212 std::unique_ptr<net::HostResolver> CreateGlobalHostResolver( 215 std::unique_ptr<net::HostResolver> CreateGlobalHostResolver(
213 net::NetLog* net_log) { 216 net::NetLog* net_log) {
214 TRACE_EVENT0("startup", "IOThread::CreateGlobalHostResolver"); 217 TRACE_EVENT0("startup", "IOThread::CreateGlobalHostResolver");
215 const base::CommandLine& command_line = 218 const base::CommandLine& command_line =
216 *base::CommandLine::ForCurrentProcess(); 219 *base::CommandLine::ForCurrentProcess();
217 220
218 net::HostResolver::Options options; 221 net::HostResolver::Options options;
219 222
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 globals_->ct_policy_enforcer.reset(new net::CTPolicyEnforcer()); 626 globals_->ct_policy_enforcer.reset(new net::CTPolicyEnforcer());
624 params_.ct_policy_enforcer = globals_->ct_policy_enforcer.get(); 627 params_.ct_policy_enforcer = globals_->ct_policy_enforcer.get();
625 628
626 globals_->ssl_config_service = GetSSLConfigService(); 629 globals_->ssl_config_service = GetSSLConfigService();
627 630
628 CreateDefaultAuthHandlerFactory(); 631 CreateDefaultAuthHandlerFactory();
629 globals_->http_server_properties.reset(new net::HttpServerPropertiesImpl()); 632 globals_->http_server_properties.reset(new net::HttpServerPropertiesImpl());
630 // For the ProxyScriptFetcher, we use a direct ProxyService. 633 // For the ProxyScriptFetcher, we use a direct ProxyService.
631 globals_->proxy_script_fetcher_proxy_service = 634 globals_->proxy_script_fetcher_proxy_service =
632 net::ProxyService::CreateDirectWithNetLog(net_log_); 635 net::ProxyService::CreateDirectWithNetLog(net_log_);
633 // In-memory cookie store.
634 globals_->system_cookie_store =
635 content::CreateCookieStore(content::CookieStoreConfig());
636 // In-memory channel ID store.
637 globals_->system_channel_id_service.reset(
638 new net::ChannelIDService(new net::DefaultChannelIDStore(NULL)));
639 globals_->system_cookie_store->SetChannelIDServiceID(
640 globals_->system_channel_id_service->GetUniqueID());
641 globals_->dns_probe_service.reset(new chrome_browser_net::DnsProbeService()); 636 globals_->dns_probe_service.reset(new chrome_browser_net::DnsProbeService());
642 globals_->host_mapping_rules.reset(new net::HostMappingRules()); 637 globals_->host_mapping_rules.reset(new net::HostMappingRules());
643 params_.host_mapping_rules = globals_->host_mapping_rules.get(); 638 params_.host_mapping_rules = globals_->host_mapping_rules.get();
644 globals_->http_user_agent_settings.reset( 639 globals_->http_user_agent_settings.reset(
645 new net::StaticHttpUserAgentSettings(std::string(), GetUserAgent())); 640 new net::StaticHttpUserAgentSettings(std::string(), GetUserAgent()));
646 if (command_line.HasSwitch(switches::kHostRules)) { 641 if (command_line.HasSwitch(switches::kHostRules)) {
647 TRACE_EVENT_BEGIN0("startup", "IOThread::InitAsync:SetRulesFromString"); 642 TRACE_EVENT_BEGIN0("startup", "IOThread::InitAsync:SetRulesFromString");
648 globals_->host_mapping_rules->SetRulesFromString( 643 globals_->host_mapping_rules->SetRulesFromString(
649 command_line.GetSwitchValueASCII(switches::kHostRules)); 644 command_line.GetSwitchValueASCII(switches::kHostRules));
650 TRACE_EVENT_END0("startup", "IOThread::InitAsync:SetRulesFromString"); 645 TRACE_EVENT_END0("startup", "IOThread::InitAsync:SetRulesFromString");
651 } 646 }
652 globals_->enable_brotli = 647 globals_->enable_brotli =
653 base::FeatureList::IsEnabled(features::kBrotliEncoding); 648 base::FeatureList::IsEnabled(features::kBrotliEncoding);
654 params_.enable_token_binding = 649 params_.enable_token_binding =
655 base::FeatureList::IsEnabled(features::kTokenBinding); 650 base::FeatureList::IsEnabled(features::kTokenBinding);
656 651
657 // Check for OS support of TCP FastOpen, and turn it on for all connections if 652 // Check for OS support of TCP FastOpen, and turn it on for all connections if
658 // indicated by user. 653 // indicated by user.
659 // TODO(rch): Make the client socket factory a per-network session instance, 654 // TODO(rch): Make the client socket factory a per-network session instance,
660 // constructed from a NetworkSession::Params, to allow us to move this option 655 // constructed from a NetworkSession::Params, to allow us to move this option
661 // to IOThread::Globals & HttpNetworkSession::Params. 656 // to IOThread::Globals & HttpNetworkSession::Params.
662 bool always_enable_tfo_if_supported = 657 bool always_enable_tfo_if_supported =
663 command_line.HasSwitch(switches::kEnableTcpFastOpen); 658 command_line.HasSwitch(switches::kEnableTcpFastOpen);
664 net::CheckSupportAndMaybeEnableTCPFastOpen(always_enable_tfo_if_supported); 659 net::CheckSupportAndMaybeEnableTCPFastOpen(always_enable_tfo_if_supported);
665 660
666 ConfigureParamsFromFieldTrialsAndCommandLine( 661 ConfigureParamsFromFieldTrialsAndCommandLine(
667 command_line, is_quic_allowed_by_policy_, 662 command_line, is_quic_allowed_by_policy_,
668 http_09_on_non_default_ports_enabled_, &params_); 663 http_09_on_non_default_ports_enabled_, &params_);
669 664
670 TRACE_EVENT_BEGIN0("startup",
671 "IOThread::Init:ProxyScriptFetcherRequestContext");
672 globals_->proxy_script_fetcher_context.reset(
673 ConstructProxyScriptFetcherContext(globals_, params_, net_log_));
674 TRACE_EVENT_END0("startup",
675 "IOThread::Init:ProxyScriptFetcherRequestContext");
676
677 #if defined(OS_MACOSX) 665 #if defined(OS_MACOSX)
678 // Start observing Keychain events. This needs to be done on the UI thread, 666 // Start observing Keychain events. This needs to be done on the UI thread,
679 // as Keychain services requires a CFRunLoop. 667 // as Keychain services requires a CFRunLoop.
680 BrowserThread::PostTask(BrowserThread::UI, 668 BrowserThread::PostTask(BrowserThread::UI,
681 FROM_HERE, 669 FROM_HERE,
682 base::Bind(&ObserveKeychainEvents)); 670 base::Bind(&ObserveKeychainEvents));
683 #endif 671 #endif
684 672
685 #if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL) 673 #if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
686 // Record how common CPUs with broken NEON units are. See 674 // Record how common CPUs with broken NEON units are. See
687 // https://crbug.com/341598. 675 // https://crbug.com/341598.
688 crypto::EnsureOpenSSLInit(); 676 crypto::EnsureOpenSSLInit();
689 UMA_HISTOGRAM_BOOLEAN("Net.HasBrokenNEON", CRYPTO_has_broken_NEON()); 677 UMA_HISTOGRAM_BOOLEAN("Net.HasBrokenNEON", CRYPTO_has_broken_NEON());
690 #endif 678 #endif
691 679
692 globals_->system_proxy_service = ProxyServiceFactory::CreateProxyService( 680 ConstructSystemRequestContext();
693 net_log_, globals_->proxy_script_fetcher_context.get(),
694 globals_->system_network_delegate.get(),
695 std::move(system_proxy_config_service_), command_line,
696 WpadQuickCheckEnabled(), PacHttpsUrlStrippingEnabled());
697
698 globals_->system_request_context.reset(
699 ConstructSystemRequestContext(globals_, params_, net_log_));
700 } 681 }
701 682
702 void IOThread::CleanUp() { 683 void IOThread::CleanUp() {
703 base::debug::LeakTracker<SafeBrowsingURLRequestContext>::CheckForLeaks(); 684 base::debug::LeakTracker<SafeBrowsingURLRequestContext>::CheckForLeaks();
704 685
705 #if defined(USE_NSS_CERTS) 686 #if defined(USE_NSS_CERTS)
706 net::ShutdownNSSHttpIO(); 687 net::ShutdownNSSHttpIO();
707 #endif 688 #endif
708 689
709 system_url_request_context_getter_ = NULL; 690 system_url_request_context_getter_ = NULL;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 host_cache->ClearForHosts(host_filter); 794 host_cache->ClearForHosts(host_filter);
814 } 795 }
815 796
816 const net::HttpNetworkSession::Params& IOThread::NetworkSessionParams() const { 797 const net::HttpNetworkSession::Params& IOThread::NetworkSessionParams() const {
817 return params_; 798 return params_;
818 } 799 }
819 800
820 void IOThread::DisableQuic() { 801 void IOThread::DisableQuic() {
821 params_.enable_quic = false; 802 params_.enable_quic = false;
822 803
823 if (globals_->system_http_network_session) 804 if (globals_->system_request_context_storage)
824 globals_->system_http_network_session->DisableQuic(); 805 globals_->system_request_context_storage->http_network_session()
806 ->DisableQuic();
825 807
826 if (globals_->proxy_script_fetcher_http_network_session) 808 if (globals_->proxy_script_fetcher_http_network_session)
827 globals_->proxy_script_fetcher_http_network_session->DisableQuic(); 809 globals_->proxy_script_fetcher_http_network_session->DisableQuic();
828 } 810 }
829 811
830 base::TimeTicks IOThread::creation_time() const { 812 base::TimeTicks IOThread::creation_time() const {
831 return creation_time_; 813 return creation_time_;
832 } 814 }
833 815
834 net::SSLConfigService* IOThread::GetSSLConfigService() { 816 net::SSLConfigService* IOThread::GetSSLConfigService() {
(...skipping 21 matching lines...) Expand all
856 } 838 }
857 839
858 bool IOThread::WpadQuickCheckEnabled() const { 840 bool IOThread::WpadQuickCheckEnabled() const {
859 return quick_check_enabled_.GetValue(); 841 return quick_check_enabled_.GetValue();
860 } 842 }
861 843
862 bool IOThread::PacHttpsUrlStrippingEnabled() const { 844 bool IOThread::PacHttpsUrlStrippingEnabled() const {
863 return pac_https_url_stripping_enabled_.GetValue(); 845 return pac_https_url_stripping_enabled_.GetValue();
864 } 846 }
865 847
866 // static 848 void IOThread::ConstructSystemRequestContext() {
867 net::URLRequestContext* IOThread::ConstructSystemRequestContext( 849 globals_->system_request_context =
868 IOThread::Globals* globals, 850 base::MakeUnique<SystemURLRequestContext>();
869 const net::HttpNetworkSession::Params& params, 851 net::URLRequestContext* context = globals_->system_request_context.get();
870 net::NetLog* net_log) { 852 globals_->system_request_context_storage =
871 net::URLRequestContext* context = new SystemURLRequestContext; 853 base::MakeUnique<net::URLRequestContextStorage>(context);
854 net::URLRequestContextStorage* context_storage =
855 globals_->system_request_context_storage.get();
872 856
873 context->set_network_quality_estimator( 857 context->set_network_quality_estimator(
874 globals->network_quality_estimator.get()); 858 globals_->network_quality_estimator.get());
875 context->set_enable_brotli(globals->enable_brotli); 859 context->set_enable_brotli(globals_->enable_brotli);
876 context->set_name("system"); 860 context->set_name("system");
877 861
878 context->set_http_user_agent_settings( 862 context->set_http_user_agent_settings(
879 globals->http_user_agent_settings.get()); 863 globals_->http_user_agent_settings.get());
880 context->set_network_delegate(globals->system_network_delegate.get()); 864 context->set_network_delegate(globals_->system_network_delegate.get());
881 context->set_net_log(net_log); 865 context->set_net_log(net_log_);
882 context->set_host_resolver(globals->host_resolver.get()); 866 context->set_host_resolver(globals_->host_resolver.get());
883 context->set_proxy_service(globals->system_proxy_service.get()); 867
884 context->set_ssl_config_service(globals->ssl_config_service.get()); 868 context->set_ssl_config_service(globals_->ssl_config_service.get());
885 context->set_http_auth_handler_factory( 869 context->set_http_auth_handler_factory(
886 globals->http_auth_handler_factory.get()); 870 globals_->http_auth_handler_factory.get());
887 871
888 context->set_cookie_store(globals->system_cookie_store.get()); 872 // In-memory cookie store.
889 context->set_channel_id_service( 873 context_storage->set_cookie_store(
890 globals->system_channel_id_service.get()); 874 content::CreateCookieStore(content::CookieStoreConfig()));
875 // In-memory channel ID store.
876 context_storage->set_channel_id_service(
877 base::MakeUnique<net::ChannelIDService>(
878 new net::DefaultChannelIDStore(nullptr)));
879 context->cookie_store()->SetChannelIDServiceID(
880 context->channel_id_service()->GetUniqueID());
881
891 context->set_transport_security_state( 882 context->set_transport_security_state(
892 globals->transport_security_state.get()); 883 globals_->transport_security_state.get());
893 884
894 context->set_http_server_properties(globals->http_server_properties.get()); 885 context->set_http_server_properties(globals_->http_server_properties.get());
895 886
896 context->set_cert_verifier(globals->cert_verifier.get()); 887 context->set_cert_verifier(globals_->cert_verifier.get());
897 context->set_cert_transparency_verifier( 888 context->set_cert_transparency_verifier(
898 globals->cert_transparency_verifier.get()); 889 globals_->cert_transparency_verifier.get());
899 context->set_ct_policy_enforcer(globals->ct_policy_enforcer.get()); 890 context->set_ct_policy_enforcer(globals_->ct_policy_enforcer.get());
900 891
901 net::HttpNetworkSession::Params system_params(params); 892 TRACE_EVENT_BEGIN0("startup",
893 "IOThread::Init:ProxyScriptFetcherRequestContext");
894 globals_->proxy_script_fetcher_context.reset(
895 ConstructProxyScriptFetcherContext(globals_, params_, net_log_));
896 TRACE_EVENT_END0("startup",
897 "IOThread::Init:ProxyScriptFetcherRequestContext");
898
899 const base::CommandLine& command_line =
900 *base::CommandLine::ForCurrentProcess();
901 context_storage->set_proxy_service(ProxyServiceFactory::CreateProxyService(
902 net_log_, globals_->proxy_script_fetcher_context.get(),
903 globals_->system_network_delegate.get(),
904 std::move(system_proxy_config_service_), command_line,
905 WpadQuickCheckEnabled(), PacHttpsUrlStrippingEnabled()));
mmenke 2017/05/10 18:07:54 Had to move proxy creation to just before it's use
Randy Smith (Not in Mondays) 2017/05/10 21:54:48 I'm missing the dependencies; can you spell them o
906
907 net::HttpNetworkSession::Params system_params(params_);
902 net::URLRequestContextBuilder::SetHttpNetworkSessionComponents( 908 net::URLRequestContextBuilder::SetHttpNetworkSessionComponents(
903 context, &system_params); 909 context, &system_params);
904 910
905 globals->system_http_network_session.reset( 911 context_storage->set_http_network_session(
906 new net::HttpNetworkSession(system_params)); 912 base::MakeUnique<net::HttpNetworkSession>(system_params));
907 globals->system_http_transaction_factory.reset( 913 context_storage->set_http_transaction_factory(
908 new net::HttpNetworkLayer(globals->system_http_network_session.get())); 914 base::MakeUnique<net::HttpNetworkLayer>(
915 context_storage->http_network_session()));
909 916
910 context->set_http_transaction_factory( 917 context_storage->set_job_factory(
911 globals->system_http_transaction_factory.get()); 918 base::MakeUnique<net::URLRequestJobFactoryImpl>());
912
913 globals->system_url_request_job_factory.reset(
914 new net::URLRequestJobFactoryImpl());
915 context->set_job_factory(globals->system_url_request_job_factory.get());
916
917 return context;
918 } 919 }
919 920
920 // static 921 // static
921 void IOThread::ConfigureParamsFromFieldTrialsAndCommandLine( 922 void IOThread::ConfigureParamsFromFieldTrialsAndCommandLine(
922 const base::CommandLine& command_line, 923 const base::CommandLine& command_line,
923 bool is_quic_allowed_by_policy, 924 bool is_quic_allowed_by_policy,
924 bool http_09_on_non_default_ports_enabled, 925 bool http_09_on_non_default_ports_enabled,
925 net::HttpNetworkSession::Params* params) { 926 net::HttpNetworkSession::Params* params) {
926 std::string quic_user_agent_id = chrome::GetChannelString(); 927 std::string quic_user_agent_id = chrome::GetChannelString();
927 if (!quic_user_agent_id.empty()) 928 if (!quic_user_agent_id.empty())
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 globals->cert_transparency_verifier.get()); 1027 globals->cert_transparency_verifier.get());
1027 context->set_ct_policy_enforcer(globals->ct_policy_enforcer.get()); 1028 context->set_ct_policy_enforcer(globals->ct_policy_enforcer.get());
1028 context->set_ssl_config_service(globals->ssl_config_service.get()); 1029 context->set_ssl_config_service(globals->ssl_config_service.get());
1029 context->set_http_auth_handler_factory( 1030 context->set_http_auth_handler_factory(
1030 globals->http_auth_handler_factory.get()); 1031 globals->http_auth_handler_factory.get());
1031 context->set_proxy_service(globals->proxy_script_fetcher_proxy_service.get()); 1032 context->set_proxy_service(globals->proxy_script_fetcher_proxy_service.get());
1032 1033
1033 context->set_job_factory( 1034 context->set_job_factory(
1034 globals->proxy_script_fetcher_url_request_job_factory.get()); 1035 globals->proxy_script_fetcher_url_request_job_factory.get());
1035 1036
1036 context->set_cookie_store(globals->system_cookie_store.get()); 1037 context->set_cookie_store(globals->system_request_context->cookie_store());
1037 context->set_channel_id_service( 1038 context->set_channel_id_service(
1038 globals->system_channel_id_service.get()); 1039 globals->system_request_context->channel_id_service());
1039 context->set_network_delegate(globals->system_network_delegate.get()); 1040 context->set_network_delegate(globals->system_network_delegate.get());
1040 context->set_http_user_agent_settings( 1041 context->set_http_user_agent_settings(
1041 globals->http_user_agent_settings.get()); 1042 globals->http_user_agent_settings.get());
1042 context->set_http_server_properties(globals->http_server_properties.get()); 1043 context->set_http_server_properties(globals->http_server_properties.get());
1043 1044
1044 context->set_enable_brotli(globals->enable_brotli); 1045 context->set_enable_brotli(globals->enable_brotli);
1045 1046
1046 net::HttpNetworkSession::Params session_params(params); 1047 net::HttpNetworkSession::Params session_params(params);
1047 net::URLRequestContextBuilder::SetHttpNetworkSessionComponents( 1048 net::URLRequestContextBuilder::SetHttpNetworkSessionComponents(
1048 context, &session_params); 1049 context, &session_params);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1080 1081
1081 // TODO(rtenneti): We should probably use HttpServerPropertiesManager for the 1082 // TODO(rtenneti): We should probably use HttpServerPropertiesManager for the
1082 // system URLRequestContext too. There's no reason this should be tied to a 1083 // system URLRequestContext too. There's no reason this should be tied to a
1083 // profile. 1084 // profile.
1084 return context; 1085 return context;
1085 } 1086 }
1086 1087
1087 metrics::UpdateUsagePrefCallbackType IOThread::GetMetricsDataUseForwarder() { 1088 metrics::UpdateUsagePrefCallbackType IOThread::GetMetricsDataUseForwarder() {
1088 return base::Bind(&UpdateMetricsUsagePrefsOnUIThread); 1089 return base::Bind(&UpdateMetricsUsagePrefsOnUIThread);
1089 } 1090 }
OLDNEW
« no previous file with comments | « chrome/browser/io_thread.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698