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

Unified Diff: content/public/test/test_browser_thread.cc

Issue 2464233002: Experiment with redirecting all BrowserThreads (but UI/IO) to TaskScheduler (Closed)
Patch Set: remove WaitUntilThreadStarted on Android, makes Android test instrumentation hang, is previous issu… Created 4 years 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
« no previous file with comments | « content/public/test/test_browser_thread.h ('k') | content/public/test/test_browser_thread_bundle.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..54db8953941918246ff1cecda725c13340a1ca65 100644
--- a/content/public/test/test_browser_thread.cc
+++ b/content/public/test/test_browser_thread.cc
@@ -40,15 +40,34 @@ 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's globals so that |impl_| is no longer bound to
+ // |identifier_|. 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:
+ // 1) TestBrowserThread::Stop()
+ // 2) ~MessageLoop()
+ // 3) ~TestBrowserThread()
+ // (~TestBrowserThreadBundle() does this).
+ BrowserThreadImpl::ResetGlobalsForTesting(identifier_);
}
bool TestBrowserThread::Start() {
« no previous file with comments | « content/public/test/test_browser_thread.h ('k') | content/public/test/test_browser_thread_bundle.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698