Index: content/public/test/test_browser_thread_bundle.h |
diff --git a/content/public/test/test_browser_thread_bundle.h b/content/public/test/test_browser_thread_bundle.h |
index 2e1e69bd22c53c45a3601bc07d00f35da528915f..0138a72374111d0e6908965eb74e9bed50cda0e6 100644 |
--- a/content/public/test/test_browser_thread_bundle.h |
+++ b/content/public/test/test_browser_thread_bundle.h |
@@ -3,34 +3,27 @@ |
// found in the LICENSE file. |
// TestBrowserThreadBundle is a convenience class for creating a set of |
-// TestBrowserThreads in unit tests. For most tests, it is sufficient to |
-// just instantiate the TestBrowserThreadBundle as a member variable. |
-// It is a good idea to put the TestBrowserThreadBundle as the first member |
-// variable in test classes, so it is destroyed last, and the test threads |
-// always exist from the perspective of other classes. |
+// TestBrowserThreads, a blocking pool, and a task scheduler in unit tests. For |
+// most tests, it is sufficient to just instantiate the TestBrowserThreadBundle |
+// as a member variable. It is a good idea to put the TestBrowserThreadBundle as |
+// the first member variable in test classes, so it is destroyed last, and the |
+// test threads always exist from the perspective of other classes. |
// |
-// By default, all of the created TestBrowserThreads will be backed by a single |
-// shared MessageLoop. If a test truly needs separate threads, it can do |
-// so by passing the appropriate combination of option values during |
-// the TestBrowserThreadBundle construction. |
+// By default, all of the created TestBrowserThreads and the task scheduler will |
+// be backed by a single shared MessageLoop. If a test truly needs separate |
+// threads, it can do so by passing the appropriate combination of option values |
+// during the TestBrowserThreadBundle construction. |
// |
-// The TestBrowserThreadBundle will attempt to drain the MessageLoop on |
-// destruction. Sometimes a test needs to drain currently enqueued tasks |
-// mid-test. Browser tests should call content::RunAllPendingInMessageLoop(). |
-// Unit tests should use base::RunLoop (e.g., base::RunLoop().RunUntilIdle()). |
-// TODO(phajdan.jr): Revise this comment after switch to Aura. |
+// To synchronously run tasks posted to task scheduler or to TestBrowserThreads |
+// that use the shared MessageLoop, call RunLoop::Run/RunUntilIdle() on the |
+// thread where the TestBrowserThreadBundle lives. The destructor of |
+// TestBrowserThreadBundle runs remaining TestBrowserThreads tasks, remaining |
+// blocking pool tasks, and remaining BLOCK_SHUTDOWN task scheduler tasks. |
// |
-// The TestBrowserThreadBundle will also flush the blocking pool on destruction. |
-// We do this to avoid memory leaks, particularly in the case of threads posting |
-// tasks to the blocking pool via PostTaskAndReply. By ensuring that the tasks |
-// are run while the originating TestBroswserThreads still exist, we prevent |
-// leakage of PostTaskAndReplyRelay objects. We also flush the blocking pool |
-// again at the point where it would normally be shut down, to better simulate |
-// the normal thread shutdown process. |
-// |
-// Some tests using the IO thread expect a MessageLoopForIO. Passing |
-// IO_MAINLOOP will use a MessageLoopForIO for the main MessageLoop. |
-// Most of the time, this avoids needing to use a REAL_IO_THREAD. |
+// If a test needs a MessageLoopForIO on the main thread, it should use the |
+// IO_MAINLOOP option. This also allows task scheduler tasks to use |
+// FileDescriptorWatcher. Most of the time, IO_MAINLOOP avoids needing to use a |
+// REAL_IO_THREAD. |
// |
// For some tests it is important to emulate real browser startup. During real |
// browser startup some initialization is done (e.g. creation of thread objects) |
@@ -51,6 +44,9 @@ |
namespace base { |
class MessageLoop; |
+namespace test { |
+class ScopedTaskScheduler; |
+} // namespace test |
} // namespace base |
namespace content { |
@@ -84,6 +80,7 @@ class TestBrowserThreadBundle { |
void Init(); |
std::unique_ptr<base::MessageLoop> message_loop_; |
+ std::unique_ptr<base::test::ScopedTaskScheduler> task_scheduler_; |
std::unique_ptr<TestBrowserThread> ui_thread_; |
std::unique_ptr<TestBrowserThread> db_thread_; |
std::unique_ptr<TestBrowserThread> file_thread_; |