1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/scheduler/child/nestable_task_runner_for_test.h"
8 #include "base/bind_helpers.h"
13 scoped_refptr
<NestableTaskRunnerForTest
> NestableTaskRunnerForTest::Create(
14 scoped_refptr
<base::SingleThreadTaskRunner
> task_runner
) {
15 return make_scoped_refptr(new NestableTaskRunnerForTest(task_runner
));
18 NestableTaskRunnerForTest::NestableTaskRunnerForTest(
19 scoped_refptr
<base::SingleThreadTaskRunner
> task_runner
)
20 : task_runner_(task_runner
), is_nested_(false), weak_factory_(this) {
21 weak_nestable_task_runner_ptr_
= weak_factory_
.GetWeakPtr();
24 NestableTaskRunnerForTest::~NestableTaskRunnerForTest() {
27 void NestableTaskRunnerForTest::WrapTask(
28 const base::PendingTask
* wrapped_task
) {
29 scoped_refptr
<NestableTaskRunnerForTest
> protect(this);
30 FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver
, task_observers_
,
31 DidProcessTask(*wrapped_task
));
32 wrapped_task
->task
.Run();
33 FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver
, task_observers_
,
34 WillProcessTask(*wrapped_task
));
37 bool NestableTaskRunnerForTest::PostDelayedTask(
38 const tracked_objects::Location
& from_here
,
39 const base::Closure
& task
,
40 base::TimeDelta delay
) {
41 base::PendingTask
* wrapped_task
= new base::PendingTask(from_here
, task
);
42 return task_runner_
->PostDelayedTask(
44 base::Bind(&NestableTaskRunnerForTest::WrapTask
,
45 weak_nestable_task_runner_ptr_
, base::Owned(wrapped_task
)),
49 bool NestableTaskRunnerForTest::PostNonNestableDelayedTask(
50 const tracked_objects::Location
& from_here
,
51 const base::Closure
& task
,
52 base::TimeDelta delay
) {
53 base::PendingTask
* wrapped_task
= new base::PendingTask(from_here
, task
);
54 return task_runner_
->PostNonNestableDelayedTask(
56 base::Bind(&NestableTaskRunnerForTest::WrapTask
,
57 weak_nestable_task_runner_ptr_
, base::Owned(wrapped_task
)),
61 bool NestableTaskRunnerForTest::RunsTasksOnCurrentThread() const {
62 return task_runner_
->RunsTasksOnCurrentThread();
65 bool NestableTaskRunnerForTest::IsNested() const {
69 void NestableTaskRunnerForTest::SetNested(bool is_nested
) {
70 is_nested_
= is_nested
;
73 void NestableTaskRunnerForTest::AddTaskObserver(
74 base::MessageLoop::TaskObserver
* task_observer
) {
75 task_observers_
.AddObserver(task_observer
);
78 void NestableTaskRunnerForTest::RemoveTaskObserver(
79 base::MessageLoop::TaskObserver
* task_observer
) {
80 task_observers_
.RemoveObserver(task_observer
);
83 } // namespace scheduler