| Index: content/renderer/media/video_capture_impl_manager_unittest.cc
|
| diff --git a/content/renderer/media/video_capture_impl_manager_unittest.cc b/content/renderer/media/video_capture_impl_manager_unittest.cc
|
| index 86cc56a76387d539c18477ad84728834f3121810..98f2b5645e773fa0c6263384c6189343d6062156 100644
|
| --- a/content/renderer/media/video_capture_impl_manager_unittest.cc
|
| +++ b/content/renderer/media/video_capture_impl_manager_unittest.cc
|
| @@ -12,6 +12,7 @@
|
| #include "content/renderer/media/video_capture_impl_manager.h"
|
| #include "content/renderer/media/video_capture_message_filter.h"
|
| #include "media/base/bind_to_current_loop.h"
|
| +#include "media/video/capture/mock_video_capture_event_handler.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -19,6 +20,7 @@
|
| using ::testing::DoAll;
|
| using ::testing::SaveArg;
|
| using media::BindToCurrentLoop;
|
| +using media::MockVideoCaptureEventHandler;
|
|
|
| namespace content {
|
|
|
| @@ -51,10 +53,9 @@
|
| base::Closure destruct_video_capture_callback)
|
| : destruct_video_capture_callback_(
|
| destruct_video_capture_callback) {}
|
| - virtual ~MockVideoCaptureImplManager() {}
|
|
|
| protected:
|
| - virtual VideoCaptureImpl* CreateVideoCaptureImplForTesting(
|
| + virtual VideoCaptureImpl* CreateVideoCaptureImpl(
|
| media::VideoCaptureSessionId id,
|
| VideoCaptureMessageFilter* filter) const OVERRIDE {
|
| return new MockVideoCaptureImpl(id,
|
| @@ -71,8 +72,7 @@
|
| class VideoCaptureImplManagerTest : public ::testing::Test {
|
| public:
|
| VideoCaptureImplManagerTest()
|
| - : manager_(new MockVideoCaptureImplManager(
|
| - BindToCurrentLoop(cleanup_run_loop_.QuitClosure()))) {
|
| + : manager_(BindToCurrentLoop(cleanup_run_loop_.QuitClosure())) {
|
| params_.requested_format = media::VideoCaptureFormat(
|
| gfx::Size(176, 144), 30, media::PIXEL_FORMAT_I420);
|
| child_process_.reset(new ChildProcess());
|
| @@ -89,43 +89,15 @@
|
| base::Unretained(this)));
|
| return;
|
| }
|
| - manager_->video_capture_message_filter()->OnFilterAdded(NULL);
|
| + manager_.video_capture_message_filter()->OnFilterAdded(NULL);
|
| }
|
|
|
| protected:
|
| - MOCK_METHOD2(OnFrameReady,
|
| - void(const scoped_refptr<media::VideoFrame>&,
|
| - const media::VideoCaptureFormat&));
|
| - MOCK_METHOD0(OnStarted, void());
|
| - MOCK_METHOD0(OnStopped, void());
|
| -
|
| - void OnStateUpdate(VideoCaptureState state) {
|
| - switch (state) {
|
| - case VIDEO_CAPTURE_STATE_STARTED:
|
| - OnStarted();
|
| - break;
|
| - case VIDEO_CAPTURE_STATE_STOPPED:
|
| - OnStopped();
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - }
|
| - }
|
| -
|
| - base::Closure StartCapture(const media::VideoCaptureParams& params) {
|
| - return manager_->StartCapture(
|
| - 0, params,
|
| - base::Bind(&VideoCaptureImplManagerTest::OnStateUpdate,
|
| - base::Unretained(this)),
|
| - base::Bind(&VideoCaptureImplManagerTest::OnFrameReady,
|
| - base::Unretained(this)));
|
| - }
|
| -
|
| base::MessageLoop message_loop_;
|
| scoped_ptr<ChildProcess> child_process_;
|
| media::VideoCaptureParams params_;
|
| base::RunLoop cleanup_run_loop_;
|
| - scoped_ptr<MockVideoCaptureImplManager> manager_;
|
| + MockVideoCaptureImplManager manager_;
|
|
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(VideoCaptureImplManagerTest);
|
| @@ -134,18 +106,30 @@
|
| // Multiple clients with the same session id. There is only one
|
| // media::VideoCapture object.
|
| TEST_F(VideoCaptureImplManagerTest, MultipleClients) {
|
| - base::Closure release_cb1 = manager_->UseDevice(0);
|
| - base::Closure release_cb2 = manager_->UseDevice(0);
|
| - base::Closure stop_cb1, stop_cb2;
|
| + scoped_ptr<MockVideoCaptureEventHandler> client1(
|
| + new MockVideoCaptureEventHandler);
|
| + scoped_ptr<MockVideoCaptureEventHandler> client2(
|
| + new MockVideoCaptureEventHandler);
|
| +
|
| + media::VideoCapture* device1 = NULL;
|
| + media::VideoCapture* device2 = NULL;
|
| +
|
| + scoped_ptr<VideoCaptureHandle> handle1;
|
| + scoped_ptr<VideoCaptureHandle> handle2;
|
| {
|
| base::RunLoop run_loop;
|
| base::Closure quit_closure = BindToCurrentLoop(
|
| run_loop.QuitClosure());
|
| - EXPECT_CALL(*this, OnStarted()).WillOnce(
|
| - RunClosure(quit_closure));
|
| - EXPECT_CALL(*this, OnStarted()).RetiresOnSaturation();
|
| - stop_cb1 = StartCapture(params_);
|
| - stop_cb2 = StartCapture(params_);
|
| +
|
| + EXPECT_CALL(*client1, OnStarted(_)).WillOnce(SaveArg<0>(&device1));
|
| + EXPECT_CALL(*client2, OnStarted(_)).WillOnce(
|
| + DoAll(
|
| + SaveArg<0>(&device2),
|
| + RunClosure(quit_closure)));
|
| + handle1 = manager_.UseDevice(1);
|
| + handle2 = manager_.UseDevice(1);
|
| + handle1->StartCapture(client1.get(), params_);
|
| + handle2->StartCapture(client2.get(), params_);
|
| FakeChannelSetup();
|
| run_loop.Run();
|
| }
|
| @@ -154,22 +138,20 @@
|
| base::RunLoop run_loop;
|
| base::Closure quit_closure = BindToCurrentLoop(
|
| run_loop.QuitClosure());
|
| - EXPECT_CALL(*this, OnStopped()).WillOnce(
|
| +
|
| + EXPECT_CALL(*client1, OnStopped(_));
|
| + EXPECT_CALL(*client1, OnRemoved(_));
|
| + EXPECT_CALL(*client2, OnStopped(_));
|
| + EXPECT_CALL(*client2, OnRemoved(_)).WillOnce(
|
| RunClosure(quit_closure));
|
| - EXPECT_CALL(*this, OnStopped()).RetiresOnSaturation();
|
| - stop_cb1.Run();
|
| - stop_cb2.Run();
|
| + handle1->StopCapture(client1.get());
|
| + handle2->StopCapture(client2.get());
|
| run_loop.Run();
|
| }
|
| + EXPECT_TRUE(device1 == device2);
|
|
|
| - release_cb1.Run();
|
| - release_cb2.Run();
|
| - cleanup_run_loop_.Run();
|
| -}
|
| -
|
| -TEST_F(VideoCaptureImplManagerTest, NoLeak) {
|
| - manager_->UseDevice(0).Reset();
|
| - manager_.reset();
|
| + handle1.reset();
|
| + handle2.reset();
|
| cleanup_run_loop_.Run();
|
| }
|
|
|
|
|