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

Unified Diff: chrome/browser/io_thread.cc

Issue 8477004: Have content/ create and destroy its own threads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Temporary - look at browser_list, browser_main_loop, content/p/b/browser_shutdown 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
Index: chrome/browser/io_thread.cc
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 18d1d2ba28d8c5418b6001c9377fa6ecffb0985a..163892c540785074dd8ad17cf038235b41bc71e2 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -16,6 +16,7 @@
#include "base/string_number_conversions.h"
#include "base/string_split.h"
#include "base/string_util.h"
+#include "base/threading/thread.h"
#include "base/threading/thread_restrictions.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
@@ -316,7 +317,8 @@ class SystemURLRequestContextGetter : public net::URLRequestContextGetter {
SystemURLRequestContextGetter::SystemURLRequestContextGetter(
IOThread* io_thread)
: io_thread_(io_thread),
- io_message_loop_proxy_(io_thread->message_loop_proxy()) {
+ io_message_loop_proxy_(
+ BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)) {
}
SystemURLRequestContextGetter::~SystemURLRequestContextGetter() {}
@@ -347,8 +349,7 @@ IOThread::IOThread(
PrefService* local_state,
ChromeNetLog* net_log,
ExtensionEventRouterForwarder* extension_event_router_forwarder)
- : content::BrowserProcessSubThread(BrowserThread::IO),
- net_log_(net_log),
+ : net_log_(net_log),
extension_event_router_forwarder_(extension_event_router_forwarder),
globals_(NULL),
sdch_manager_(NULL),
@@ -371,17 +372,11 @@ IOThread::IOThread(
local_state);
ssl_config_service_manager_.reset(
SSLConfigServiceManager::CreateDefaultManager(local_state));
- MessageLoop::current()->PostTask(
- FROM_HERE, base::Bind(&IOThread::InitSystemRequestContext,
- weak_factory_.GetWeakPtr()));
}
IOThread::~IOThread() {
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_);
}
@@ -402,14 +397,12 @@ net::URLRequestContextGetter* IOThread::system_url_request_context_getter() {
return system_url_request_context_getter_;
}
-void IOThread::Init() {
+void IOThread::InitializeGlobalState() {
// Though this thread is called the "IO" thread, it actually just routes
// messages around; it shouldn't be allowed to perform any blocking disk I/O.
base::ThreadRestrictions::SetIOAllowed(false);
- content::BrowserProcessSubThread::Init();
-
- DCHECK_EQ(MessageLoop::TYPE_IO, message_loop()->type());
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
#if defined(USE_NSS)
net::SetMessageLoopForOCSP();
@@ -480,9 +473,16 @@ void IOThread::Init() {
sdch_manager_ = new net::SdchManager();
sdch_manager_->set_sdch_fetcher(new SdchDictionaryFetcher);
+
+ // The io_thread_ object is guaranteed to outlive the thread, as
+ // it is destroyed only during the call to PostStopThread(IO),
+ // at which point the IO thread has stopped.
+ //message_loop()->AddDestructionObserver(this);
}
-void IOThread::CleanUp() {
+void IOThread::WillDestroyCurrentMessageLoop() {
+ MessageLoop::current()->RemoveDestructionObserver(this);
+
delete sdch_manager_;
sdch_manager_ = NULL;
@@ -520,10 +520,6 @@ void IOThread::CleanUp() {
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
@@ -574,6 +570,11 @@ void IOThread::ClearHostCache() {
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();
}

Powered by Google App Engine
This is Rietveld 408576698