Index: media/audio/audio_input_unittest.cc |
diff --git a/media/audio/audio_input_unittest.cc b/media/audio/audio_input_unittest.cc |
index 5d3ce9f4f2896f79ddece1b7cac16d0b448b46f6..abb47ce955be1299d5fcd201869e11981120bcfa 100644 |
--- a/media/audio/audio_input_unittest.cc |
+++ b/media/audio/audio_input_unittest.cc |
@@ -7,9 +7,10 @@ |
#include "base/bind.h" |
#include "base/environment.h" |
#include "base/macros.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
-#include "base/test/test_message_loop.h" |
-#include "base/thread_task_runner_handle.h" |
+#include "base/synchronization/waitable_event.h" |
#include "base/threading/platform_thread.h" |
#include "build/build_config.h" |
#include "media/audio/audio_io.h" |
@@ -49,16 +50,16 @@ |
}; |
class AudioInputTest : public testing::Test { |
- public: |
- AudioInputTest() |
- : message_loop_(base::MessageLoop::TYPE_UI), |
- audio_manager_(AudioManager::CreateForTesting( |
- base::ThreadTaskRunnerHandle::Get())), |
- audio_input_stream_(NULL) { |
+ public: |
+ AudioInputTest() : |
+ message_loop_(base::MessageLoop::TYPE_UI), |
+ audio_manager_(AudioManager::CreateForTesting()), |
+ audio_input_stream_(NULL) { |
+ // Wait for the AudioManager to finish any initialization on the audio loop. |
base::RunLoop().RunUntilIdle(); |
} |
- ~AudioInputTest() override {} |
+ ~AudioInputTest() override { base::RunLoop().RunUntilIdle(); } |
protected: |
bool InputDevicesAvailable() { |
@@ -143,12 +144,29 @@ |
// Synchronously runs the provided callback/closure on the audio thread. |
void RunOnAudioThread(const base::Closure& closure) { |
+ if (!audio_manager_->GetTaskRunner()->BelongsToCurrentThread()) { |
+ base::WaitableEvent event(false, false); |
+ audio_manager_->GetTaskRunner()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&AudioInputTest::RunOnAudioThreadImpl, |
+ base::Unretained(this), |
+ closure, |
+ &event)); |
+ event.Wait(); |
+ } else { |
+ closure.Run(); |
+ } |
+ } |
+ |
+ void RunOnAudioThreadImpl(const base::Closure& closure, |
+ base::WaitableEvent* event) { |
DCHECK(audio_manager_->GetTaskRunner()->BelongsToCurrentThread()); |
closure.Run(); |
- } |
- |
- base::TestMessageLoop message_loop_; |
- ScopedAudioManagerPtr audio_manager_; |
+ event->Signal(); |
+ } |
+ |
+ base::MessageLoop message_loop_; |
+ scoped_ptr<AudioManager> audio_manager_; |
AudioInputStream* audio_input_stream_; |
private: |
@@ -204,11 +222,10 @@ |
TestInputCallback test_callback; |
OpenAndStartAudioInputStreamOnAudioThread(&test_callback); |
- base::RunLoop run_loop; |
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
- FROM_HERE, run_loop.QuitClosure(), |
- base::TimeDelta::FromMilliseconds(500)); |
- run_loop.Run(); |
+ message_loop_.PostDelayedTask(FROM_HERE, |
+ base::MessageLoop::QuitWhenIdleClosure(), |
+ base::TimeDelta::FromMilliseconds(500)); |
+ message_loop_.Run(); |
EXPECT_GE(test_callback.callback_count(), 2); |
EXPECT_FALSE(test_callback.had_error()); |