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 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
637 // Register the ct_tree_tracker_ as observer for verified SCTs. | 637 // Register the ct_tree_tracker_ as observer for verified SCTs. |
638 globals_->cert_transparency_verifier->SetObserver(ct_tree_tracker_.get()); | 638 globals_->cert_transparency_verifier->SetObserver(ct_tree_tracker_.get()); |
639 | 639 |
640 globals_->ct_policy_enforcer.reset(new net::CTPolicyEnforcer()); | 640 globals_->ct_policy_enforcer.reset(new net::CTPolicyEnforcer()); |
641 params_.ct_policy_enforcer = globals_->ct_policy_enforcer.get(); | 641 params_.ct_policy_enforcer = globals_->ct_policy_enforcer.get(); |
642 | 642 |
643 globals_->ssl_config_service = GetSSLConfigService(); | 643 globals_->ssl_config_service = GetSSLConfigService(); |
644 | 644 |
645 CreateDefaultAuthHandlerFactory(); | 645 CreateDefaultAuthHandlerFactory(); |
646 globals_->http_server_properties.reset(new net::HttpServerPropertiesImpl()); | 646 globals_->http_server_properties.reset(new net::HttpServerPropertiesImpl()); |
647 // For the ProxyScriptFetcher, we use a direct ProxyService. | |
648 globals_->proxy_script_fetcher_proxy_service = | |
649 net::ProxyService::CreateDirectWithNetLog(net_log_); | |
650 globals_->dns_probe_service.reset(new chrome_browser_net::DnsProbeService()); | 647 globals_->dns_probe_service.reset(new chrome_browser_net::DnsProbeService()); |
651 globals_->host_mapping_rules.reset(new net::HostMappingRules()); | 648 globals_->host_mapping_rules.reset(new net::HostMappingRules()); |
652 if (command_line.HasSwitch(switches::kHostRules)) { | 649 if (command_line.HasSwitch(switches::kHostRules)) { |
653 TRACE_EVENT_BEGIN0("startup", "IOThread::InitAsync:SetRulesFromString"); | 650 TRACE_EVENT_BEGIN0("startup", "IOThread::InitAsync:SetRulesFromString"); |
654 globals_->host_mapping_rules->SetRulesFromString( | 651 globals_->host_mapping_rules->SetRulesFromString( |
655 command_line.GetSwitchValueASCII(switches::kHostRules)); | 652 command_line.GetSwitchValueASCII(switches::kHostRules)); |
656 TRACE_EVENT_END0("startup", "IOThread::InitAsync:SetRulesFromString"); | 653 TRACE_EVENT_END0("startup", "IOThread::InitAsync:SetRulesFromString"); |
657 } | 654 } |
658 params_.host_mapping_rules = *globals_->host_mapping_rules.get(); | 655 params_.host_mapping_rules = *globals_->host_mapping_rules.get(); |
659 globals_->http_user_agent_settings.reset( | 656 globals_->http_user_agent_settings.reset( |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 // on anything observed during CleanUp process. | 705 // on anything observed during CleanUp process. |
709 // | 706 // |
710 // Null checks are just for tests that use TestingIOThreadState. | 707 // Null checks are just for tests that use TestingIOThreadState. |
711 if (globals()->cert_transparency_verifier) | 708 if (globals()->cert_transparency_verifier) |
712 globals()->cert_transparency_verifier->SetObserver(nullptr); | 709 globals()->cert_transparency_verifier->SetObserver(nullptr); |
713 if (ct_tree_tracker_.get()) { | 710 if (ct_tree_tracker_.get()) { |
714 UnregisterSTHObserver(ct_tree_tracker_.get()); | 711 UnregisterSTHObserver(ct_tree_tracker_.get()); |
715 ct_tree_tracker_.reset(); | 712 ct_tree_tracker_.reset(); |
716 } | 713 } |
717 | 714 |
| 715 if (globals_->system_request_context) |
| 716 globals_->system_request_context->proxy_service()->OnShutdown(); |
| 717 |
718 // Release objects that the net::URLRequestContext could have been pointing | 718 // Release objects that the net::URLRequestContext could have been pointing |
719 // to. | 719 // to. |
720 | 720 |
721 // Shutdown the HistogramWatcher on the IO thread. | 721 // Shutdown the HistogramWatcher on the IO thread. |
722 net::NetworkChangeNotifier::ShutdownHistogramWatcher(); | 722 net::NetworkChangeNotifier::ShutdownHistogramWatcher(); |
723 | 723 |
724 // This must be reset before the ChromeNetLog is destroyed. | 724 // This must be reset before the ChromeNetLog is destroyed. |
725 network_change_observer_.reset(); | 725 network_change_observer_.reset(); |
726 | 726 |
727 system_proxy_config_service_.reset(); | 727 system_proxy_config_service_.reset(); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
815 const net::HttpNetworkSession::Params& IOThread::NetworkSessionParams() const { | 815 const net::HttpNetworkSession::Params& IOThread::NetworkSessionParams() const { |
816 return params_; | 816 return params_; |
817 } | 817 } |
818 | 818 |
819 void IOThread::DisableQuic() { | 819 void IOThread::DisableQuic() { |
820 params_.enable_quic = false; | 820 params_.enable_quic = false; |
821 | 821 |
822 if (globals_->system_request_context_storage) | 822 if (globals_->system_request_context_storage) |
823 globals_->system_request_context_storage->http_network_session() | 823 globals_->system_request_context_storage->http_network_session() |
824 ->DisableQuic(); | 824 ->DisableQuic(); |
825 | |
826 if (globals_->proxy_script_fetcher_http_network_session) | |
827 globals_->proxy_script_fetcher_http_network_session->DisableQuic(); | |
828 } | 825 } |
829 | 826 |
830 base::TimeTicks IOThread::creation_time() const { | 827 base::TimeTicks IOThread::creation_time() const { |
831 return creation_time_; | 828 return creation_time_; |
832 } | 829 } |
833 | 830 |
834 net::SSLConfigService* IOThread::GetSSLConfigService() { | 831 net::SSLConfigService* IOThread::GetSSLConfigService() { |
835 return ssl_config_service_manager_->Get(); | 832 return ssl_config_service_manager_->Get(); |
836 } | 833 } |
837 | 834 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
900 context->set_transport_security_state( | 897 context->set_transport_security_state( |
901 globals_->transport_security_state.get()); | 898 globals_->transport_security_state.get()); |
902 | 899 |
903 context->set_http_server_properties(globals_->http_server_properties.get()); | 900 context->set_http_server_properties(globals_->http_server_properties.get()); |
904 | 901 |
905 context->set_cert_verifier(globals_->cert_verifier.get()); | 902 context->set_cert_verifier(globals_->cert_verifier.get()); |
906 context->set_cert_transparency_verifier( | 903 context->set_cert_transparency_verifier( |
907 globals_->cert_transparency_verifier.get()); | 904 globals_->cert_transparency_verifier.get()); |
908 context->set_ct_policy_enforcer(globals_->ct_policy_enforcer.get()); | 905 context->set_ct_policy_enforcer(globals_->ct_policy_enforcer.get()); |
909 | 906 |
910 TRACE_EVENT_BEGIN0("startup", | |
911 "IOThread::Init:ProxyScriptFetcherRequestContext"); | |
912 globals_->proxy_script_fetcher_context.reset( | |
913 ConstructProxyScriptFetcherContext(globals_, params_, net_log_)); | |
914 TRACE_EVENT_END0("startup", | |
915 "IOThread::Init:ProxyScriptFetcherRequestContext"); | |
916 | |
917 const base::CommandLine& command_line = | 907 const base::CommandLine& command_line = |
918 *base::CommandLine::ForCurrentProcess(); | 908 *base::CommandLine::ForCurrentProcess(); |
919 context_storage->set_proxy_service(ProxyServiceFactory::CreateProxyService( | 909 context_storage->set_proxy_service(ProxyServiceFactory::CreateProxyService( |
920 net_log_, globals_->proxy_script_fetcher_context.get(), | 910 net_log_, context, globals_->system_network_delegate.get(), |
921 globals_->system_network_delegate.get(), | |
922 std::move(system_proxy_config_service_), command_line, | 911 std::move(system_proxy_config_service_), command_line, |
923 WpadQuickCheckEnabled(), PacHttpsUrlStrippingEnabled())); | 912 WpadQuickCheckEnabled(), PacHttpsUrlStrippingEnabled())); |
924 | 913 |
925 net::HttpNetworkSession::Params system_params(params_); | 914 net::HttpNetworkSession::Params system_params(params_); |
926 net::URLRequestContextBuilder::SetHttpNetworkSessionComponents( | 915 net::URLRequestContextBuilder::SetHttpNetworkSessionComponents( |
927 context, &system_params); | 916 context, &system_params); |
928 | 917 |
929 context_storage->set_http_network_session( | 918 context_storage->set_http_network_session( |
930 base::MakeUnique<net::HttpNetworkSession>(system_params)); | 919 base::MakeUnique<net::HttpNetworkSession>(system_params)); |
931 context_storage->set_http_transaction_factory( | 920 context_storage->set_http_transaction_factory( |
932 base::MakeUnique<net::HttpNetworkLayer>( | 921 base::MakeUnique<net::HttpNetworkLayer>( |
933 context_storage->http_network_session())); | 922 context_storage->http_network_session())); |
934 | 923 |
935 context_storage->set_job_factory( | 924 std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory( |
936 base::MakeUnique<net::URLRequestJobFactoryImpl>()); | 925 new net::URLRequestJobFactoryImpl()); |
| 926 |
| 927 job_factory->SetProtocolHandler(url::kDataScheme, |
| 928 base::MakeUnique<net::DataProtocolHandler>()); |
| 929 job_factory->SetProtocolHandler( |
| 930 url::kFileScheme, |
| 931 base::MakeUnique<net::FileProtocolHandler>( |
| 932 base::CreateTaskRunnerWithTraits( |
| 933 {base::MayBlock(), base::TaskPriority::USER_VISIBLE, |
| 934 base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}))); |
| 935 #if !BUILDFLAG(DISABLE_FTP_SUPPORT) |
| 936 job_factory->SetProtocolHandler( |
| 937 url::kFtpScheme, |
| 938 net::FtpProtocolHandler::Create(globals_->host_resolver.get())); |
| 939 #endif |
| 940 |
| 941 context_storage->set_job_factory(std::move(job_factory)); |
937 } | 942 } |
938 | 943 |
939 // static | 944 // static |
940 void IOThread::ConfigureParamsFromFieldTrialsAndCommandLine( | 945 void IOThread::ConfigureParamsFromFieldTrialsAndCommandLine( |
941 const base::CommandLine& command_line, | 946 const base::CommandLine& command_line, |
942 bool is_quic_allowed_by_policy, | 947 bool is_quic_allowed_by_policy, |
943 bool http_09_on_non_default_ports_enabled, | 948 bool http_09_on_non_default_ports_enabled, |
944 net::HttpNetworkSession::Params* params) { | 949 net::HttpNetworkSession::Params* params) { |
945 std::string quic_user_agent_id = chrome::GetChannelString(); | 950 std::string quic_user_agent_id = chrome::GetChannelString(); |
946 if (!quic_user_agent_id.empty()) | 951 if (!quic_user_agent_id.empty()) |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 } | 1028 } |
1024 if (command_line.HasSwitch(switches::kTestingFixedHttpsPort)) { | 1029 if (command_line.HasSwitch(switches::kTestingFixedHttpsPort)) { |
1025 params->testing_fixed_https_port = | 1030 params->testing_fixed_https_port = |
1026 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpsPort); | 1031 GetSwitchValueAsInt(command_line, switches::kTestingFixedHttpsPort); |
1027 } | 1032 } |
1028 | 1033 |
1029 params->http_09_on_non_default_ports_enabled = | 1034 params->http_09_on_non_default_ports_enabled = |
1030 http_09_on_non_default_ports_enabled; | 1035 http_09_on_non_default_ports_enabled; |
1031 } | 1036 } |
1032 | 1037 |
1033 // static | |
1034 net::URLRequestContext* IOThread::ConstructProxyScriptFetcherContext( | |
1035 IOThread::Globals* globals, | |
1036 const net::HttpNetworkSession::Params& params, | |
1037 net::NetLog* net_log) { | |
1038 net::URLRequestContext* context = new net::URLRequestContext; | |
1039 context->set_net_log(net_log); | |
1040 context->set_host_resolver(globals->host_resolver.get()); | |
1041 context->set_cert_verifier(globals->cert_verifier.get()); | |
1042 context->set_transport_security_state( | |
1043 globals->transport_security_state.get()); | |
1044 context->set_cert_transparency_verifier( | |
1045 globals->cert_transparency_verifier.get()); | |
1046 context->set_ct_policy_enforcer(globals->ct_policy_enforcer.get()); | |
1047 context->set_ssl_config_service(globals->ssl_config_service.get()); | |
1048 context->set_http_auth_handler_factory( | |
1049 globals->http_auth_handler_factory.get()); | |
1050 context->set_proxy_service(globals->proxy_script_fetcher_proxy_service.get()); | |
1051 | |
1052 context->set_job_factory( | |
1053 globals->proxy_script_fetcher_url_request_job_factory.get()); | |
1054 | |
1055 context->set_cookie_store(globals->system_request_context->cookie_store()); | |
1056 context->set_channel_id_service( | |
1057 globals->system_request_context->channel_id_service()); | |
1058 context->set_network_delegate(globals->system_network_delegate.get()); | |
1059 context->set_http_user_agent_settings( | |
1060 globals->http_user_agent_settings.get()); | |
1061 context->set_http_server_properties(globals->http_server_properties.get()); | |
1062 | |
1063 context->set_enable_brotli(globals->enable_brotli); | |
1064 | |
1065 net::HttpNetworkSession::Params session_params(params); | |
1066 net::URLRequestContextBuilder::SetHttpNetworkSessionComponents( | |
1067 context, &session_params); | |
1068 | |
1069 globals->proxy_script_fetcher_http_network_session.reset( | |
1070 new net::HttpNetworkSession(session_params)); | |
1071 globals->proxy_script_fetcher_http_transaction_factory.reset( | |
1072 new net::HttpNetworkLayer( | |
1073 globals->proxy_script_fetcher_http_network_session.get())); | |
1074 context->set_name("proxy"); | |
1075 context->set_http_transaction_factory( | |
1076 globals->proxy_script_fetcher_http_transaction_factory.get()); | |
1077 | |
1078 std::unique_ptr<net::URLRequestJobFactoryImpl> job_factory( | |
1079 new net::URLRequestJobFactoryImpl()); | |
1080 | |
1081 job_factory->SetProtocolHandler(url::kDataScheme, | |
1082 base::MakeUnique<net::DataProtocolHandler>()); | |
1083 job_factory->SetProtocolHandler( | |
1084 url::kFileScheme, | |
1085 base::MakeUnique<net::FileProtocolHandler>( | |
1086 base::CreateTaskRunnerWithTraits( | |
1087 {base::MayBlock(), base::TaskPriority::USER_VISIBLE, | |
1088 base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}))); | |
1089 #if !BUILDFLAG(DISABLE_FTP_SUPPORT) | |
1090 job_factory->SetProtocolHandler( | |
1091 url::kFtpScheme, | |
1092 net::FtpProtocolHandler::Create(globals->host_resolver.get())); | |
1093 #endif | |
1094 globals->proxy_script_fetcher_url_request_job_factory = | |
1095 std::move(job_factory); | |
1096 | |
1097 context->set_job_factory( | |
1098 globals->proxy_script_fetcher_url_request_job_factory.get()); | |
1099 | |
1100 // TODO(rtenneti): We should probably use HttpServerPropertiesManager for the | |
1101 // system URLRequestContext too. There's no reason this should be tied to a | |
1102 // profile. | |
1103 return context; | |
1104 } | |
1105 | |
1106 metrics::UpdateUsagePrefCallbackType IOThread::GetMetricsDataUseForwarder() { | 1038 metrics::UpdateUsagePrefCallbackType IOThread::GetMetricsDataUseForwarder() { |
1107 return base::Bind(&UpdateMetricsUsagePrefsOnUIThread); | 1039 return base::Bind(&UpdateMetricsUsagePrefsOnUIThread); |
1108 } | 1040 } |
OLD | NEW |