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