| 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 83a503eb98c23138cd6488936b16198c92f48c13..d8b98b640a71ce108473ff24f70f3f7f773a611f 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
|
| @@ -7,12 +7,15 @@
|
| #include "base/bind.h"
|
| #include "base/message_loop.h"
|
| #include "content/browser/browser_thread_impl.h"
|
| +#include "content/browser/mock_content_browser_client.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/mock_media_observer.h"
|
| #include "content/browser/renderer_host/media/video_capture_manager.h"
|
| #include "content/common/media/media_stream_messages.h"
|
| #include "content/common/media/media_stream_options.h"
|
| #include "content/test/mock_resource_context.h"
|
| +#include "content/test/test_content_client.h"
|
| #include "ipc/ipc_message_macros.h"
|
| #include "media/audio/audio_manager.h"
|
| #include "net/url_request/url_request_context.h"
|
| @@ -23,8 +26,8 @@ using ::testing::_;
|
| using ::testing::DeleteArg;
|
| using ::testing::DoAll;
|
| using ::testing::Return;
|
| -using content::BrowserThread;
|
|
|
| +using content::BrowserThread;
|
| using content::BrowserThreadImpl;
|
|
|
| const int kProcessId = 5;
|
| @@ -33,7 +36,8 @@ const int kPageRequestId = 7;
|
|
|
| namespace media_stream {
|
|
|
| -class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost {
|
| +class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost,
|
| + public content::MockContentBrowserClient {
|
| public:
|
| MockMediaStreamDispatcherHost(content::ResourceContext* resource_context,
|
| MessageLoop* message_loop,
|
| @@ -48,6 +52,7 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost {
|
| MOCK_METHOD2(OnStreamGenerationFailed, void(int routing_id, int request_id));
|
| MOCK_METHOD2(OnAudioDeviceFailed, void(int routing_id, int index));
|
| MOCK_METHOD2(OnVideoDeviceFailed, void(int routing_id, int index));
|
| + MOCK_METHOD0(GetMediaObserver, content::MediaObserver*());
|
|
|
| // Accessor to private functions.
|
| void OnGenerateStream(int page_request_id, const StreamOptions& components) {
|
| @@ -140,6 +145,9 @@ class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost {
|
|
|
| class MediaStreamDispatcherHostTest : public testing::Test {
|
| public:
|
| + MediaStreamDispatcherHostTest() : old_client_(NULL),
|
| + old_browser_client_(NULL) {}
|
| +
|
| void WaitForResult() {
|
| message_loop_->Run();
|
| }
|
| @@ -156,17 +164,32 @@ class MediaStreamDispatcherHostTest : public testing::Test {
|
|
|
| audio_manager_.reset(media::AudioManager::Create());
|
|
|
| + // Create our own media observer.
|
| + media_observer_.reset(new MockMediaObserver());
|
| +
|
| // Make sure we use fake devices to avoid long delays.
|
| MediaStreamManager::GetForResourceContext(
|
| &resource_context_, audio_manager_.get())->UseFakeDevice();
|
|
|
| host_ = new MockMediaStreamDispatcherHost(
|
| &resource_context_, message_loop_.get(), audio_manager_.get());
|
| +
|
| + // Use the fake content client and browser.
|
| + old_client_ = content::GetContentClient();
|
| + old_browser_client_ = content::GetContentClient()->browser();
|
| + content_client_.reset(new TestContentClient);
|
| + content::SetContentClient(content_client_.get());
|
| + content_client_->set_browser(host_);
|
| }
|
|
|
| virtual void TearDown() {
|
| // Needed to make sure the manager finishes all tasks on its own thread.
|
| SyncWithVideoCaptureManagerThread();
|
| +
|
| + // Recover the old browser client and content client.
|
| + content::GetContentClient()->set_browser(old_browser_client_);
|
| + content::SetContentClient(old_client_);
|
| + content_client_.reset();
|
| }
|
|
|
| // Called on the VideoCaptureManager thread.
|
| @@ -204,14 +227,23 @@ class MediaStreamDispatcherHostTest : public testing::Test {
|
| scoped_ptr<BrowserThreadImpl> io_thread_;
|
| scoped_ptr<media::AudioManager> audio_manager_;
|
| content::MockResourceContext resource_context_;
|
| + content::ContentClient* old_client_;
|
| + content::ContentBrowserClient* old_browser_client_;
|
| + scoped_ptr<content::ContentClient> content_client_;
|
| + scoped_ptr<MockMediaObserver> media_observer_;
|
| };
|
|
|
| TEST_F(MediaStreamDispatcherHostTest, GenerateStream) {
|
| StreamOptions options(false, true);
|
|
|
| + EXPECT_CALL(*host_, GetMediaObserver())
|
| + .WillRepeatedly(Return(media_observer_.get()));
|
| EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId, 0, 1));
|
| host_->OnGenerateStream(kPageRequestId, options);
|
|
|
| + EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesOpened(_, _, _));
|
| + EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesClosed(_, _, _));
|
| +
|
| WaitForResult();
|
|
|
| std::string label = host_->label_;
|
| @@ -231,9 +263,13 @@ TEST_F(MediaStreamDispatcherHostTest, GenerateThreeStreams) {
|
| StreamOptions options(false, true);
|
|
|
| // Generate first stream.
|
| + EXPECT_CALL(*host_, GetMediaObserver())
|
| + .WillRepeatedly(Return(media_observer_.get()));
|
| EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId, 0, 1));
|
| host_->OnGenerateStream(kPageRequestId, options);
|
|
|
| + EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesOpened(_, _, _));
|
| +
|
| WaitForResult();
|
|
|
| // Check the latest generated stream.
|
| @@ -249,6 +285,8 @@ TEST_F(MediaStreamDispatcherHostTest, GenerateThreeStreams) {
|
| EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId + 1, 0, 1));
|
| host_->OnGenerateStream(kPageRequestId+1, options);
|
|
|
| + EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesOpened(_, _, _));
|
| +
|
| WaitForResult();
|
|
|
| // Check the latest generated stream.
|
| @@ -266,6 +304,10 @@ TEST_F(MediaStreamDispatcherHostTest, GenerateThreeStreams) {
|
| EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId + 2, 0, 1));
|
| host_->OnGenerateStream(kPageRequestId+2, options);
|
|
|
| + EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesOpened(_, _, _));
|
| + EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesClosed(_, _, _))
|
| + .Times(3);
|
| +
|
| WaitForResult();
|
|
|
| // Check the latest generated stream.
|
| @@ -290,8 +332,11 @@ TEST_F(MediaStreamDispatcherHostTest, GenerateThreeStreams) {
|
| TEST_F(MediaStreamDispatcherHostTest, FailDevice) {
|
| StreamOptions options(false, true);
|
|
|
| + EXPECT_CALL(*host_, GetMediaObserver())
|
| + .WillRepeatedly(Return(media_observer_.get()));
|
| EXPECT_CALL(*host_, OnStreamGenerated(kRenderId, kPageRequestId, 0, 1));
|
| host_->OnGenerateStream(kPageRequestId, options);
|
| + EXPECT_CALL(*media_observer_.get(), OnCaptureDevicesOpened(_, _, _));
|
| WaitForResult();
|
| std::string label = host_->label_;
|
|
|
|
|