| 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
|
|
|