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

Unified Diff: chrome/browser/io_thread.cc

Issue 2860033003: Don't delay creation of system URLRequestContext until first use (Closed)
Patch Set: Remove comment 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/io_thread.h ('k') | chrome/test/base/testing_io_thread_state.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/io_thread.cc
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index b92436f393d82503f859153bb758887c1eb57aeb..a5fc93a50074649206be69a763d5ce149d9c1721 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -203,6 +203,10 @@ class SystemURLRequestContext : public net::URLRequestContext {
#if defined(USE_NSS_CERTS)
net::SetURLRequestContextForNSSHttpIO(NULL);
#endif
+
+#if defined(OS_ANDROID)
+ net::CertVerifyProcAndroid::ShutdownCertNetFetcher();
+#endif
}
};
@@ -396,6 +400,8 @@ IOThread::IOThread(
pref_proxy_config_tracker_.reset(
ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState(
local_state));
+ system_proxy_config_service_ = ProxyServiceFactory::CreateProxyConfigService(
+ pref_proxy_config_tracker_.get());
ChromeNetworkDelegate::InitializePrefsOnUIThread(
&system_enable_referrers_,
nullptr,
@@ -487,7 +493,8 @@ void IOThread::ChangedToOnTheRecord() {
net::URLRequestContextGetter* IOThread::system_url_request_context_getter() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (!system_url_request_context_getter_.get()) {
- InitSystemRequestContext();
+ system_url_request_context_getter_ =
+ new SystemURLRequestContextGetter(this);
}
return system_url_request_context_getter_.get();
}
@@ -683,26 +690,21 @@ void IOThread::Init() {
base::Bind(&ObserveKeychainEvents));
#endif
- // InitSystemRequestContext turns right around and posts a task back
- // to the IO thread, so we can't let it run until we know the IO
- // thread has started.
- //
- // Note that since we are at BrowserThread::Init time, the UI thread
- // is blocked waiting for the thread to start. Therefore, posting
- // this task to the main thread's message loop here is guaranteed to
- // get it onto the message loop while the IOThread object still
- // exists. However, the message might not be processed on the UI
- // thread until after IOThread is gone, so use a weak pointer.
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
- base::BindOnce(&IOThread::InitSystemRequestContext,
- weak_factory_.GetWeakPtr()));
-
#if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
// Record how common CPUs with broken NEON units are. See
// https://crbug.com/341598.
crypto::EnsureOpenSSLInit();
UMA_HISTOGRAM_BOOLEAN("Net.HasBrokenNEON", CRYPTO_has_broken_NEON());
#endif
+
+ globals_->system_proxy_service = ProxyServiceFactory::CreateProxyService(
+ net_log_, globals_->proxy_script_fetcher_context.get(),
+ globals_->system_network_delegate.get(),
+ std::move(system_proxy_config_service_), command_line,
+ WpadQuickCheckEnabled(), PacHttpsUrlStrippingEnabled());
+
+ globals_->system_request_context.reset(
+ ConstructSystemRequestContext(globals_, params_, net_log_));
}
void IOThread::CleanUp() {
@@ -712,19 +714,19 @@ void IOThread::CleanUp() {
net::ShutdownNSSHttpIO();
#endif
-#if defined(OS_ANDROID)
- net::CertVerifyProcAndroid::ShutdownCertNetFetcher();
-#endif
-
system_url_request_context_getter_ = NULL;
// Unlink the ct_tree_tracker_ from the global cert_transparency_verifier
// and unregister it from new STH notifications so it will take no actions
// on anything observed during CleanUp process.
- globals()->cert_transparency_verifier->SetObserver(nullptr);
- UnregisterSTHObserver(ct_tree_tracker_.get());
-
- ct_tree_tracker_.reset();
+ //
+ // Null checks are just for tests that use TestingIOThreadState.
+ if (globals()->cert_transparency_verifier)
+ globals()->cert_transparency_verifier->SetObserver(nullptr);
+ if (ct_tree_tracker_.get()) {
+ UnregisterSTHObserver(ct_tree_tracker_.get());
+ ct_tree_tracker_.reset();
+ }
// Release objects that the net::URLRequestContext could have been pointing
// to.
@@ -853,41 +855,6 @@ void IOThread::ChangedToOnTheRecordOnIOThread() {
ClearHostCache(base::Callback<bool(const std::string&)>());
}
-void IOThread::InitSystemRequestContext() {
- if (system_url_request_context_getter_.get())
- return;
- // If we're in unit_tests, IOThread may not be run.
- if (!BrowserThread::IsMessageLoopValid(BrowserThread::IO))
- return;
- system_proxy_config_service_ = ProxyServiceFactory::CreateProxyConfigService(
- pref_proxy_config_tracker_.get());
- system_url_request_context_getter_ =
- new SystemURLRequestContextGetter(this);
- // Safe to post an unretained this pointer, since IOThread is
- // guaranteed to outlive the IO BrowserThread.
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::BindOnce(&IOThread::InitSystemRequestContextOnIOThread,
- base::Unretained(this)));
-}
-
-void IOThread::InitSystemRequestContextOnIOThread() {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(!globals_->system_proxy_service.get());
- DCHECK(system_proxy_config_service_.get());
-
- const base::CommandLine& command_line =
- *base::CommandLine::ForCurrentProcess();
- globals_->system_proxy_service = ProxyServiceFactory::CreateProxyService(
- net_log_, globals_->proxy_script_fetcher_context.get(),
- globals_->system_network_delegate.get(),
- std::move(system_proxy_config_service_), command_line,
- WpadQuickCheckEnabled(), PacHttpsUrlStrippingEnabled());
-
- globals_->system_request_context.reset(
- ConstructSystemRequestContext(globals_, params_, net_log_));
-}
-
void IOThread::UpdateDnsClientEnabled() {
globals()->host_resolver->SetDnsClientEnabled(*dns_client_enabled_);
}
« no previous file with comments | « chrome/browser/io_thread.h ('k') | chrome/test/base/testing_io_thread_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698