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() { ...@@ -152,6 +152,8 @@ void CancelableTaskTracker::TryCancelAll() {
DCHECK(sequence_checker_.CalledOnValidSequence()); DCHECK(sequence_checker_.CalledOnValidSequence());
for (const auto& it : task_flags_) for (const auto& it : task_flags_)
it.second->Set(); it.second->Set();
weak_factory_.InvalidateWeakPtrs();
task_flags_.clear();
} }
bool CancelableTaskTracker::HasTrackedTasks() const { bool CancelableTaskTracker::HasTrackedTasks() const {
......
...@@ -267,9 +267,8 @@ TEST_F(CancelableTaskTrackerTest, DestructionCancelsAll) { ...@@ -267,9 +267,8 @@ TEST_F(CancelableTaskTrackerTest, DestructionCancelsAll) {
EXPECT_FALSE(is_canceled.Run()); EXPECT_FALSE(is_canceled.Run());
} }
// Post a task and cancel it. HasTrackedTasks() should return true // Post a task and cancel it. HasTrackedTasks() should return false as soon as
// from when the task is posted until the (do-nothing) reply task is // TryCancelAll() is called.
// flushed.
TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPost) { TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPost) {
scoped_refptr<TestSimpleTaskRunner> test_task_runner( scoped_refptr<TestSimpleTaskRunner> test_task_runner(
new TestSimpleTaskRunner()); new TestSimpleTaskRunner());
...@@ -281,17 +280,14 @@ TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPost) { ...@@ -281,17 +280,14 @@ TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPost) {
task_tracker_.TryCancelAll(); task_tracker_.TryCancelAll();
test_task_runner->RunUntilIdle(); EXPECT_FALSE(task_tracker_.HasTrackedTasks());
EXPECT_TRUE(task_tracker_.HasTrackedTasks());
test_task_runner->RunUntilIdle();
RunCurrentLoopUntilIdle(); RunCurrentLoopUntilIdle();
EXPECT_FALSE(task_tracker_.HasTrackedTasks());
} }
// Post a task with a reply and cancel it. HasTrackedTasks() should // Post a task with a reply and cancel it. HasTrackedTasks() should return false
// return true from when the task is posted until it is canceled. // as soon as TryCancelAll() is called.
TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPostWithReply) { TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPostWithReply) {
scoped_refptr<TestSimpleTaskRunner> test_task_runner( scoped_refptr<TestSimpleTaskRunner> test_task_runner(
new TestSimpleTaskRunner()); new TestSimpleTaskRunner());
...@@ -306,17 +302,14 @@ TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPostWithReply) { ...@@ -306,17 +302,14 @@ TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPostWithReply) {
task_tracker_.TryCancelAll(); task_tracker_.TryCancelAll();
test_task_runner->RunUntilIdle(); EXPECT_FALSE(task_tracker_.HasTrackedTasks());
EXPECT_TRUE(task_tracker_.HasTrackedTasks());
test_task_runner->RunUntilIdle();
RunCurrentLoopUntilIdle(); RunCurrentLoopUntilIdle();
EXPECT_FALSE(task_tracker_.HasTrackedTasks());
} }
// Create a new tracked task ID. HasTrackedTasks() should return true // Create a new tracked task ID. HasTrackedTasks() should return false as soon
// until the IsCanceledCallback is destroyed. // as TryCancelAll() is called.
TEST_F(CancelableTaskTrackerTest, HasTrackedTasksIsCancelled) { TEST_F(CancelableTaskTrackerTest, HasTrackedTasksIsCancelled) {
EXPECT_FALSE(task_tracker_.HasTrackedTasks()); EXPECT_FALSE(task_tracker_.HasTrackedTasks());
...@@ -325,10 +318,6 @@ TEST_F(CancelableTaskTrackerTest, HasTrackedTasksIsCancelled) { ...@@ -325,10 +318,6 @@ TEST_F(CancelableTaskTrackerTest, HasTrackedTasksIsCancelled) {
task_tracker_.TryCancelAll(); task_tracker_.TryCancelAll();
EXPECT_TRUE(task_tracker_.HasTrackedTasks());
is_canceled.Reset();
EXPECT_FALSE(task_tracker_.HasTrackedTasks()); 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