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

Unified Diff: chrome/browser/io_thread.cc

Issue 8718012: Revert 111695 - Have content/ create and destroy its own threads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 1 month 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/browser/sync/tools/DEPS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/io_thread.cc
===================================================================
--- chrome/browser/io_thread.cc (revision 111697)
+++ chrome/browser/io_thread.cc (working copy)
@@ -316,8 +316,7 @@
SystemURLRequestContextGetter::SystemURLRequestContextGetter(
IOThread* io_thread)
: io_thread_(io_thread),
- io_message_loop_proxy_(
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)) {
+ io_message_loop_proxy_(io_thread->message_loop_proxy()) {
}
SystemURLRequestContextGetter::~SystemURLRequestContextGetter() {}
@@ -348,7 +347,8 @@
PrefService* local_state,
ChromeNetLog* net_log,
ExtensionEventRouterForwarder* extension_event_router_forwarder)
- : net_log_(net_log),
+ : content::BrowserProcessSubThread(BrowserThread::IO),
+ net_log_(net_log),
extension_event_router_forwarder_(extension_event_router_forwarder),
globals_(NULL),
sdch_manager_(NULL),
@@ -371,17 +371,17 @@
local_state);
ssl_config_service_manager_.reset(
SSLConfigServiceManager::CreateDefaultManager(local_state));
-
- BrowserThread::SetDelegate(BrowserThread::IO, this);
+ MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(&IOThread::InitSystemRequestContext,
+ weak_factory_.GetWeakPtr()));
}
IOThread::~IOThread() {
- // This isn't needed for production code, but in tests, IOThread may
- // be multiply constructed.
- BrowserThread::SetDelegate(BrowserThread::IO, NULL);
-
if (pref_proxy_config_tracker_.get())
pref_proxy_config_tracker_->DetachFromPrefService();
+ // We cannot rely on our base class to stop the thread since we want our
+ // CleanUp function to run.
+ Stop();
DCHECK(!globals_);
}
@@ -407,8 +407,10 @@
// messages around; it shouldn't be allowed to perform any blocking disk I/O.
base::ThreadRestrictions::SetIOAllowed(false);
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ content::BrowserProcessSubThread::Init();
+ DCHECK_EQ(MessageLoop::TYPE_IO, message_loop()->type());
+
#if defined(USE_NSS)
net::SetMessageLoopForOCSP();
#endif // defined(USE_NSS)
@@ -478,26 +480,6 @@
sdch_manager_ = new net::SdchManager();
sdch_manager_->set_sdch_fetcher(new SdchDictionaryFetcher);
-
- // 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::Bind(&IOThread::InitSystemRequestContext,
- weak_factory_.GetWeakPtr()));
-
- // We constructed the weak pointer on the IO thread but it will be
- // used on the UI thread. Call this to avoid a thread checker
- // error.
- weak_factory_.DetachFromThread();
}
void IOThread::CleanUp() {
@@ -538,6 +520,10 @@
base::debug::LeakTracker<net::URLRequest>::CheckForLeaks();
base::debug::LeakTracker<SystemURLRequestContextGetter>::CheckForLeaks();
+
+ // This will delete the |notification_service_|. Make sure it's done after
+ // anything else can reference it.
+ content::BrowserProcessSubThread::CleanUp();
}
// static
@@ -588,11 +574,6 @@
host_cache->clear();
}
-MessageLoop* IOThread::message_loop() const {
- return BrowserThread::UnsafeGetBrowserThread(
- BrowserThread::IO)->message_loop();
-}
-
net::SSLConfigService* IOThread::GetSSLConfigService() {
return ssl_config_service_manager_->Get();
}
@@ -612,8 +593,6 @@
}
system_url_request_context_getter_ =
new SystemURLRequestContextGetter(this);
- // Safe to post an unretained this pointer, since IOThread is
- // guaranteed to outlive the IO BrowserThread.
message_loop()->PostTask(
FROM_HERE, base::Bind(&IOThread::InitSystemRequestContextOnIOThread,
base::Unretained(this)));
« no previous file with comments | « chrome/browser/io_thread.h ('k') | chrome/browser/sync/tools/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698