| 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..cb311f387d71ae4637dabae2a9606e107eb33467 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
|
| @@ -5,9 +5,11 @@
|
| #include <string>
|
|
|
| #include "base/message_loop.h"
|
| +#include "content/browser/mock_resource_context.h"
|
| #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"
|
| @@ -27,8 +29,9 @@ 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 +44,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 +105,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 +138,64 @@ 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()));
|
| + // 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 pointer to
|
| + // ResourceContext.
|
| + media_stream_manager_.reset(new MediaStreamManager());
|
| + // Make sure we use fake devices to avoid long delays.
|
| + media_stream_manager_->UseFakeDevice();
|
| + content::MockResourceContext::GetInstance()->set_media_stream_manager(
|
| + media_stream_manager_.get());
|
|
|
| - host_ =
|
| - new MockMediaStreamDispatcherHost(message_loop_.get());
|
| + host_ = new MockMediaStreamDispatcherHost(
|
| + content::MockResourceContext::GetInstance(), message_loop_.get());
|
| + }
|
| +
|
| + virtual void TearDown() {
|
| + content::MockResourceContext::GetInstance()->set_media_stream_manager(NULL);
|
| +
|
| + // Needed to make sure the manager finishes all tasks on its own thread.
|
| + SyncWithVideoCaptureManagerThread();
|
| + }
|
| +
|
| + // Called on the VideoCaptureManager thread.
|
| + static void PostQuitMessageLoop(MessageLoop* message_loop) {
|
| + message_loop->PostTask(FROM_HERE, new MessageLoop::QuitTask());
|
| + }
|
| +
|
| + // Called on the main thread.
|
| + static void PostQuitOnVideoCaptureManagerThread(
|
| + MessageLoop* message_loop,
|
| + media_stream::MediaStreamManager* media_stream_manager) {
|
| + media_stream_manager->video_capture_manager()->GetMessageLoop()->
|
| + PostTask(FROM_HERE,
|
| + NewRunnableFunction(&PostQuitMessageLoop, message_loop));
|
| + }
|
| +
|
| + // SyncWithVideoCaptureManagerThread() waits until all pending tasks on the
|
| + // video_capture_manager thread are executed while also processing pending
|
| + // task in message_loop_ on the current thread. It is used to synchronize
|
| + // with the video capture manager thread when we are stopping a video
|
| + // capture device.
|
| + void SyncWithVideoCaptureManagerThread() {
|
| + message_loop_->PostTask(
|
| + FROM_HERE,
|
| + NewRunnableFunction(&PostQuitOnVideoCaptureManagerThread,
|
| + message_loop_.get(),
|
| + media_stream_manager_.get()));
|
| + message_loop_->Run();
|
| }
|
|
|
| scoped_refptr<MockMediaStreamDispatcherHost> host_;
|
| scoped_ptr<MessageLoop> message_loop_;
|
| + scoped_ptr<BrowserThread> ui_thread_;
|
| scoped_ptr<BrowserThread> io_thread_;
|
| + scoped_ptr<MediaStreamManager> media_stream_manager_;
|
| };
|
|
|
| TEST_F(MediaStreamDispatcherHostTest, GenerateStream) {
|
| @@ -223,7 +264,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);
|
| + content::MockResourceContext::GetInstance()->media_stream_manager()->
|
| + video_capture_manager()->Error(session_id);
|
| WaitForResult();
|
| EXPECT_EQ(host_->video_devices_.size(), 0u);
|
| EXPECT_EQ(host_->NumberOfStreams(), 1u);
|
|
|