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

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

Issue 1171953002: Add IPC interface for switching the audio output device for a given audio stream in the browser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address reviewers' comments Created 5 years, 6 months 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 c50430e074e2ea540346923383fabbf8c5081507..f7580da1d585dc2425f44a605f9de0f29aa57973 100644
--- a/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
+++ b/content/browser/renderer_host/media/audio_renderer_host_unittest.cc
@@ -31,6 +31,11 @@ namespace {
const int kRenderProcessId = 1;
const int kRenderFrameId = 5;
const int kStreamId = 50;
+const int kBadStreamId = 99;
+const int kSwitchOutputDeviceRequestId = 1;
+const GURL kSecurityOrigin("http://localhost");
+const std::string kDefaultDeviceID = "";
+const std::string kBadDeviceID = "bad-device-id";
} // namespace
namespace content {
@@ -55,12 +60,14 @@ class MockAudioRendererHost : public AudioRendererHost {
MockAudioRendererHost(media::AudioManager* audio_manager,
AudioMirroringManager* mirroring_manager,
MediaInternals* media_internals,
- MediaStreamManager* media_stream_manager)
+ MediaStreamManager* media_stream_manager,
+ const ResourceContext::SaltCallback& salt_callback)
: AudioRendererHost(kRenderProcessId,
audio_manager,
mirroring_manager,
media_internals,
- media_stream_manager),
+ media_stream_manager,
+ salt_callback),
shared_memory_length_(0) {}
// A list of mock methods.
@@ -68,6 +75,11 @@ class MockAudioRendererHost : public AudioRendererHost {
MOCK_METHOD1(OnStreamPlaying, void(int stream_id));
MOCK_METHOD1(OnStreamPaused, void(int stream_id));
MOCK_METHOD1(OnStreamError, void(int stream_id));
+ MOCK_METHOD3(
+ OnOutputDeviceSwitched,
+ void(int stream_id,
+ int request_id,
+ media::AudioOutputIPCDelegate::SwitchOutputDeviceResult result));
private:
virtual ~MockAudioRendererHost() {
@@ -89,6 +101,8 @@ class MockAudioRendererHost : public AudioRendererHost {
OnNotifyStreamCreated)
IPC_MESSAGE_HANDLER(AudioMsg_NotifyStreamStateChanged,
OnNotifyStreamStateChanged)
+ IPC_MESSAGE_HANDLER(AudioMsg_NotifyOutputDeviceSwitched,
+ OnNotifyOutputDeviceSwitched)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
EXPECT_TRUE(handled);
@@ -133,6 +147,24 @@ class MockAudioRendererHost : public AudioRendererHost {
}
}
+ void OnNotifyOutputDeviceSwitched(
+ int stream_id,
+ int request_id,
+ media::AudioOutputIPCDelegate::SwitchOutputDeviceResult result) {
+ switch (result) {
+ case media::AudioOutputIPCDelegate::kSuccess:
+ case media::AudioOutputIPCDelegate::kNotFoundError:
+ case media::AudioOutputIPCDelegate::kSecurityError:
+ case media::AudioOutputIPCDelegate::kObsoleteError:
+ case media::AudioOutputIPCDelegate::kNotSupportedError:
+ OnOutputDeviceSwitched(stream_id, request_id, result);
+ break;
+ default:
+ FAIL() << "Unknown SwitchOutputDevice result";
+ break;
+ }
+ }
+
scoped_ptr<base::SharedMemory> shared_memory_;
scoped_ptr<base::SyncSocket> sync_socket_;
uint32 shared_memory_length_;
@@ -140,6 +172,16 @@ class MockAudioRendererHost : public AudioRendererHost {
DISALLOW_COPY_AND_ASSIGN(MockAudioRendererHost);
};
+namespace {
+std::string ReturnMockSalt() {
+ return std::string();
+}
+
+ResourceContext::SaltCallback GetMockSaltCallback() {
+ return base::Bind(&ReturnMockSalt);
+}
+}
+
class AudioRendererHostTest : public testing::Test {
public:
AudioRendererHostTest() {
@@ -147,10 +189,10 @@ class AudioRendererHostTest : public testing::Test {
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kUseFakeDeviceForMediaStream);
media_stream_manager_.reset(new MediaStreamManager(audio_manager_.get()));
- host_ = new MockAudioRendererHost(audio_manager_.get(),
- &mirroring_manager_,
+ host_ = new MockAudioRendererHost(audio_manager_.get(), &mirroring_manager_,
MediaInternals::GetInstance(),
- media_stream_manager_.get());
+ media_stream_manager_.get(),
+ GetMockSaltCallback());
// Simulate IPC channel connected.
host_->set_peer_process_for_testing(base::Process::Current());
@@ -230,6 +272,18 @@ class AudioRendererHostTest : public testing::Test {
SyncWithAudioThread();
}
+ void SwitchOutputDevice(
+ int stream_id,
+ std::string device_id,
+ media::AudioOutputIPCDelegate::SwitchOutputDeviceResult expected_result) {
+ EXPECT_CALL(*host_.get(),
+ OnOutputDeviceSwitched(stream_id, kSwitchOutputDeviceRequestId,
+ expected_result));
+ host_->OnSwitchOutputDevice(stream_id, kRenderFrameId, device_id,
+ kSecurityOrigin, kSwitchOutputDeviceRequestId);
+ SyncWithAudioThread();
+ }
+
void SimulateError() {
EXPECT_EQ(1u, host_->audio_entries_.size())
<< "Calls Create() before calling this method";
@@ -301,6 +355,27 @@ TEST_F(AudioRendererHostTest, SetVolume) {
Close();
}
+TEST_F(AudioRendererHostTest, SwitchOutputDevice) {
+ Create(false);
+ SwitchOutputDevice(kStreamId, kDefaultDeviceID,
+ media::AudioOutputIPCDelegate::kSuccess);
+ Close();
+}
+
+TEST_F(AudioRendererHostTest, SwitchOutputDeviceNotAuthorized) {
+ Create(false);
+ SwitchOutputDevice(kStreamId, kBadDeviceID,
+ media::AudioOutputIPCDelegate::kSecurityError);
+ Close();
+}
+
+TEST_F(AudioRendererHostTest, SwitchOutputDeviceNoStream) {
+ Create(false);
+ SwitchOutputDevice(kBadStreamId, kDefaultDeviceID,
+ media::AudioOutputIPCDelegate::kObsoleteError);
+ Close();
+}
+
// Simulate the case where a stream is not properly closed.
TEST_F(AudioRendererHostTest, CreatePlayAndShutdown) {
Create(false);

Powered by Google App Engine
This is Rietveld 408576698