| 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 dd76639f93a7d18e4b955e189edc88c1ce0584c6..ea8247d5f060809ac4290fb01bf38d647bf3a27c 100644
|
| --- a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
|
| +++ b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
|
| @@ -25,13 +25,9 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| using ::testing::_;
|
| -using ::testing::AtLeast;
|
| +using ::testing::Assign;
|
| using ::testing::DoAll;
|
| -using ::testing::InSequence;
|
| using ::testing::NotNull;
|
| -using ::testing::Return;
|
| -using ::testing::SaveArg;
|
| -using ::testing::SetArgumentPointee;
|
|
|
| namespace content {
|
|
|
| @@ -163,7 +159,7 @@ ACTION_P(QuitMessageLoop, message_loop) {
|
|
|
| class AudioRendererHostTest : public testing::Test {
|
| public:
|
| - AudioRendererHostTest() {}
|
| + AudioRendererHostTest() : is_stream_active_(false) {}
|
|
|
| protected:
|
| virtual void SetUp() {
|
| @@ -199,6 +195,10 @@ class AudioRendererHostTest : public testing::Test {
|
| SyncWithAudioThread();
|
| audio_manager_.reset();
|
|
|
| + // Make sure the stream has been deleted before continuing.
|
| + while (is_stream_active_)
|
| + message_loop_->Run();
|
| +
|
| io_thread_.reset();
|
| ui_thread_.reset();
|
|
|
| @@ -207,62 +207,39 @@ class AudioRendererHostTest : public testing::Test {
|
| message_loop_.reset();
|
| }
|
|
|
| - void Create() {
|
| + void Create(bool unified_stream) {
|
| EXPECT_CALL(*observer_,
|
| OnSetAudioStreamStatus(_, kStreamId, "created"));
|
| EXPECT_CALL(*host_.get(), OnStreamCreated(kStreamId, _))
|
| - .WillOnce(QuitMessageLoop(message_loop_.get()));
|
| + .WillOnce(DoAll(Assign(&is_stream_active_, true),
|
| + QuitMessageLoop(message_loop_.get())));
|
| EXPECT_CALL(mirroring_manager_,
|
| AddDiverter(kRenderProcessId, kRenderViewId, NotNull()))
|
| .RetiresOnSaturation();
|
|
|
| // Send a create stream message to the audio output stream and wait until
|
| // we receive the created message.
|
| - host_->OnCreateStream(kStreamId,
|
| - kRenderViewId,
|
| - 0,
|
| - media::AudioParameters(
|
| - media::AudioParameters::AUDIO_FAKE,
|
| - media::CHANNEL_LAYOUT_STEREO,
|
| - media::AudioParameters::kAudioCDSampleRate, 16,
|
| - media::AudioParameters::kAudioCDSampleRate / 10));
|
| - message_loop_->Run();
|
| -
|
| - // At some point in the future, a corresponding RemoveDiverter() call must
|
| - // be made.
|
| - EXPECT_CALL(mirroring_manager_,
|
| - RemoveDiverter(kRenderProcessId, kRenderViewId, NotNull()))
|
| - .RetiresOnSaturation();
|
| -
|
| - // All created streams should ultimately be closed.
|
| - EXPECT_CALL(*observer_,
|
| - OnSetAudioStreamStatus(_, kStreamId, "closed"));
|
| -
|
| - // Expect the audio stream will be deleted at some later point.
|
| - EXPECT_CALL(*observer_, OnDeleteAudioStream(_, kStreamId));
|
| - }
|
| -
|
| - void CreateUnifiedStream() {
|
| - EXPECT_CALL(*observer_,
|
| - OnSetAudioStreamStatus(_, kStreamId, "created"));
|
| - EXPECT_CALL(*host_.get(), OnStreamCreated(kStreamId, _))
|
| - .WillOnce(QuitMessageLoop(message_loop_.get()));
|
| - EXPECT_CALL(mirroring_manager_,
|
| - AddDiverter(kRenderProcessId, kRenderViewId, NotNull()))
|
| - .RetiresOnSaturation();
|
| - // Send a create stream message to the audio output stream and wait until
|
| - // we receive the created message.
|
| - // Use AudioInputDeviceManager::kFakeOpenSessionId as the session id to
|
| - // pass the permission check.
|
| - host_->OnCreateStream(kStreamId,
|
| - kRenderViewId,
|
| - AudioInputDeviceManager::kFakeOpenSessionId,
|
| - media::AudioParameters(
|
| - media::AudioParameters::AUDIO_FAKE,
|
| - media::CHANNEL_LAYOUT_STEREO,
|
| - 2,
|
| - media::AudioParameters::kAudioCDSampleRate, 16,
|
| - media::AudioParameters::kAudioCDSampleRate / 10));
|
| + int session_id;
|
| + media::AudioParameters params;
|
| + if (unified_stream) {
|
| + // Use AudioInputDeviceManager::kFakeOpenSessionId as the session id to
|
| + // pass the permission check.
|
| + session_id = AudioInputDeviceManager::kFakeOpenSessionId;
|
| + params = media::AudioParameters(
|
| + media::AudioParameters::AUDIO_FAKE,
|
| + media::CHANNEL_LAYOUT_STEREO,
|
| + 2,
|
| + media::AudioParameters::kAudioCDSampleRate, 16,
|
| + media::AudioParameters::kAudioCDSampleRate / 10);
|
| + } else {
|
| + session_id = 0;
|
| + params = media::AudioParameters(
|
| + media::AudioParameters::AUDIO_FAKE,
|
| + media::CHANNEL_LAYOUT_STEREO,
|
| + media::AudioParameters::kAudioCDSampleRate, 16,
|
| + media::AudioParameters::kAudioCDSampleRate / 10);
|
| + }
|
| + host_->OnCreateStream(kStreamId, kRenderViewId, session_id, params);
|
| message_loop_->Run();
|
|
|
| // At some point in the future, a corresponding RemoveDiverter() call must
|
| @@ -276,14 +253,19 @@ class AudioRendererHostTest : public testing::Test {
|
| OnSetAudioStreamStatus(_, kStreamId, "closed"));
|
|
|
| // Expect the audio stream will be deleted at some later point.
|
| - EXPECT_CALL(*observer_, OnDeleteAudioStream(_, kStreamId));
|
| + EXPECT_CALL(*observer_, OnDeleteAudioStream(_, kStreamId))
|
| + .WillOnce(DoAll(Assign(&is_stream_active_, false),
|
| + QuitMessageLoop(message_loop_.get())));
|
| }
|
|
|
| void Close() {
|
| // Send a message to AudioRendererHost to tell it we want to close the
|
| // stream.
|
| host_->OnCloseStream(kStreamId);
|
| - message_loop_->RunUntilIdle();
|
| + if (is_stream_active_)
|
| + message_loop_->Run();
|
| + else
|
| + message_loop_->RunUntilIdle();
|
| }
|
|
|
| void Play() {
|
| @@ -367,34 +349,36 @@ class AudioRendererHostTest : public testing::Test {
|
| scoped_ptr<media::AudioManager> audio_manager_;
|
| scoped_ptr<MediaStreamManager> media_stream_manager_;
|
|
|
| + bool is_stream_active_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(AudioRendererHostTest);
|
| };
|
|
|
| TEST_F(AudioRendererHostTest, CreateAndClose) {
|
| - Create();
|
| + Create(false);
|
| Close();
|
| }
|
|
|
| // Simulate the case where a stream is not properly closed.
|
| TEST_F(AudioRendererHostTest, CreateAndShutdown) {
|
| - Create();
|
| + Create(false);
|
| }
|
|
|
| TEST_F(AudioRendererHostTest, CreatePlayAndClose) {
|
| - Create();
|
| + Create(false);
|
| Play();
|
| Close();
|
| }
|
|
|
| TEST_F(AudioRendererHostTest, CreatePlayPauseAndClose) {
|
| - Create();
|
| + Create(false);
|
| Play();
|
| Pause();
|
| Close();
|
| }
|
|
|
| TEST_F(AudioRendererHostTest, SetVolume) {
|
| - Create();
|
| + Create(false);
|
| SetVolume(0.5);
|
| Play();
|
| Pause();
|
| @@ -403,19 +387,19 @@ TEST_F(AudioRendererHostTest, SetVolume) {
|
|
|
| // Simulate the case where a stream is not properly closed.
|
| TEST_F(AudioRendererHostTest, CreatePlayAndShutdown) {
|
| - Create();
|
| + Create(false);
|
| Play();
|
| }
|
|
|
| // Simulate the case where a stream is not properly closed.
|
| TEST_F(AudioRendererHostTest, CreatePlayPauseAndShutdown) {
|
| - Create();
|
| + Create(false);
|
| Play();
|
| Pause();
|
| }
|
|
|
| TEST_F(AudioRendererHostTest, SimulateError) {
|
| - Create();
|
| + Create(false);
|
| Play();
|
| SimulateError();
|
| }
|
| @@ -424,14 +408,14 @@ TEST_F(AudioRendererHostTest, SimulateError) {
|
| // the audio device is closed but the render process try to close the
|
| // audio stream again.
|
| TEST_F(AudioRendererHostTest, SimulateErrorAndClose) {
|
| - Create();
|
| + Create(false);
|
| Play();
|
| SimulateError();
|
| Close();
|
| }
|
|
|
| TEST_F(AudioRendererHostTest, CreateUnifiedStreamAndClose) {
|
| - CreateUnifiedStream();
|
| + Create(true);
|
| Close();
|
| }
|
|
|
|
|