Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9200)

Unified Diff: content/browser/renderer_host/media/audio_renderer_host_unittest.cc

Issue 11413078: Tab Audio Capture: Browser-side connect/disconnect functionality. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed tommi's comments (dependency injection for testing AudioMirroringManager). Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698