Index: components/scheduler/child/nestable_task_runner_for_test.cc |
diff --git a/components/scheduler/child/nestable_task_runner_for_test.cc b/components/scheduler/child/nestable_task_runner_for_test.cc |
index 8a7a341b82dd9e1f7b42a81e02737bb70ec515ee..5bcfde816db70f3286bea0b98629a55396cab686 100644 |
--- a/components/scheduler/child/nestable_task_runner_for_test.cc |
+++ b/components/scheduler/child/nestable_task_runner_for_test.cc |
@@ -4,6 +4,9 @@ |
#include "components/scheduler/child/nestable_task_runner_for_test.h" |
+#include "base/bind.h" |
+#include "base/bind_helpers.h" |
+ |
namespace scheduler { |
// static |
@@ -14,24 +17,45 @@ scoped_refptr<NestableTaskRunnerForTest> NestableTaskRunnerForTest::Create( |
NestableTaskRunnerForTest::NestableTaskRunnerForTest( |
scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
- : task_runner_(task_runner), is_nested_(false) { |
+ : task_runner_(task_runner), is_nested_(false), weak_factory_(this) { |
+ weak_nestable_task_runner_ptr_ = weak_factory_.GetWeakPtr(); |
} |
NestableTaskRunnerForTest::~NestableTaskRunnerForTest() { |
} |
+void NestableTaskRunnerForTest::WrapTask( |
+ const base::PendingTask* wrapped_task) { |
+ scoped_refptr<NestableTaskRunnerForTest> protect(this); |
+ FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_, |
+ DidProcessTask(*wrapped_task)); |
+ wrapped_task->task.Run(); |
+ FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_, |
+ WillProcessTask(*wrapped_task)); |
+} |
+ |
bool NestableTaskRunnerForTest::PostDelayedTask( |
const tracked_objects::Location& from_here, |
const base::Closure& task, |
base::TimeDelta delay) { |
- return task_runner_->PostDelayedTask(from_here, task, delay); |
+ base::PendingTask* wrapped_task = new base::PendingTask(from_here, task); |
+ return task_runner_->PostDelayedTask( |
+ from_here, |
+ base::Bind(&NestableTaskRunnerForTest::WrapTask, |
+ weak_nestable_task_runner_ptr_, base::Owned(wrapped_task)), |
+ delay); |
} |
bool NestableTaskRunnerForTest::PostNonNestableDelayedTask( |
const tracked_objects::Location& from_here, |
const base::Closure& task, |
base::TimeDelta delay) { |
- return task_runner_->PostNonNestableDelayedTask(from_here, task, delay); |
+ base::PendingTask* wrapped_task = new base::PendingTask(from_here, task); |
+ return task_runner_->PostNonNestableDelayedTask( |
+ from_here, |
+ base::Bind(&NestableTaskRunnerForTest::WrapTask, |
+ weak_nestable_task_runner_ptr_, base::Owned(wrapped_task)), |
+ delay); |
} |
bool NestableTaskRunnerForTest::RunsTasksOnCurrentThread() const { |
@@ -48,10 +72,12 @@ void NestableTaskRunnerForTest::SetNested(bool is_nested) { |
void NestableTaskRunnerForTest::AddTaskObserver( |
base::MessageLoop::TaskObserver* task_observer) { |
+ task_observers_.AddObserver(task_observer); |
} |
void NestableTaskRunnerForTest::RemoveTaskObserver( |
base::MessageLoop::TaskObserver* task_observer) { |
+ task_observers_.RemoveObserver(task_observer); |
} |
} // namespace scheduler |