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..855aa689edc9e60afeab6a1626a7568e0a3e01b0 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,34 @@ static bool IsRunningHeadless() { |
| return false; |
| } |
| +class MockAudioMirroringManager : public AudioMirroringManager { |
| + public: |
| + MockAudioMirroringManager() { |
| + AudioMirroringManager::SetInstanceForTesting(this); |
|
tommi (sloooow) - chröme
2012/12/19 12:27:54
Sorry but I'm really not a fan of this approach, s
miu
2012/12/28 23:03:49
Done.
|
| + } |
| + |
| + virtual ~MockAudioMirroringManager() { |
| + AudioMirroringManager::SetInstanceForTesting(NULL); |
| + } |
| + |
| + 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, |
| MediaObserver* media_observer) |
| - : AudioRendererHost(audio_manager, media_observer), |
| + : AudioRendererHost(kRenderProcessId, audio_manager, media_observer), |
| shared_memory_length_(0) { |
| } |
| @@ -146,8 +171,12 @@ class AudioRendererHostTest : public testing::Test { |
| : mock_stream_(true) { |
| } |
| + |
|
tommi (sloooow) - chröme
2012/12/19 12:27:54
revert
miu
2012/12/28 23:03:49
Done.
|
| protected: |
| virtual void SetUp() { |
| + if (!IsRunningHeadless()) |
| + EnableRealDevice(); |
| + |
| // Create a message loop so AudioRendererHost can use it. |
| message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); |
| @@ -160,9 +189,6 @@ class AudioRendererHostTest : public testing::Test { |
| observer_.reset(new MockMediaObserver()); |
| host_ = new MockAudioRendererHost(audio_manager_.get(), observer_.get()); |
| - // Expect the audio stream will be deleted. |
| - EXPECT_CALL(*observer_, OnDeleteAudioStream(_, kStreamId)); |
| - |
| // Simulate IPC channel connected. |
| host_->OnChannelConnected(base::GetCurrentProcId()); |
| } |
| @@ -208,6 +234,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 +344,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 +355,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 +378,6 @@ TEST_F(AudioRendererHostTest, CreatePlayPauseAndClose) { |
| } |
| TEST_F(AudioRendererHostTest, SetVolume) { |
| - if (!IsRunningHeadless()) |
| - EnableRealDevice(); |
| - |
| Create(); |
| SetVolume(0.5); |
| Play(); |
| @@ -357,27 +387,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 +408,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(); |