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..d94fb13c06665377a05f1c45b34e21c36a695073 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,28 +24,41 @@ 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() { |
- scoped_ptr<base::Environment> env(base::Environment::Create()); |
- if (env->HasVar("CHROME_HEADLESS")) |
- return true; |
- 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) { |
} |
@@ -142,9 +156,7 @@ ACTION_P(QuitMessageLoop, message_loop) { |
class AudioRendererHostTest : public testing::Test { |
public: |
- AudioRendererHostTest() |
- : mock_stream_(true) { |
- } |
+ AudioRendererHostTest() {} |
protected: |
virtual void SetUp() { |
@@ -158,10 +170,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()); |
@@ -193,21 +203,34 @@ class AudioRendererHostTest : public testing::Test { |
EXPECT_CALL(*host_, OnStreamCreated(kStreamId, _)) |
.WillOnce(QuitMessageLoop(message_loop_.get())); |
- media::AudioParameters::Format format; |
- if (mock_stream_) |
- format = media::AudioParameters::AUDIO_FAKE; |
- else |
- format = media::AudioParameters::AUDIO_PCM_LINEAR; |
- |
- media::AudioParameters params( |
- format, media::CHANNEL_LAYOUT_STEREO, |
- media::AudioParameters::kAudioCDSampleRate, 16, |
- media::AudioParameters::kAudioCDSampleRate / 10); |
- |
// Send a create stream message to the audio output stream and wait until |
// we receive the created message. |
- host_->OnCreateStream(kStreamId, params, 0); |
+ host_->OnCreateStream(kStreamId, |
+ media::AudioParameters( |
+ media::AudioParameters::AUDIO_FAKE, |
+ media::CHANNEL_LAYOUT_STEREO, |
+ media::AudioParameters::kAudioCDSampleRate, 16, |
+ media::AudioParameters::kAudioCDSampleRate / 10), |
+ 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() { |
@@ -295,11 +318,9 @@ class AudioRendererHostTest : public testing::Test { |
message_loop_->Run(); |
} |
- void EnableRealDevice() { mock_stream_ = false; } |
- |
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 +331,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 +354,6 @@ TEST_F(AudioRendererHostTest, CreatePlayPauseAndClose) { |
} |
TEST_F(AudioRendererHostTest, SetVolume) { |
- if (!IsRunningHeadless()) |
- EnableRealDevice(); |
- |
Create(); |
SetVolume(0.5); |
Play(); |
@@ -357,27 +363,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 +384,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(); |