| Index: base/test/test_mock_time_task_runner.cc
|
| diff --git a/base/test/test_mock_time_task_runner.cc b/base/test/test_mock_time_task_runner.cc
|
| index eaaceb6338166859c6da399b8de5edd30e665836..4987436a70f07009b38c0cc3651ba66cb5725184 100644
|
| --- a/base/test/test_mock_time_task_runner.cc
|
| +++ b/base/test/test_mock_time_task_runner.cc
|
| @@ -120,6 +120,16 @@ TestMockTimeTaskRunner::TestOrderedPendingTask::operator=(
|
|
|
| // TestMockTimeTaskRunner -----------------------------------------------------
|
|
|
| +// TODO(gab): This should also set the SequenceToken for the current thread.
|
| +// Ref. TestMockTimeTaskRunner::RunsTasksOnCurrentThread().
|
| +TestMockTimeTaskRunner::ScopedContext::ScopedContext(
|
| + scoped_refptr<TestMockTimeTaskRunner> scope)
|
| + : task_runner_handle_(scope) {
|
| + scope->RunUntilIdle();
|
| +}
|
| +
|
| +TestMockTimeTaskRunner::ScopedContext::~ScopedContext() = default;
|
| +
|
| bool TestMockTimeTaskRunner::TemporalOrder::operator()(
|
| const TestOrderedPendingTask& first_task,
|
| const TestOrderedPendingTask& second_task) const {
|
| @@ -213,6 +223,9 @@ TimeDelta TestMockTimeTaskRunner::NextPendingTaskDelay() const {
|
| : tasks_.top().GetTimeToRun() - now_ticks_;
|
| }
|
|
|
| +// TODO(gab): Combine |thread_checker_| with a SequenceToken to differentiate
|
| +// between tasks running in the scope of this TestMockTimeTaskRunner and other
|
| +// task runners sharing this thread. http://crbug.com/631186
|
| bool TestMockTimeTaskRunner::RunsTasksOnCurrentThread() const {
|
| return thread_checker_.CalledOnValidThread();
|
| }
|
| @@ -253,6 +266,16 @@ void TestMockTimeTaskRunner::OnAfterTaskRun() {
|
|
|
| void TestMockTimeTaskRunner::ProcessAllTasksNoLaterThan(TimeDelta max_delta) {
|
| DCHECK_GE(max_delta, TimeDelta());
|
| +
|
| + // Multiple test task runners can share the same thread for determinism in
|
| + // unit tests. Make sure this TestMockTimeTaskRunner's tasks run in its scope.
|
| + std::unique_ptr<ThreadTaskRunnerHandle::NestedForTesting> handle_override;
|
| + if (!ThreadTaskRunnerHandle::IsSet() ||
|
| + ThreadTaskRunnerHandle::Get() != this) {
|
| + handle_override =
|
| + MakeUnique<ThreadTaskRunnerHandle::NestedForTesting>(this);
|
| + }
|
| +
|
| const TimeTicks original_now_ticks = now_ticks_;
|
| while (!IsElapsingStopped()) {
|
| OnBeforeSelectingTask();
|
|
|