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

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

Issue 2464233002: Experiment with redirecting all BrowserThreads (but UI/IO) to TaskScheduler (Closed)
Patch Set: rm TODO Created 4 years, 1 month 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
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() {

Powered by Google App Engine
This is Rietveld 408576698