Chromium Code Reviews| Index: content/browser/renderer_host/media/audio_renderer_host_unittest.cc |
| diff --git a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc |
| index e8bd79c9d28e3aa48135e9bf43b3bbae6c56e962..bd234377669721d809b318329924acf74a9f686c 100644 |
| --- a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc |
| +++ b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/process_util.h" |
| #include "base/sync_socket.h" |
| #include "content/browser/browser_thread_impl.h" |
| +#include "content/browser/renderer_host/media/audio_mirroring_manager.h" |
| #include "content/browser/renderer_host/media/audio_renderer_host.h" |
| #include "content/browser/renderer_host/media/mock_media_observer.h" |
| #include "content/common/media/audio_messages.h" |
| @@ -23,13 +24,15 @@ using ::testing::_; |
| using ::testing::AtLeast; |
| using ::testing::DoAll; |
| using ::testing::InSequence; |
| -using ::testing::InvokeWithoutArgs; |
| +using ::testing::NotNull; |
| using ::testing::Return; |
| using ::testing::SaveArg; |
| using ::testing::SetArgumentPointee; |
| namespace content { |
| +static const int kRenderProcessId = 1; |
| +static const int kRenderViewId = 4; |
| static const int kStreamId = 50; |
| static bool IsRunningHeadless() { |
| @@ -39,12 +42,31 @@ static bool IsRunningHeadless() { |
| return false; |
| } |
| +class MockAudioMirroringManager : public AudioMirroringManager { |
| + public: |
| + MockAudioMirroringManager() {} |
| + virtual ~MockAudioMirroringManager() {} |
| + |
| + MOCK_METHOD3(AddDiverter, |
| + void(int render_process_id, int render_view_id, |
| + Diverter* diverter)); |
| + MOCK_METHOD3(RemoveDiverter, |
| + void(int render_process_id, int render_view_id, |
| + Diverter* diverter)); |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(MockAudioMirroringManager); |
| +}; |
| + |
| + |
| class MockAudioRendererHost : public AudioRendererHost { |
| public: |
| explicit MockAudioRendererHost( |
| media::AudioManager* audio_manager, |
| + AudioMirroringManager* mirroring_manager, |
| MediaObserver* media_observer) |
| - : AudioRendererHost(audio_manager, media_observer), |
| + : AudioRendererHost( |
| + kRenderProcessId, audio_manager, mirroring_manager, media_observer), |
| shared_memory_length_(0) { |
| } |
| @@ -148,6 +170,9 @@ class AudioRendererHostTest : public testing::Test { |
| protected: |
| virtual void SetUp() { |
| + if (!IsRunningHeadless()) |
|
DaleCurtis
2013/01/08 19:23:33
Since we have fake audio streams you should always
miu
2013/01/09 02:19:41
Done.
|
| + EnableRealDevice(); |
| + |
| // Create a message loop so AudioRendererHost can use it. |
| message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); |
| @@ -158,10 +183,8 @@ class AudioRendererHostTest : public testing::Test { |
| message_loop_.get())); |
| audio_manager_.reset(media::AudioManager::Create()); |
| observer_.reset(new MockMediaObserver()); |
| - host_ = new MockAudioRendererHost(audio_manager_.get(), observer_.get()); |
| - |
| - // Expect the audio stream will be deleted. |
| - EXPECT_CALL(*observer_, OnDeleteAudioStream(_, kStreamId)); |
| + host_ = new MockAudioRendererHost( |
| + audio_manager_.get(), &mirroring_manager_, observer_.get()); |
| // Simulate IPC channel connected. |
| host_->OnChannelConnected(base::GetCurrentProcId()); |
| @@ -208,6 +231,24 @@ class AudioRendererHostTest : public testing::Test { |
| // we receive the created message. |
| host_->OnCreateStream(kStreamId, params, 0); |
| message_loop_->Run(); |
| + |
| + // Simulate the renderer process associating a stream with a render view. |
| + EXPECT_CALL(mirroring_manager_, |
| + RemoveDiverter(kRenderProcessId, MSG_ROUTING_NONE, _)) |
| + .RetiresOnSaturation(); |
| + EXPECT_CALL(mirroring_manager_, |
| + AddDiverter(kRenderProcessId, kRenderViewId, NotNull())) |
| + .RetiresOnSaturation(); |
| + host_->OnAssociateStreamWithProducer(kStreamId, kRenderViewId); |
| + message_loop_->RunUntilIdle(); |
| + // At some point in the future, a corresponding RemoveDiverter() call must |
| + // be made. |
| + EXPECT_CALL(mirroring_manager_, |
| + RemoveDiverter(kRenderProcessId, kRenderViewId, NotNull())) |
| + .RetiresOnSaturation(); |
| + |
| + // Expect the audio stream will be deleted at some later point. |
| + EXPECT_CALL(*observer_, OnDeleteAudioStream(_, kStreamId)); |
| } |
| void Close() { |
| @@ -300,6 +341,7 @@ class AudioRendererHostTest : public testing::Test { |
| private: |
| bool mock_stream_; |
| scoped_ptr<MockMediaObserver> observer_; |
| + MockAudioMirroringManager mirroring_manager_; |
| scoped_refptr<MockAudioRendererHost> host_; |
| scoped_ptr<MessageLoop> message_loop_; |
| scoped_ptr<BrowserThreadImpl> io_thread_; |
| @@ -310,34 +352,22 @@ class AudioRendererHostTest : public testing::Test { |
| }; |
| TEST_F(AudioRendererHostTest, CreateAndClose) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| Close(); |
| } |
| // Simulate the case where a stream is not properly closed. |
| TEST_F(AudioRendererHostTest, CreateAndShutdown) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| } |
| TEST_F(AudioRendererHostTest, CreatePlayAndClose) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| Play(); |
| Close(); |
| } |
| TEST_F(AudioRendererHostTest, CreatePlayPauseAndClose) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| Play(); |
| Pause(); |
| @@ -345,9 +375,6 @@ TEST_F(AudioRendererHostTest, CreatePlayPauseAndClose) { |
| } |
| TEST_F(AudioRendererHostTest, SetVolume) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| SetVolume(0.5); |
| Play(); |
| @@ -357,27 +384,18 @@ TEST_F(AudioRendererHostTest, SetVolume) { |
| // Simulate the case where a stream is not properly closed. |
| TEST_F(AudioRendererHostTest, CreatePlayAndShutdown) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| Play(); |
| } |
| // Simulate the case where a stream is not properly closed. |
| TEST_F(AudioRendererHostTest, CreatePlayPauseAndShutdown) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| Play(); |
| Pause(); |
| } |
| TEST_F(AudioRendererHostTest, SimulateError) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| Play(); |
| SimulateError(); |
| @@ -387,9 +405,6 @@ TEST_F(AudioRendererHostTest, SimulateError) { |
| // the audio device is closed but the render process try to close the |
| // audio stream again. |
| TEST_F(AudioRendererHostTest, SimulateErrorAndClose) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| Play(); |
| SimulateError(); |