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

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: Broke mirroring out of AudioRendererHost into separate AudioMirroringManager class. 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..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();

Powered by Google App Engine
This is Rietveld 408576698