| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "sync/internal_api/public/base/cancelation_signal.h" | 5 #include "sync/internal_api/public/base/cancelation_signal.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/synchronization/waitable_event.h" | 9 #include "base/synchronization/waitable_event.h" |
| 10 #include "base/threading/platform_thread.h" | 10 #include "base/threading/platform_thread.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 bool WasStarted(); | 41 bool WasStarted(); |
| 42 | 42 |
| 43 private: | 43 private: |
| 44 base::WaitableEvent event_; | 44 base::WaitableEvent event_; |
| 45 base::Thread exec_thread_; | 45 base::Thread exec_thread_; |
| 46 CancelationSignal* cancel_signal_; | 46 CancelationSignal* cancel_signal_; |
| 47 bool was_started_; | 47 bool was_started_; |
| 48 }; | 48 }; |
| 49 | 49 |
| 50 BlockingTask::BlockingTask(CancelationSignal* cancel_signal) | 50 BlockingTask::BlockingTask(CancelationSignal* cancel_signal) |
| 51 : event_(true, false), | 51 : event_(base::WaitableEvent::ResetPolicy::MANUAL, |
| 52 exec_thread_("BlockingTaskBackgroundThread"), | 52 base::WaitableEvent::InitialState::NOT_SIGNALED), |
| 53 cancel_signal_(cancel_signal), | 53 exec_thread_("BlockingTaskBackgroundThread"), |
| 54 was_started_(false) { } | 54 cancel_signal_(cancel_signal), |
| 55 was_started_(false) {} |
| 55 | 56 |
| 56 BlockingTask::~BlockingTask() { | 57 BlockingTask::~BlockingTask() { |
| 57 if (was_started_) { | 58 if (was_started_) { |
| 58 cancel_signal_->UnregisterHandler(this); | 59 cancel_signal_->UnregisterHandler(this); |
| 59 } | 60 } |
| 60 } | 61 } |
| 61 | 62 |
| 62 void BlockingTask::RunAsync(base::WaitableEvent* task_start_signal, | 63 void BlockingTask::RunAsync(base::WaitableEvent* task_start_signal, |
| 63 base::WaitableEvent* task_done_signal) { | 64 base::WaitableEvent* task_done_signal) { |
| 64 exec_thread_.Start(); | 65 exec_thread_.Start(); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 private: | 116 private: |
| 116 base::MessageLoop main_loop_; | 117 base::MessageLoop main_loop_; |
| 117 | 118 |
| 118 CancelationSignal signal_; | 119 CancelationSignal signal_; |
| 119 base::WaitableEvent task_start_event_; | 120 base::WaitableEvent task_start_event_; |
| 120 base::WaitableEvent task_done_event_; | 121 base::WaitableEvent task_done_event_; |
| 121 BlockingTask blocking_task_; | 122 BlockingTask blocking_task_; |
| 122 }; | 123 }; |
| 123 | 124 |
| 124 CancelationSignalTest::CancelationSignalTest() | 125 CancelationSignalTest::CancelationSignalTest() |
| 125 : task_start_event_(false, false), | 126 : task_start_event_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
| 126 task_done_event_(false, false), | 127 base::WaitableEvent::InitialState::NOT_SIGNALED), |
| 127 blocking_task_(&signal_) {} | 128 task_done_event_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
| 129 base::WaitableEvent::InitialState::NOT_SIGNALED), |
| 130 blocking_task_(&signal_) {} |
| 128 | 131 |
| 129 CancelationSignalTest::~CancelationSignalTest() {} | 132 CancelationSignalTest::~CancelationSignalTest() {} |
| 130 | 133 |
| 131 void CancelationSignalTest::StartBlockingTaskAsync() { | 134 void CancelationSignalTest::StartBlockingTaskAsync() { |
| 132 blocking_task_.RunAsync(&task_start_event_, &task_done_event_); | 135 blocking_task_.RunAsync(&task_start_event_, &task_done_event_); |
| 133 } | 136 } |
| 134 | 137 |
| 135 void CancelationSignalTest::StartBlockingTaskAndWaitForItToStart() { | 138 void CancelationSignalTest::StartBlockingTaskAndWaitForItToStart() { |
| 136 blocking_task_.RunAsync(&task_start_event_, &task_done_event_); | 139 blocking_task_.RunAsync(&task_start_event_, &task_done_event_); |
| 137 task_start_event_.Wait(); | 140 task_start_event_.Wait(); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 // progress. | 180 // progress. |
| 178 TEST_F(CancelationSignalTest, Cancel) { | 181 TEST_F(CancelationSignalTest, Cancel) { |
| 179 StartBlockingTaskAndWaitForItToStart(); | 182 StartBlockingTaskAndWaitForItToStart(); |
| 180 | 183 |
| 181 // Wait for the task to finish and let verify it has been started. | 184 // Wait for the task to finish and let verify it has been started. |
| 182 CancelBlocking(); | 185 CancelBlocking(); |
| 183 EXPECT_FALSE(VerifyTaskNotStarted()); | 186 EXPECT_FALSE(VerifyTaskNotStarted()); |
| 184 } | 187 } |
| 185 | 188 |
| 186 } // namespace syncer | 189 } // namespace syncer |
| OLD | NEW |