| // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "base/test/thread_test_helper.h" | 
 |  | 
 | #include <utility> | 
 |  | 
 | #include "base/bind.h" | 
 | #include "base/location.h" | 
 | #include "base/threading/thread_restrictions.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | ThreadTestHelper::ThreadTestHelper( | 
 |     scoped_refptr<SequencedTaskRunner> target_sequence) | 
 |     : test_result_(false), | 
 |       target_sequence_(std::move(target_sequence)), | 
 |       done_event_(WaitableEvent::ResetPolicy::AUTOMATIC, | 
 |                   WaitableEvent::InitialState::NOT_SIGNALED) {} | 
 |  | 
 | bool ThreadTestHelper::Run() { | 
 |   if (!target_sequence_->PostTask( | 
 |           FROM_HERE, base::BindOnce(&ThreadTestHelper::RunOnSequence, this))) { | 
 |     return false; | 
 |   } | 
 |   base::ThreadRestrictions::ScopedAllowWait allow_wait; | 
 |   done_event_.Wait(); | 
 |   return test_result_; | 
 | } | 
 |  | 
 | void ThreadTestHelper::RunTest() { set_test_result(true); } | 
 |  | 
 | ThreadTestHelper::~ThreadTestHelper() = default; | 
 |  | 
 | void ThreadTestHelper::RunOnSequence() { | 
 |   RunTest(); | 
 |   done_event_.Signal(); | 
 | } | 
 |  | 
 | }  // namespace base |