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