| Index: content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
|
| diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
|
| index 76eef568dfe5c37cb3d4039358374cfc19302149..4321f12761a28556304632776d67a6e7e176b3b4 100644
|
| --- a/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
|
| +++ b/content/browser/renderer_host/media/media_stream_dispatcher_host_unittest.cc
|
| @@ -8,6 +8,7 @@
|
| #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
|
| #include "content/browser/renderer_host/media/media_stream_manager.h"
|
| #include "content/browser/renderer_host/media/video_capture_manager.h"
|
| +#include "content/browser/resource_context.h"
|
| #include "content/common/media/media_stream_messages.h"
|
| #include "content/common/media/media_stream_options.h"
|
| #include "ipc/ipc_message_macros.h"
|
| @@ -23,12 +24,38 @@ const int kProcessId = 5;
|
| const int kRenderId = 6;
|
| const int kPageRequestId = 7;
|
|
|
| +namespace content {
|
| +// Test version of ResourceContext
|
| +class MockMediaStreamResourceContext : public ResourceContext {
|
| + public:
|
| + MockMediaStreamResourceContext() {}
|
| + virtual ~MockMediaStreamResourceContext() {}
|
| +
|
| + virtual media_stream::MediaStreamManager* media_stream_manger() const {
|
| + return media_stream_manager_.get();
|
| + }
|
| +
|
| + void set_media_stream_manager(
|
| + media_stream::MediaStreamManager* media_stream_manager) {
|
| + media_stream_manager_.reset(media_stream_manager);
|
| + }
|
| +
|
| + private:
|
| + // Pure virtual in ResourceContext.
|
| + virtual void EnsureInitialized() const {}
|
| +
|
| + scoped_ptr<media_stream::MediaStreamManager> media_stream_manager_;
|
| +};
|
| +
|
| +} // namespace content
|
| +
|
| namespace media_stream {
|
|
|
| class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost {
|
| public:
|
| - explicit MockMediaStreamDispatcherHost(MessageLoop* message_loop)
|
| - : MediaStreamDispatcherHost(kProcessId),
|
| + MockMediaStreamDispatcherHost(content::ResourceContext* resource_context,
|
| + MessageLoop* message_loop)
|
| + : MediaStreamDispatcherHost(resource_context, kProcessId),
|
| message_loop_(message_loop) {}
|
| virtual ~MockMediaStreamDispatcherHost() {}
|
|
|
| @@ -41,9 +68,7 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost {
|
| MOCK_METHOD2(OnVideoDeviceFailed, void(int routing_id, int index));
|
|
|
| // Accessor to private functions.
|
| - void OnGenerateStream(
|
| - int page_request_id,
|
| - const StreamOptions& components) {
|
| + void OnGenerateStream(int page_request_id, const StreamOptions& components) {
|
| MediaStreamDispatcherHost::OnGenerateStream(kRenderId,
|
| page_request_id,
|
| components,
|
| @@ -104,8 +129,7 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost {
|
| video_devices_ = video_device_list;
|
| }
|
|
|
| - void OnStreamGenerationFailed(const IPC::Message& msg,
|
| - int request_id) {
|
| + void OnStreamGenerationFailed(const IPC::Message& msg, int request_id) {
|
| OnStreamGenerationFailed(msg.routing_id(), request_id);
|
| message_loop_->PostTask(FROM_HERE, new MessageLoop::QuitTask());
|
| label_= "";
|
| @@ -138,23 +162,37 @@ class MediaStreamDispatcherHostTest : public testing::Test {
|
|
|
| protected:
|
| virtual void SetUp() {
|
| - // Create message loop so that
|
| - // DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) passes.
|
| message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO));
|
| + // ResourceContext must be created on UI thread.
|
| + ui_thread_.reset(new BrowserThread(BrowserThread::UI, message_loop_.get()));
|
| + resource_context_.reset(new content::MockMediaStreamResourceContext());
|
| +
|
| + // MediaStreamManager must be created and called on IO thread.
|
| io_thread_.reset(new BrowserThread(BrowserThread::IO, message_loop_.get()));
|
|
|
| - // Make sure the MediaStreamManager exist and use
|
| - // fake audio / video devices.
|
| - MediaStreamManager* manager = MediaStreamManager::Get();
|
| - manager->UseFakeDevice();
|
| + // Create a MediaStreamManager instance and hand over ownership to
|
| + // ResourceContext.
|
| + MediaStreamManager* media_stream_manager = new MediaStreamManager();
|
| + resource_context_->set_media_stream_manager(media_stream_manager);
|
| +
|
| + // Make sure we use fake devices to avoid long delays.
|
| + resource_context_->media_stream_manager()->UseFakeDevice();
|
| +
|
| + host_ = new MockMediaStreamDispatcherHost(resource_context_.get(),
|
| + message_loop_.get());
|
| + }
|
|
|
| - host_ =
|
| - new MockMediaStreamDispatcherHost(message_loop_.get());
|
| + virtual void TearDown() {
|
| + // Delete the threads in correct order.
|
| + io_thread_.reset();
|
| + ui_thread_.reset();
|
| }
|
|
|
| scoped_refptr<MockMediaStreamDispatcherHost> host_;
|
| scoped_ptr<MessageLoop> message_loop_;
|
| + scoped_ptr<BrowserThread> ui_thread_;
|
| scoped_ptr<BrowserThread> io_thread_;
|
| + scoped_ptr<content::ResourceContext> resource_context_;
|
| };
|
|
|
| TEST_F(MediaStreamDispatcherHostTest, GenerateStream) {
|
| @@ -223,7 +261,8 @@ TEST_F(MediaStreamDispatcherHostTest, FailDevice) {
|
|
|
| EXPECT_CALL(*host_, OnVideoDeviceFailed(kRenderId, 0));
|
| int session_id = host_->video_devices_[0].session_id;
|
| - MediaStreamManager::Get()->video_capture_manager()->Error(session_id);
|
| + resource_context_->media_stream_manager()->video_capture_manager()->
|
| + Error(session_id);
|
| WaitForResult();
|
| EXPECT_EQ(host_->video_devices_.size(), 0u);
|
| EXPECT_EQ(host_->NumberOfStreams(), 1u);
|
|
|