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_; |