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(); |
} |