| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/common/cancelable_task_tracker.h" | 5 #include "chrome/common/cancelable_task_tracker.h" |
| 6 | 6 |
| 7 #include <cstddef> | 7 #include <cstddef> |
| 8 #include <deque> | 8 #include <deque> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 } | 223 } |
| 224 | 224 |
| 225 // With the task tracker, post a task, a task with a reply, get a new | 225 // With the task tracker, post a task, a task with a reply, get a new |
| 226 // task id, and then cancel all of them. None of the tasks nor the | 226 // task id, and then cancel all of them. None of the tasks nor the |
| 227 // reply should run and the "is canceled" callback should return | 227 // reply should run and the "is canceled" callback should return |
| 228 // true. | 228 // true. |
| 229 TEST_F(CancelableTaskTrackerTest, CancelAll) { | 229 TEST_F(CancelableTaskTrackerTest, CancelAll) { |
| 230 scoped_refptr<base::TestSimpleTaskRunner> test_task_runner( | 230 scoped_refptr<base::TestSimpleTaskRunner> test_task_runner( |
| 231 new base::TestSimpleTaskRunner()); | 231 new base::TestSimpleTaskRunner()); |
| 232 | 232 |
| 233 ignore_result( | 233 ignore_result(task_tracker_.PostTask( |
| 234 task_tracker_.PostTask( | 234 test_task_runner.get(), FROM_HERE, MakeExpectedNotRunClosure(FROM_HERE))); |
| 235 test_task_runner, | |
| 236 FROM_HERE, | |
| 237 MakeExpectedNotRunClosure(FROM_HERE))); | |
| 238 | 235 |
| 239 ignore_result( | 236 ignore_result( |
| 240 task_tracker_.PostTaskAndReply( | 237 task_tracker_.PostTaskAndReply(test_task_runner.get(), |
| 241 test_task_runner, | 238 FROM_HERE, |
| 242 FROM_HERE, | 239 MakeExpectedNotRunClosure(FROM_HERE), |
| 243 MakeExpectedNotRunClosure(FROM_HERE), | 240 MakeExpectedNotRunClosure(FROM_HERE))); |
| 244 MakeExpectedNotRunClosure(FROM_HERE))); | |
| 245 | 241 |
| 246 CancelableTaskTracker::IsCanceledCallback is_canceled; | 242 CancelableTaskTracker::IsCanceledCallback is_canceled; |
| 247 ignore_result(task_tracker_.NewTrackedTaskId(&is_canceled)); | 243 ignore_result(task_tracker_.NewTrackedTaskId(&is_canceled)); |
| 248 | 244 |
| 249 task_tracker_.TryCancelAll(); | 245 task_tracker_.TryCancelAll(); |
| 250 | 246 |
| 251 test_task_runner->RunUntilIdle(); | 247 test_task_runner->RunUntilIdle(); |
| 252 | 248 |
| 253 RunCurrentLoopUntilIdle(); | 249 RunCurrentLoopUntilIdle(); |
| 254 | 250 |
| 255 EXPECT_TRUE(is_canceled.Run()); | 251 EXPECT_TRUE(is_canceled.Run()); |
| 256 } | 252 } |
| 257 | 253 |
| 258 // With the task tracker, post a task, a task with a reply, get a new | 254 // With the task tracker, post a task, a task with a reply, get a new |
| 259 // task id, and then cancel all of them. None of the tasks nor the | 255 // task id, and then cancel all of them. None of the tasks nor the |
| 260 // reply should run and the "is canceled" callback should return | 256 // reply should run and the "is canceled" callback should return |
| 261 // true. | 257 // true. |
| 262 TEST_F(CancelableTaskTrackerTest, DestructionCancelsAll) { | 258 TEST_F(CancelableTaskTrackerTest, DestructionCancelsAll) { |
| 263 scoped_refptr<base::TestSimpleTaskRunner> test_task_runner( | 259 scoped_refptr<base::TestSimpleTaskRunner> test_task_runner( |
| 264 new base::TestSimpleTaskRunner()); | 260 new base::TestSimpleTaskRunner()); |
| 265 | 261 |
| 266 CancelableTaskTracker::IsCanceledCallback is_canceled; | 262 CancelableTaskTracker::IsCanceledCallback is_canceled; |
| 267 | 263 |
| 268 { | 264 { |
| 269 // Create another task tracker with a smaller scope. | 265 // Create another task tracker with a smaller scope. |
| 270 CancelableTaskTracker task_tracker; | 266 CancelableTaskTracker task_tracker; |
| 271 | 267 |
| 272 ignore_result( | 268 ignore_result(task_tracker.PostTask(test_task_runner.get(), |
| 273 task_tracker.PostTask( | 269 FROM_HERE, |
| 274 test_task_runner, | 270 MakeExpectedNotRunClosure(FROM_HERE))); |
| 275 FROM_HERE, | |
| 276 MakeExpectedNotRunClosure(FROM_HERE))); | |
| 277 | 271 |
| 278 ignore_result( | 272 ignore_result( |
| 279 task_tracker.PostTaskAndReply( | 273 task_tracker.PostTaskAndReply(test_task_runner.get(), |
| 280 test_task_runner, | 274 FROM_HERE, |
| 281 FROM_HERE, | 275 MakeExpectedNotRunClosure(FROM_HERE), |
| 282 MakeExpectedNotRunClosure(FROM_HERE), | 276 MakeExpectedNotRunClosure(FROM_HERE))); |
| 283 MakeExpectedNotRunClosure(FROM_HERE))); | |
| 284 | 277 |
| 285 ignore_result(task_tracker_.NewTrackedTaskId(&is_canceled)); | 278 ignore_result(task_tracker_.NewTrackedTaskId(&is_canceled)); |
| 286 } | 279 } |
| 287 | 280 |
| 288 test_task_runner->RunUntilIdle(); | 281 test_task_runner->RunUntilIdle(); |
| 289 | 282 |
| 290 RunCurrentLoopUntilIdle(); | 283 RunCurrentLoopUntilIdle(); |
| 291 | 284 |
| 292 EXPECT_FALSE(is_canceled.Run()); | 285 EXPECT_FALSE(is_canceled.Run()); |
| 293 } | 286 } |
| 294 | 287 |
| 295 // Post a task and cancel it. HasTrackedTasks() should return true | 288 // Post a task and cancel it. HasTrackedTasks() should return true |
| 296 // from when the task is posted until the (do-nothing) reply task is | 289 // from when the task is posted until the (do-nothing) reply task is |
| 297 // flushed. | 290 // flushed. |
| 298 TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPost) { | 291 TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPost) { |
| 299 scoped_refptr<base::TestSimpleTaskRunner> test_task_runner( | 292 scoped_refptr<base::TestSimpleTaskRunner> test_task_runner( |
| 300 new base::TestSimpleTaskRunner()); | 293 new base::TestSimpleTaskRunner()); |
| 301 | 294 |
| 302 EXPECT_FALSE(task_tracker_.HasTrackedTasks()); | 295 EXPECT_FALSE(task_tracker_.HasTrackedTasks()); |
| 303 | 296 |
| 304 ignore_result( | 297 ignore_result(task_tracker_.PostTask( |
| 305 task_tracker_.PostTask( | 298 test_task_runner.get(), FROM_HERE, MakeExpectedNotRunClosure(FROM_HERE))); |
| 306 test_task_runner, | |
| 307 FROM_HERE, | |
| 308 MakeExpectedNotRunClosure(FROM_HERE))); | |
| 309 | 299 |
| 310 task_tracker_.TryCancelAll(); | 300 task_tracker_.TryCancelAll(); |
| 311 | 301 |
| 312 test_task_runner->RunUntilIdle(); | 302 test_task_runner->RunUntilIdle(); |
| 313 | 303 |
| 314 EXPECT_TRUE(task_tracker_.HasTrackedTasks()); | 304 EXPECT_TRUE(task_tracker_.HasTrackedTasks()); |
| 315 | 305 |
| 316 RunCurrentLoopUntilIdle(); | 306 RunCurrentLoopUntilIdle(); |
| 317 | 307 |
| 318 EXPECT_FALSE(task_tracker_.HasTrackedTasks()); | 308 EXPECT_FALSE(task_tracker_.HasTrackedTasks()); |
| 319 } | 309 } |
| 320 | 310 |
| 321 // Post a task with a reply and cancel it. HasTrackedTasks() should | 311 // Post a task with a reply and cancel it. HasTrackedTasks() should |
| 322 // return true from when the task is posted until it is canceled. | 312 // return true from when the task is posted until it is canceled. |
| 323 TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPostWithReply) { | 313 TEST_F(CancelableTaskTrackerTest, HasTrackedTasksPostWithReply) { |
| 324 scoped_refptr<base::TestSimpleTaskRunner> test_task_runner( | 314 scoped_refptr<base::TestSimpleTaskRunner> test_task_runner( |
| 325 new base::TestSimpleTaskRunner()); | 315 new base::TestSimpleTaskRunner()); |
| 326 | 316 |
| 327 EXPECT_FALSE(task_tracker_.HasTrackedTasks()); | 317 EXPECT_FALSE(task_tracker_.HasTrackedTasks()); |
| 328 | 318 |
| 329 ignore_result( | 319 ignore_result( |
| 330 task_tracker_.PostTaskAndReply( | 320 task_tracker_.PostTaskAndReply(test_task_runner.get(), |
| 331 test_task_runner, | 321 FROM_HERE, |
| 332 FROM_HERE, | 322 MakeExpectedNotRunClosure(FROM_HERE), |
| 333 MakeExpectedNotRunClosure(FROM_HERE), | 323 MakeExpectedNotRunClosure(FROM_HERE))); |
| 334 MakeExpectedNotRunClosure(FROM_HERE))); | |
| 335 | 324 |
| 336 task_tracker_.TryCancelAll(); | 325 task_tracker_.TryCancelAll(); |
| 337 | 326 |
| 338 test_task_runner->RunUntilIdle(); | 327 test_task_runner->RunUntilIdle(); |
| 339 | 328 |
| 340 EXPECT_TRUE(task_tracker_.HasTrackedTasks()); | 329 EXPECT_TRUE(task_tracker_.HasTrackedTasks()); |
| 341 | 330 |
| 342 RunCurrentLoopUntilIdle(); | 331 RunCurrentLoopUntilIdle(); |
| 343 | 332 |
| 344 EXPECT_FALSE(task_tracker_.HasTrackedTasks()); | 333 EXPECT_FALSE(task_tracker_.HasTrackedTasks()); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 bad_thread.message_loop_proxy()->PostTask( | 447 bad_thread.message_loop_proxy()->PostTask( |
| 459 FROM_HERE, | 448 FROM_HERE, |
| 460 base::Bind(&MaybeRunDeadlyTaskTrackerMemberFunction, | 449 base::Bind(&MaybeRunDeadlyTaskTrackerMemberFunction, |
| 461 base::Unretained(&task_tracker_), | 450 base::Unretained(&task_tracker_), |
| 462 base::Bind(&CancelableTaskTracker::TryCancelAll))); | 451 base::Bind(&CancelableTaskTracker::TryCancelAll))); |
| 463 | 452 |
| 464 test_task_runner->RunUntilIdle(); | 453 test_task_runner->RunUntilIdle(); |
| 465 } | 454 } |
| 466 | 455 |
| 467 } // namespace | 456 } // namespace |
| OLD | NEW |