Chromium Code Reviews| Index: components/scheduler/child/webthread_impl_for_worker_scheduler_unittest.cc |
| diff --git a/components/scheduler/child/webthread_impl_for_worker_scheduler_unittest.cc b/components/scheduler/child/webthread_impl_for_worker_scheduler_unittest.cc |
| index 7bb1f8990762e426df7004d2c12637105c542941..d1b3582baf58751e8602abc51aafc1c921436772 100644 |
| --- a/components/scheduler/child/webthread_impl_for_worker_scheduler_unittest.cc |
| +++ b/components/scheduler/child/webthread_impl_for_worker_scheduler_unittest.cc |
| @@ -8,6 +8,7 @@ |
| #include "components/scheduler/child/worker_scheduler_impl.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| +#include "third_party/WebKit/public/platform/WebScheduler.h" |
| #include "third_party/WebKit/public/platform/WebTraceLocation.h" |
| using testing::_; |
| @@ -124,14 +125,45 @@ TEST_F(WebThreadImplForWorkerSchedulerTest, TestDefaultTask) { |
| TEST_F(WebThreadImplForWorkerSchedulerTest, |
| TestTaskExecutedBeforeThreadDeletion) { |
| scoped_ptr<MockTask> task(new MockTask()); |
| - base::WaitableEvent completion(false, false); |
| + bool task_ran = false; |
| + base::Lock lock; |
|
rmcilroy
2015/04/28 09:51:10
Can you not just use a WaitableEvent and check !co
Sami
2015/04/28 11:52:46
Good idea, that's cleaner.
Also found out that th
|
| EXPECT_CALL(*task, run()); |
| ON_CALL(*task, run()) |
| - .WillByDefault(Invoke([&completion]() { completion.Signal(); })); |
| + .WillByDefault(Invoke([&task_ran, &lock]() { |
| + base::AutoLock auto_lock(lock); |
| + task_ran = true; |
| + })); |
| + |
| + thread_->postTask(blink::WebTraceLocation(), task.release()); |
| + thread_.reset(); |
| + { |
| + base::AutoLock auto_lock(lock); |
| + EXPECT_TRUE(task_ran); |
| + } |
| +} |
| +TEST_F(WebThreadImplForWorkerSchedulerTest, |
| + TestThreadShutdownAfterPreShutdown) { |
| + scoped_ptr<MockTask> task(new MockTask()); |
| + bool task_ran = false; |
| + base::Lock lock; |
| + |
| + ON_CALL(*task, run()) |
| + .WillByDefault(Invoke([&task_ran, &lock]() { |
| + base::AutoLock auto_lock(lock); |
| + task_ran = true; |
| + })); |
| + |
| + // preShutdown should block the postTask, but not the internal shutdown task. |
| + thread_->scheduler()->preShutdown(); |
| thread_->postTask(blink::WebTraceLocation(), task.release()); |
| thread_.reset(); |
| + |
| + { |
| + base::AutoLock auto_lock(lock); |
| + EXPECT_FALSE(task_ran); |
| + } |
| } |
| TEST_F(WebThreadImplForWorkerSchedulerTest, TestIdleTask) { |