| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "base/sequenced_task_runner.h" | 5 #include "base/sequenced_task_runner.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/threading/thread.h" | 10 #include "base/threading/thread.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 thread.task_runner(); | 40 thread.task_runner(); |
| 41 | 41 |
| 42 using SequenceBoundUniquePtr = | 42 using SequenceBoundUniquePtr = |
| 43 std::unique_ptr<DeleteCounter, OnTaskRunnerDeleter>; | 43 std::unique_ptr<DeleteCounter, OnTaskRunnerDeleter>; |
| 44 | 44 |
| 45 int counter = 0; | 45 int counter = 0; |
| 46 SequenceBoundUniquePtr ptr(new DeleteCounter(&counter, current_thread), | 46 SequenceBoundUniquePtr ptr(new DeleteCounter(&counter, current_thread), |
| 47 OnTaskRunnerDeleter(current_thread)); | 47 OnTaskRunnerDeleter(current_thread)); |
| 48 EXPECT_EQ(0, counter); | 48 EXPECT_EQ(0, counter); |
| 49 foreign_thread->PostTask( | 49 foreign_thread->PostTask( |
| 50 FROM_HERE, | 50 FROM_HERE, BindOnce([](SequenceBoundUniquePtr) {}, Passed(&ptr))); |
| 51 Bind([](SequenceBoundUniquePtr) {}, | |
| 52 Passed(&ptr))); | |
| 53 | 51 |
| 54 { | 52 { |
| 55 RunLoop run_loop; | 53 RunLoop run_loop; |
| 56 foreign_thread->PostTaskAndReply( | 54 foreign_thread->PostTaskAndReply(FROM_HERE, BindOnce([] {}), |
| 57 FROM_HERE, | 55 run_loop.QuitClosure()); |
| 58 Bind([]{}), | |
| 59 run_loop.QuitClosure()); | |
| 60 run_loop.Run(); | 56 run_loop.Run(); |
| 61 } | 57 } |
| 62 EXPECT_EQ(1, counter); | 58 EXPECT_EQ(1, counter); |
| 63 | 59 |
| 64 DeleteCounter* raw = new DeleteCounter(&counter, nullptr); | 60 DeleteCounter* raw = new DeleteCounter(&counter, nullptr); |
| 65 SequenceBoundUniquePtr ptr2(raw, OnTaskRunnerDeleter(foreign_thread)); | 61 SequenceBoundUniquePtr ptr2(raw, OnTaskRunnerDeleter(foreign_thread)); |
| 66 EXPECT_EQ(1, counter); | 62 EXPECT_EQ(1, counter); |
| 67 | 63 |
| 68 thread.Stop(); | 64 thread.Stop(); |
| 69 ptr2 = nullptr; | 65 ptr2 = nullptr; |
| 70 ASSERT_EQ(1, counter); | 66 ASSERT_EQ(1, counter); |
| 71 | 67 |
| 72 delete raw; | 68 delete raw; |
| 73 EXPECT_EQ(2, counter); | 69 EXPECT_EQ(2, counter); |
| 74 } | 70 } |
| 75 | 71 |
| 76 } // namespace base | 72 } // namespace base |
| OLD | NEW |