| Index: content/public/test/test_browser_thread.cc
|
| diff --git a/content/public/test/test_browser_thread.cc b/content/public/test/test_browser_thread.cc
|
| index ae83f78f78aad1455f8a9f98aa6c4f003ef4499b..b9a011b3f2f7ea781a1cd932a6657bee37fb3cd5 100644
|
| --- a/content/public/test/test_browser_thread.cc
|
| +++ b/content/public/test/test_browser_thread.cc
|
| @@ -40,15 +40,31 @@ class TestBrowserThreadImpl : public BrowserThreadImpl {
|
| };
|
|
|
| TestBrowserThread::TestBrowserThread(BrowserThread::ID identifier)
|
| - : impl_(new TestBrowserThreadImpl(identifier)) {
|
| -}
|
| + : impl_(new TestBrowserThreadImpl(identifier)), identifier_(identifier) {}
|
|
|
| TestBrowserThread::TestBrowserThread(BrowserThread::ID identifier,
|
| base::MessageLoop* message_loop)
|
| - : impl_(new TestBrowserThreadImpl(identifier, message_loop)) {}
|
| + : impl_(new TestBrowserThreadImpl(identifier, message_loop)),
|
| + identifier_(identifier) {}
|
|
|
| TestBrowserThread::~TestBrowserThread() {
|
| - Stop();
|
| + // The upcoming BrowserThreadImpl::ResetGlobalsForTesting() call requires that
|
| + // |impl_| have triggered the shutdown phase for its BrowserThread::ID. This
|
| + // either happens when the thread is stopped (if real) or destroyed (when fake
|
| + // -- i.e. using an externally provided MessageLoop).
|
| + impl_.reset();
|
| +
|
| + // Resets BrowserThreadImpl globals binding |identifier_| to |impl_|. This is
|
| + // fine since the underlying MessageLoop has already been flushed and deleted
|
| + // in Stop(). In the case of an externally provided MessageLoop however, this
|
| + // means that TaskRunners obtained through
|
| + // |BrowserThreadImpl::GetTaskRunnerForThread(identifier_)| will no longer
|
| + // recognize their BrowserThreadImpl for RunsTasksOnCurrentThread(). This
|
| + // happens most often when such verifications are made from
|
| + // MessageLoop::DestructionObservers. Callers that care to work around that
|
| + // should instead use this shutdown sequence: TestBrowserThread::Stop() ->
|
| + // ~MessageLoop() -> ~TestBrowserThread().
|
| + BrowserThreadImpl::ResetGlobalsForTesting(identifier_);
|
| }
|
|
|
| bool TestBrowserThread::Start() {
|
|
|