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..01d282d7d8a4daf4901f3c485a801813a3503e3a 100644 |
--- a/cc/test/ordered_simple_task_runner.cc |
+++ b/cc/test/ordered_simple_task_runner.cc |
@@ -128,15 +128,19 @@ bool OrderedSimpleTaskRunner::RunsTasksOnCurrentThread() const { |
return true; |
} |
-size_t OrderedSimpleTaskRunner::NumPendingTasks() const { |
+size_t OrderedSimpleTaskRunner::NumPendingTasks() { |
+ RemovePendingCancelledTasks(); |
return pending_tasks_.size(); |
} |
-bool OrderedSimpleTaskRunner::HasPendingTasks() const { |
+bool OrderedSimpleTaskRunner::HasPendingTasks() { |
+ RemovePendingCancelledTasks(); |
return pending_tasks_.size() > 0; |
} |
base::TimeTicks OrderedSimpleTaskRunner::NextTaskTime() { |
+ RemovePendingCancelledTasks(); |
+ |
if (pending_tasks_.size() <= 0) { |
return AbsoluteMaxNow(); |
} |
@@ -146,6 +150,7 @@ base::TimeTicks OrderedSimpleTaskRunner::NextTaskTime() { |
base::TimeDelta OrderedSimpleTaskRunner::DelayToNextTaskTime() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ RemovePendingCancelledTasks(); |
if (pending_tasks_.size() <= 0) { |
return AbsoluteMaxNow() - base::TimeTicks(); |
@@ -198,6 +203,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 +354,12 @@ bool OrderedSimpleTaskRunner::AdvanceNowCallback() { |
return true; |
} |
+void OrderedSimpleTaskRunner::RemovePendingCancelledTasks() { |
+ // Remove canceled tasks. |
+ while (!pending_tasks_.empty() && |
+ pending_tasks_.begin()->task.IsCancelled()) { |
+ pending_tasks_.erase(pending_tasks_.begin()); |
+ } |
+} |
+ |
} // namespace cc |