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

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

Issue 7948004: Removing singelton property of MediaStreamManager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 3 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/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);

Powered by Google App Engine
This is Rietveld 408576698