Index: content/public/test/test_browser_thread_bundle.cc |
diff --git a/content/public/test/test_browser_thread_bundle.cc b/content/public/test/test_browser_thread_bundle.cc |
index 537e24534c3bda496b4648d0c31e12738d2f2974..d68311235a368c3b0b9b5b24e0f3396b51fc8c98 100644 |
--- a/content/public/test/test_browser_thread_bundle.cc |
+++ b/content/public/test/test_browser_thread_bundle.cc |
@@ -4,6 +4,7 @@ |
#include "content/public/test/test_browser_thread_bundle.h" |
+#include "base/logging.h" |
#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
#include "content/browser/browser_thread_impl.h" |
@@ -27,29 +28,35 @@ TestBrowserThreadBundle::~TestBrowserThreadBundle() { |
BrowserThreadImpl::FlushThreadPoolHelperForTesting(); |
// To ensure a clean teardown, each thread's message loop must be flushed |
- // just before the thread is destroyed. But destroying a fake thread does not |
+ // just before the thread is destroyed. But stopping a fake thread does not |
// automatically flush the message loop, so we have to do it manually. |
// See http://crbug.com/247525 for discussion. |
base::RunLoop().RunUntilIdle(); |
- io_thread_.reset(); |
+ io_thread_->Stop(); |
base::RunLoop().RunUntilIdle(); |
- cache_thread_.reset(); |
+ cache_thread_->Stop(); |
base::RunLoop().RunUntilIdle(); |
- process_launcher_thread_.reset(); |
+ process_launcher_thread_->Stop(); |
base::RunLoop().RunUntilIdle(); |
- file_user_blocking_thread_.reset(); |
+ file_user_blocking_thread_->Stop(); |
base::RunLoop().RunUntilIdle(); |
- file_thread_.reset(); |
+ file_thread_->Stop(); |
base::RunLoop().RunUntilIdle(); |
- db_thread_.reset(); |
+ db_thread_->Stop(); |
base::RunLoop().RunUntilIdle(); |
// This is the point at which we normally shut down the thread pool. So flush |
// it again in case any shutdown tasks have been posted to the pool from the |
// threads above. |
BrowserThreadImpl::FlushThreadPoolHelperForTesting(); |
base::RunLoop().RunUntilIdle(); |
- ui_thread_.reset(); |
+ ui_thread_->Stop(); |
base::RunLoop().RunUntilIdle(); |
+ |
+ // |message_loop_| needs to explicitly go away before fake threads in order |
+ // for DestructionObservers hooked to |message_loop_| to be able to invoke |
+ // BrowserThread::CurrentlyOn() -- ref. ~TestBrowserThread(). |
+ CHECK(message_loop_->IsIdleForTesting()); |
+ message_loop_.reset(); |
} |
void TestBrowserThreadBundle::Init() { |