Commit c7e66e92 authored by Christopher Thompson's avatar Christopher Thompson Committed by Commit Bot

Clear flags in CancelableTaskTracker::TryCancelAll

This makes TryCancelAll() additionally clear the flags map and
invalidate any weak pointers, so that HasTrackedTasks() will return
false immediately after calling TryCancelAll() (aligning calling
TryCancelAll more with destroying the CancelableTaskTracker).

This also updates the unit tests to account for this.

Bug: 817054
Change-Id: I5d65847c2d230ed832d372f3980b847770638126
Reviewed-on: https://chromium-review.googlesource.com/939733Reviewed-by: default avatarGabriel Charette <gab@chromium.org>
Commit-Queue: Christopher Thompson <cthomp@chromium.org>
Cr-Commit-Position: refs/heads/master@{#539877}
parent f0db63ad
......@@ -152,6 +152,8 @@ void CancelableTaskTracker::TryCancelAll() {
DCHECK(sequence_checker_.CalledOnValidSequence());
for (const auto& it : task_flags_)
it.second->Set();
weak_factory_.InvalidateWeakPtrs();
task_flags_.clear();
}
bool CancelableTaskTracker::HasTrackedTasks() const {
......
......@@ -267,9 +267,8 @@ TEST_F(CancelableTaskTrackerTest, DestructionCancelsAll) {
EXPECT_FALSE(is_canceled.Run());
}
// Post a task and cancel it. HasTrackedTasks() should return true
// from when the task is posted until the (do-nothing) reply task is
// flushed.
// Post a task and cancel it. HasTrackedTasks() should return false as soon as
// TryCancelAll() is called.
TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPost) {
scoped_refptr<TestSimpleTaskRunner> test_task_runner(
new TestSimpleTaskRunner());
......@@ -281,17 +280,14 @@ TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPost) {
task_tracker_.TryCancelAll();
test_task_runner->RunUntilIdle();
EXPECT_TRUE(task_tracker_.HasTrackedTasks());
EXPECT_FALSE(task_tracker_.HasTrackedTasks());
test_task_runner->RunUntilIdle();
RunCurrentLoopUntilIdle();
EXPECT_FALSE(task_tracker_.HasTrackedTasks());
}
// Post a task with a reply and cancel it. HasTrackedTasks() should
// return true from when the task is posted until it is canceled.
// Post a task with a reply and cancel it. HasTrackedTasks() should return false
// as soon as TryCancelAll() is called.
TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPostWithReply) {
scoped_refptr<TestSimpleTaskRunner> test_task_runner(
new TestSimpleTaskRunner());
......@@ -306,17 +302,14 @@ TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPostWithReply) {
task_tracker_.TryCancelAll();
test_task_runner->RunUntilIdle();
EXPECT_TRUE(task_tracker_.HasTrackedTasks());
EXPECT_FALSE(task_tracker_.HasTrackedTasks());
test_task_runner->RunUntilIdle();
RunCurrentLoopUntilIdle();
EXPECT_FALSE(task_tracker_.HasTrackedTasks());
}
// Create a new tracked task ID. HasTrackedTasks() should return true
// until the IsCanceledCallback is destroyed.
// Create a new tracked task ID. HasTrackedTasks() should return false as soon
// as TryCancelAll() is called.
TEST_F(CancelableTaskTrackerTest, HasTrackedTasksIsCancelled) {
EXPECT_FALSE(task_tracker_.HasTrackedTasks());
......@@ -325,10 +318,6 @@ TEST_F(CancelableTaskTrackerTest, HasTrackedTasksIsCancelled) {
task_tracker_.TryCancelAll();
EXPECT_TRUE(task_tracker_.HasTrackedTasks());
is_canceled.Reset();
EXPECT_FALSE(task_tracker_.HasTrackedTasks());
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment