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