| Index: content/renderer/media/video_capture_message_filter_unittest.cc
|
| diff --git a/content/renderer/media/video_capture_message_filter_unittest.cc b/content/renderer/media/video_capture_message_filter_unittest.cc
|
| index 3dec39d5de3ecd7035f81f86a75e611df2b555c4..069673fb818f5aeb75699cefd316904f05c1b999 100644
|
| --- a/content/renderer/media/video_capture_message_filter_unittest.cc
|
| +++ b/content/renderer/media/video_capture_message_filter_unittest.cc
|
| @@ -3,125 +3,68 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/memory/shared_memory.h"
|
| -#include "base/message_loop/message_loop.h"
|
| #include "content/common/media/video_capture_messages.h"
|
| #include "content/renderer/media/video_capture_message_filter.h"
|
| +#include "ipc/ipc_test_sink.h"
|
| +#include "media/video/capture/video_capture_types.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +using ::testing::_;
|
| +using ::testing::AllOf;
|
| +using ::testing::AnyNumber;
|
| +using ::testing::Field;
|
| +using ::testing::Mock;
|
| +using ::testing::Return;
|
| +using ::testing::StrictMock;
|
| +
|
| namespace content {
|
| namespace {
|
|
|
| class MockVideoCaptureDelegate : public VideoCaptureMessageFilter::Delegate {
|
| public:
|
| - MockVideoCaptureDelegate() {
|
| - Reset();
|
| - device_id_received_ = false;
|
| - device_id_ = 0;
|
| - }
|
| -
|
| - virtual void OnBufferCreated(base::SharedMemoryHandle handle,
|
| - int length, int buffer_id) OVERRIDE {
|
| - buffer_created_ = true;
|
| - handle_ = handle;
|
| - }
|
| -
|
| - // Called when a video frame buffer is received from the browser process.
|
| - virtual void OnBufferReceived(int buffer_id, base::Time timestamp) OVERRIDE {
|
| - buffer_received_ = true;
|
| - buffer_id_ = buffer_id;
|
| - timestamp_ = timestamp;
|
| - }
|
| -
|
| - virtual void OnStateChanged(VideoCaptureState state) OVERRIDE {
|
| - state_changed_received_ = true;
|
| - state_ = state;
|
| - }
|
| -
|
| - virtual void OnDeviceInfoReceived(
|
| - const media::VideoCaptureParams& params) OVERRIDE {
|
| - device_info_received_ = true;
|
| - params_.width = params.width;
|
| - params_.height = params.height;
|
| - params_.frame_rate = params.frame_rate;
|
| - }
|
| + MockVideoCaptureDelegate() : device_id_(0) {}
|
| +
|
| + // VideoCaptureMessageFilter::Delegate implementation.
|
| + MOCK_METHOD3(OnBufferCreated, void(base::SharedMemoryHandle handle,
|
| + int length,
|
| + int buffer_id));
|
| + MOCK_METHOD1(OnBufferDestroyed, void(int buffer_id));
|
| + MOCK_METHOD3(OnBufferReceived, void(int buffer_id,
|
| + base::Time timestamp,
|
| + const media::VideoCaptureFormat& format));
|
| + MOCK_METHOD1(OnStateChanged, void(VideoCaptureState state));
|
|
|
| virtual void OnDelegateAdded(int32 device_id) OVERRIDE {
|
| - device_id_received_ = true;
|
| + ASSERT_TRUE(device_id != 0);
|
| + ASSERT_TRUE(device_id_ == 0);
|
| device_id_ = device_id;
|
| }
|
|
|
| - void Reset() {
|
| - buffer_created_ = false;
|
| - handle_ = base::SharedMemory::NULLHandle();
|
| -
|
| - buffer_received_ = false;
|
| - buffer_id_ = -1;
|
| - timestamp_ = base::Time();
|
| -
|
| - state_changed_received_ = false;
|
| - state_ = VIDEO_CAPTURE_STATE_ERROR;
|
| -
|
| - device_info_received_ = false;
|
| - params_.width = 0;
|
| - params_.height = 0;
|
| - params_.frame_rate = 0;
|
| - }
|
| -
|
| - bool buffer_created() { return buffer_created_; }
|
| - base::SharedMemoryHandle received_buffer_handle() { return handle_; }
|
| -
|
| - bool buffer_received() { return buffer_received_; }
|
| - int received_buffer_id() { return buffer_id_; }
|
| - base::Time received_buffer_ts() { return timestamp_; }
|
| -
|
| - bool state_changed_received() { return state_changed_received_; }
|
| - VideoCaptureState state() { return state_; }
|
| -
|
| - bool device_info_receive() { return device_info_received_; }
|
| - const media::VideoCaptureParams& received_device_info() { return params_; }
|
| -
|
| - int32 device_id() { return device_id_; }
|
| + int device_id() { return device_id_; }
|
|
|
| private:
|
| - bool buffer_created_;
|
| - base::SharedMemoryHandle handle_;
|
| -
|
| - bool buffer_received_;
|
| - int buffer_id_;
|
| - base::Time timestamp_;
|
| -
|
| - bool state_changed_received_;
|
| - VideoCaptureState state_;
|
| -
|
| - bool device_info_received_;
|
| - media::VideoCaptureParams params_;
|
| -
|
| - bool device_id_received_;
|
| - int32 device_id_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MockVideoCaptureDelegate);
|
| + int device_id_;
|
| };
|
|
|
| } // namespace
|
|
|
| TEST(VideoCaptureMessageFilterTest, Basic) {
|
| - base::MessageLoop message_loop(base::MessageLoop::TYPE_IO);
|
| -
|
| scoped_refptr<VideoCaptureMessageFilter> filter(
|
| new VideoCaptureMessageFilter());
|
| - filter->channel_ = reinterpret_cast<IPC::Channel*>(1);
|
|
|
| + IPC::TestSink channel;
|
| + filter->OnFilterAdded(&channel);
|
| MockVideoCaptureDelegate delegate;
|
| filter->AddDelegate(&delegate);
|
| + ASSERT_EQ(1, delegate.device_id());
|
|
|
| // VideoCaptureMsg_StateChanged
|
| - EXPECT_FALSE(delegate.state_changed_received());
|
| + EXPECT_CALL(delegate, OnStateChanged(VIDEO_CAPTURE_STATE_STARTED));
|
| filter->OnMessageReceived(
|
| VideoCaptureMsg_StateChanged(delegate.device_id(),
|
| VIDEO_CAPTURE_STATE_STARTED));
|
| - EXPECT_TRUE(delegate.state_changed_received());
|
| - EXPECT_TRUE(VIDEO_CAPTURE_STATE_STARTED == delegate.state());
|
| - delegate.Reset();
|
| + Mock::VerifyAndClearExpectations(&delegate);
|
|
|
| // VideoCaptureMsg_NewBuffer
|
| const base::SharedMemoryHandle handle =
|
| @@ -130,92 +73,70 @@ TEST(VideoCaptureMessageFilterTest, Basic) {
|
| #else
|
| base::SharedMemoryHandle(10, true);
|
| #endif
|
| - EXPECT_FALSE(delegate.buffer_created());
|
| + EXPECT_CALL(delegate, OnBufferCreated(handle, 100, 1));
|
| filter->OnMessageReceived(VideoCaptureMsg_NewBuffer(
|
| - delegate.device_id(), handle, 1, 1));
|
| - EXPECT_TRUE(delegate.buffer_created());
|
| - EXPECT_EQ(handle, delegate.received_buffer_handle());
|
| - delegate.Reset();
|
| + delegate.device_id(), handle, 100, 1));
|
| + Mock::VerifyAndClearExpectations(&delegate);
|
|
|
| // VideoCaptureMsg_BufferReady
|
| - int buffer_id = 1;
|
| + int buffer_id = 22;
|
| base::Time timestamp = base::Time::FromInternalValue(1);
|
|
|
| - EXPECT_FALSE(delegate.buffer_received());
|
| + media::VideoCaptureFormat format(234, 512, 30,
|
| + media::ConstantResolutionVideoCaptureDevice);
|
| + EXPECT_CALL(delegate, OnBufferReceived(buffer_id, timestamp,
|
| + AllOf(Field(&media::VideoCaptureFormat::width, 234),
|
| + Field(&media::VideoCaptureFormat::height, 512),
|
| + Field(&media::VideoCaptureFormat::frame_rate, 30))));
|
| filter->OnMessageReceived(VideoCaptureMsg_BufferReady(
|
| - delegate.device_id(), buffer_id, timestamp));
|
| - EXPECT_TRUE(delegate.buffer_received());
|
| - EXPECT_EQ(buffer_id, delegate.received_buffer_id());
|
| - EXPECT_TRUE(timestamp == delegate.received_buffer_ts());
|
| - delegate.Reset();
|
| -
|
| - // VideoCaptureMsg_DeviceInfo
|
| - media::VideoCaptureParams params;
|
| - params.width = 320;
|
| - params.height = 240;
|
| - params.frame_rate = 30;
|
| -
|
| - EXPECT_FALSE(delegate.device_info_receive());
|
| - filter->OnMessageReceived(VideoCaptureMsg_DeviceInfo(
|
| - delegate.device_id(), params));
|
| - EXPECT_TRUE(delegate.device_info_receive());
|
| - EXPECT_EQ(params.width, delegate.received_device_info().width);
|
| - EXPECT_EQ(params.height, delegate.received_device_info().height);
|
| - EXPECT_EQ(params.frame_rate,
|
| - delegate.received_device_info().frame_rate);
|
| - delegate.Reset();
|
| -
|
| - message_loop.RunUntilIdle();
|
| + delegate.device_id(), buffer_id, timestamp, format));
|
| + Mock::VerifyAndClearExpectations(&delegate);
|
| +
|
| + // VideoCaptureMsg_FreeBuffer
|
| + EXPECT_CALL(delegate, OnBufferDestroyed(buffer_id));
|
| + filter->OnMessageReceived(VideoCaptureMsg_FreeBuffer(
|
| + delegate.device_id(), buffer_id));
|
| + Mock::VerifyAndClearExpectations(&delegate);
|
| }
|
|
|
| TEST(VideoCaptureMessageFilterTest, Delegates) {
|
| - base::MessageLoop message_loop(base::MessageLoop::TYPE_IO);
|
| -
|
| scoped_refptr<VideoCaptureMessageFilter> filter(
|
| new VideoCaptureMessageFilter());
|
| - filter->channel_ = reinterpret_cast<IPC::Channel*>(1);
|
|
|
| - MockVideoCaptureDelegate delegate1;
|
| - MockVideoCaptureDelegate delegate2;
|
| + IPC::TestSink channel;
|
| + filter->OnFilterAdded(&channel);
|
| +
|
| + StrictMock<MockVideoCaptureDelegate> delegate1;
|
| + StrictMock<MockVideoCaptureDelegate> delegate2;
|
|
|
| filter->AddDelegate(&delegate1);
|
| filter->AddDelegate(&delegate2);
|
| + ASSERT_EQ(1, delegate1.device_id());
|
| + ASSERT_EQ(2, delegate2.device_id());
|
|
|
| // Send an IPC message. Make sure the correct delegate gets called.
|
| - EXPECT_FALSE(delegate1.state_changed_received());
|
| - EXPECT_FALSE(delegate2.state_changed_received());
|
| + EXPECT_CALL(delegate1, OnStateChanged(VIDEO_CAPTURE_STATE_STARTED));
|
| filter->OnMessageReceived(
|
| VideoCaptureMsg_StateChanged(delegate1.device_id(),
|
| VIDEO_CAPTURE_STATE_STARTED));
|
| - EXPECT_TRUE(delegate1.state_changed_received());
|
| - EXPECT_FALSE(delegate2.state_changed_received());
|
| - delegate1.Reset();
|
| + Mock::VerifyAndClearExpectations(&delegate1);
|
|
|
| - EXPECT_FALSE(delegate1.state_changed_received());
|
| - EXPECT_FALSE(delegate2.state_changed_received());
|
| + EXPECT_CALL(delegate2, OnStateChanged(VIDEO_CAPTURE_STATE_STARTED));
|
| filter->OnMessageReceived(
|
| VideoCaptureMsg_StateChanged(delegate2.device_id(),
|
| VIDEO_CAPTURE_STATE_STARTED));
|
| - EXPECT_FALSE(delegate1.state_changed_received());
|
| - EXPECT_TRUE(delegate2.state_changed_received());
|
| - delegate2.Reset();
|
| + Mock::VerifyAndClearExpectations(&delegate2);
|
|
|
| // Remove the delegates. Make sure they won't get called.
|
| filter->RemoveDelegate(&delegate1);
|
| - EXPECT_FALSE(delegate1.state_changed_received());
|
| filter->OnMessageReceived(
|
| VideoCaptureMsg_StateChanged(delegate1.device_id(),
|
| - VIDEO_CAPTURE_STATE_STARTED));
|
| - EXPECT_FALSE(delegate1.state_changed_received());
|
| + VIDEO_CAPTURE_STATE_ENDED));
|
|
|
| filter->RemoveDelegate(&delegate2);
|
| - EXPECT_FALSE(delegate2.state_changed_received());
|
| filter->OnMessageReceived(
|
| VideoCaptureMsg_StateChanged(delegate2.device_id(),
|
| - VIDEO_CAPTURE_STATE_STARTED));
|
| - EXPECT_FALSE(delegate2.state_changed_received());
|
| -
|
| - message_loop.RunUntilIdle();
|
| + VIDEO_CAPTURE_STATE_ENDED));
|
| }
|
|
|
| } // namespace content
|
|
|