| 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())
|
| + 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();
|
|
|