| Index: cc/test/ordered_simple_task_runner.cc
|
| diff --git a/cc/test/ordered_simple_task_runner.cc b/cc/test/ordered_simple_task_runner.cc
|
| index 9dc4bbcd2dacb680d586699576a632e286aab037..161704fc45897fe97f643db91b94b3639b4c1936 100644
|
| --- a/cc/test/ordered_simple_task_runner.cc
|
| +++ b/cc/test/ordered_simple_task_runner.cc
|
| @@ -137,6 +137,8 @@ bool OrderedSimpleTaskRunner::HasPendingTasks() const {
|
| }
|
|
|
| base::TimeTicks OrderedSimpleTaskRunner::NextTaskTime() {
|
| + RemoveCancelledTasks();
|
| +
|
| if (pending_tasks_.size() <= 0) {
|
| return AbsoluteMaxNow();
|
| }
|
| @@ -146,6 +148,7 @@ base::TimeTicks OrderedSimpleTaskRunner::NextTaskTime() {
|
|
|
| base::TimeDelta OrderedSimpleTaskRunner::DelayToNextTaskTime() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| + RemoveCancelledTasks();
|
|
|
| if (pending_tasks_.size() <= 0) {
|
| return AbsoluteMaxNow() - base::TimeTicks();
|
| @@ -198,6 +201,11 @@ bool OrderedSimpleTaskRunner::RunTasksWhile(
|
| }
|
|
|
| while (pending_tasks_.size() > 0) {
|
| + // Skip canceled tasks.
|
| + if (pending_tasks_.begin()->task.IsCancelled()) {
|
| + pending_tasks_.erase(pending_tasks_.begin());
|
| + continue;
|
| + }
|
| // Check if we should continue to run pending tasks.
|
| bool condition_success = true;
|
| for (std::vector<base::Callback<bool(void)>>::iterator it =
|
| @@ -344,4 +352,15 @@ bool OrderedSimpleTaskRunner::AdvanceNowCallback() {
|
| return true;
|
| }
|
|
|
| +void OrderedSimpleTaskRunner::RemoveCancelledTasks() {
|
| + std::set<TestOrderablePendingTask>::iterator it = pending_tasks_.begin();
|
| + while (it != pending_tasks_.end()) {
|
| + if (it->task.IsCancelled()) {
|
| + it = pending_tasks_.erase(it);
|
| + } else {
|
| + it++;
|
| + }
|
| + }
|
| +}
|
| +
|
| } // namespace cc
|
|
|