Index: chrome/browser/io_thread.cc |
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc |
index a730d142064ab6be67c3112667264af7945a6655..97864e69c2bc6c2508b5187826b25f33bc13f341 100644 |
--- a/chrome/browser/io_thread.cc |
+++ b/chrome/browser/io_thread.cc |
@@ -547,8 +547,6 @@ void IOThread::Init() { |
BrowserThread::GetTaskRunnerForThread(BrowserThread::UI))); |
#endif // defined(OS_ANDROID) |
- globals_->host_resolver = CreateGlobalHostResolver(net_log_); |
- |
std::map<std::string, std::string> network_quality_estimator_params; |
variations::GetVariationParams(kNetworkQualityEstimatorFieldTrialName, |
&network_quality_estimator_params); |
@@ -578,38 +576,16 @@ void IOThread::Init() { |
globals_->network_quality_observer = content::CreateNetworkQualityObserver( |
globals_->network_quality_estimator.get()); |
- UpdateDnsClientEnabled(); |
-#if defined(OS_CHROMEOS) |
- // Creates a CertVerifyProc that doesn't allow any profile-provided certs. |
- globals_->cert_verifier = base::MakeUnique<net::CachingCertVerifier>( |
- base::MakeUnique<net::MultiThreadedCertVerifier>( |
- new chromeos::CertVerifyProcChromeOS())); |
-#else |
- globals_->cert_verifier = IgnoreErrorsCertVerifier::MaybeWrapCertVerifier( |
- command_line, net::CertVerifier::CreateDefault()); |
- UMA_HISTOGRAM_BOOLEAN( |
- "Net.Certificate.IgnoreCertificateErrorsSPKIListPresent", |
- command_line.HasSwitch(switches::kIgnoreCertificateErrorsSPKIList)); |
-#endif |
- |
std::vector<scoped_refptr<const net::CTLogVerifier>> ct_logs( |
net::ct::CreateLogVerifiersForKnownLogs()); |
globals_->ct_logs.assign(ct_logs.begin(), ct_logs.end()); |
- net::MultiLogCTVerifier* ct_verifier = new net::MultiLogCTVerifier(); |
- globals_->cert_transparency_verifier.reset(ct_verifier); |
- // Add built-in logs |
- ct_verifier->AddLogs(globals_->ct_logs); |
- |
ct_tree_tracker_.reset(new certificate_transparency::TreeStateTracker( |
globals_->ct_logs, net_log_)); |
// Register the ct_tree_tracker_ as observer for new STHs. |
RegisterSTHObserver(ct_tree_tracker_.get()); |
- // Register the ct_tree_tracker_ as observer for verified SCTs. |
- globals_->cert_transparency_verifier->SetObserver(ct_tree_tracker_.get()); |
- CreateDefaultAuthHandlerFactory(); |
globals_->dns_probe_service.reset(new chrome_browser_net::DnsProbeService()); |
globals_->host_mapping_rules.reset(new net::HostMappingRules()); |
if (command_line.HasSwitch(switches::kHostRules)) { |
@@ -654,6 +630,8 @@ void IOThread::Init() { |
#endif |
ConstructSystemRequestContext(); |
+ |
+ UpdateDnsClientEnabled(); |
} |
void IOThread::CleanUp() { |
@@ -670,8 +648,11 @@ void IOThread::CleanUp() { |
// on anything observed during CleanUp process. |
// |
// Null checks are just for tests that use TestingIOThreadState. |
- if (globals()->cert_transparency_verifier) |
- globals()->cert_transparency_verifier->SetObserver(nullptr); |
+ if (globals()->system_request_context) { |
+ globals() |
+ ->system_request_context->cert_transparency_verifier() |
+ ->SetObserver(nullptr); |
+ } |
if (ct_tree_tracker_.get()) { |
UnregisterSTHObserver(ct_tree_tracker_.get()); |
ct_tree_tracker_.reset(); |
@@ -742,7 +723,8 @@ void IOThread::UpdateNegotiateEnablePort() { |
negotiate_enable_port_.GetValue()); |
} |
-void IOThread::CreateDefaultAuthHandlerFactory() { |
+std::unique_ptr<net::HttpAuthHandlerFactory> |
+IOThread::CreateDefaultAuthHandlerFactory(net::HostResolver* host_resolver) { |
std::vector<std::string> supported_schemes = base::SplitString( |
auth_schemes_, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY); |
globals_->http_auth_preferences.reset(new net::HttpAuthPreferences( |
@@ -763,16 +745,20 @@ void IOThread::CreateDefaultAuthHandlerFactory() { |
#if defined(OS_ANDROID) |
UpdateAndroidAuthNegotiateAccountType(); |
#endif |
- globals_->http_auth_handler_factory = |
- net::HttpAuthHandlerRegistryFactory::Create( |
- globals_->http_auth_preferences.get(), globals_->host_resolver.get()); |
+ |
+ return net::HttpAuthHandlerRegistryFactory::Create( |
+ globals_->http_auth_preferences.get(), host_resolver); |
} |
void IOThread::ClearHostCache( |
const base::Callback<bool(const std::string&)>& host_filter) { |
DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- net::HostCache* host_cache = globals_->host_resolver->GetHostCache(); |
+ if (!globals_->system_request_context) |
+ return; |
+ |
+ net::HostCache* host_cache = |
+ globals_->system_request_context->host_resolver()->GetHostCache(); |
if (host_cache) |
host_cache->ClearForHosts(host_filter); |
} |
@@ -806,7 +792,8 @@ void IOThread::ChangedToOnTheRecordOnIOThread() { |
} |
void IOThread::UpdateDnsClientEnabled() { |
- globals()->host_resolver->SetDnsClientEnabled(*dns_client_enabled_); |
+ globals()->system_request_context->host_resolver()->SetDnsClientEnabled( |
+ *dns_client_enabled_); |
} |
void IOThread::RegisterSTHObserver(net::ct::STHObserver* observer) { |
@@ -826,6 +813,9 @@ bool IOThread::PacHttpsUrlStrippingEnabled() const { |
} |
void IOThread::ConstructSystemRequestContext() { |
+ const base::CommandLine& command_line = |
+ *base::CommandLine::ForCurrentProcess(); |
+ |
globals_->system_request_context = |
base::MakeUnique<SystemURLRequestContext>(); |
net::URLRequestContext* context = globals_->system_request_context.get(); |
@@ -853,11 +843,11 @@ void IOThread::ConstructSystemRequestContext() { |
globals_->data_use_ascriber->CreateNetworkDelegate( |
std::move(chrome_network_delegate), GetMetricsDataUseForwarder())); |
context->set_net_log(net_log_); |
- context->set_host_resolver(globals_->host_resolver.get()); |
+ context_storage->set_host_resolver(CreateGlobalHostResolver(net_log_)); |
context_storage->set_ssl_config_service(GetSSLConfigService()); |
- context->set_http_auth_handler_factory( |
- globals_->http_auth_handler_factory.get()); |
+ context_storage->set_http_auth_handler_factory( |
+ CreateDefaultAuthHandlerFactory(context->host_resolver())); |
// In-memory cookie store. |
context_storage->set_cookie_store( |
@@ -875,15 +865,33 @@ void IOThread::ConstructSystemRequestContext() { |
context_storage->set_http_server_properties( |
base::MakeUnique<net::HttpServerPropertiesImpl>()); |
- context->set_cert_verifier(globals_->cert_verifier.get()); |
- context->set_cert_transparency_verifier( |
- globals_->cert_transparency_verifier.get()); |
+#if defined(OS_CHROMEOS) |
+ // Creates a CertVerifyProc that doesn't allow any profile-provided certs. |
+ context_storage->set_cert_verifier(base::MakeUnique<net::CachingCertVerifier>( |
+ base::MakeUnique<net::MultiThreadedCertVerifier>( |
+ new chromeos::CertVerifyProcChromeOS()))); |
+#else |
+ context_storage->set_cert_verifier( |
+ IgnoreErrorsCertVerifier::MaybeWrapCertVerifier( |
+ command_line, net::CertVerifier::CreateDefault())); |
+ UMA_HISTOGRAM_BOOLEAN( |
+ "Net.Certificate.IgnoreCertificateErrorsSPKIListPresent", |
+ command_line.HasSwitch(switches::kIgnoreCertificateErrorsSPKIList)); |
+#endif |
+ |
+ std::unique_ptr<net::MultiLogCTVerifier> ct_verifier = |
+ base::MakeUnique<net::MultiLogCTVerifier>(); |
+ // Add built-in logs |
+ ct_verifier->AddLogs(globals_->ct_logs); |
+ |
+ // Register the ct_tree_tracker_ as observer for verified SCTs. |
+ ct_verifier->SetObserver(ct_tree_tracker_.get()); |
+ |
+ context_storage->set_cert_transparency_verifier(std::move(ct_verifier)); |
context_storage->set_ct_policy_enforcer( |
base::MakeUnique<net::CTPolicyEnforcer>()); |
- const base::CommandLine& command_line = |
- *base::CommandLine::ForCurrentProcess(); |
context_storage->set_proxy_service(ProxyServiceFactory::CreateProxyService( |
net_log_, context, context->network_delegate(), |
std::move(system_proxy_config_service_), command_line, |
@@ -914,7 +922,7 @@ void IOThread::ConstructSystemRequestContext() { |
#if !BUILDFLAG(DISABLE_FTP_SUPPORT) |
job_factory->SetProtocolHandler( |
url::kFtpScheme, |
- net::FtpProtocolHandler::Create(globals_->host_resolver.get())); |
+ net::FtpProtocolHandler::Create(context->host_resolver())); |
#endif |
context_storage->set_job_factory(std::move(job_factory)); |