| Index: content/renderer/media/media_stream_video_capture_source_unittest.cc
|
| diff --git a/content/renderer/media/media_stream_video_capture_source_unittest.cc b/content/renderer/media/media_stream_video_capture_source_unittest.cc
|
| index 65deacbb38234be969257773541fbea70b37509a..fca4562a93d1d8f634be490063258ce1d024fa5e 100644
|
| --- a/content/renderer/media/media_stream_video_capture_source_unittest.cc
|
| +++ b/content/renderer/media/media_stream_video_capture_source_unittest.cc
|
| @@ -3,12 +3,16 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/bind.h"
|
| +#include "base/callback_helpers.h"
|
| #include "base/message_loop/message_loop.h"
|
| +#include "base/run_loop.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "content/child/child_process.h"
|
| +#include "content/public/renderer/media_stream_video_sink.h"
|
| #include "content/renderer/media/media_stream_video_capturer_source.h"
|
| #include "content/renderer/media/media_stream_video_track.h"
|
| #include "content/renderer/media/mock_media_constraint_factory.h"
|
| +#include "media/base/bind_to_current_loop.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| @@ -131,4 +135,66 @@ TEST_F(MediaStreamVideoCapturerSourceTest, Ended) {
|
| webkit_source_.readyState());
|
| }
|
|
|
| +class FakeMediaStreamVideoSink : public MediaStreamVideoSink {
|
| + public:
|
| + FakeMediaStreamVideoSink(base::TimeTicks* capture_time,
|
| + base::Closure got_frame_cb)
|
| + : capture_time_(capture_time),
|
| + got_frame_cb_(got_frame_cb) {
|
| + }
|
| +
|
| + void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame,
|
| + const media::VideoCaptureFormat& format,
|
| + const base::TimeTicks& capture_time) {
|
| + *capture_time_ = capture_time;
|
| + base::ResetAndReturn(&got_frame_cb_).Run();
|
| + }
|
| +
|
| + private:
|
| + base::TimeTicks* capture_time_;
|
| + base::Closure got_frame_cb_;
|
| +};
|
| +
|
| +TEST_F(MediaStreamVideoCapturerSourceTest, CaptureTime) {
|
| + StreamDeviceInfo device_info;
|
| + device_info.device.type = MEDIA_DESKTOP_VIDEO_CAPTURE;
|
| + InitWithDeviceInfo(device_info);
|
| +
|
| + VideoCaptureDeliverFrameCB deliver_frame_cb;
|
| + VideoCapturerDelegate::RunningCallback running_cb;
|
| +
|
| + EXPECT_CALL(mock_delegate(), StartCapture(
|
| + testing::_,
|
| + testing::_,
|
| + testing::_))
|
| + .Times(1)
|
| + .WillOnce(testing::DoAll(testing::SaveArg<1>(&deliver_frame_cb),
|
| + testing::SaveArg<2>(&running_cb)));
|
| + EXPECT_CALL(mock_delegate(), StopCapture());
|
| + blink::WebMediaStreamTrack track = StartSource();
|
| + running_cb.Run(true);
|
| +
|
| + base::RunLoop run_loop;
|
| + base::TimeTicks reference_capture_time =
|
| + base::TimeTicks::FromInternalValue(60013);
|
| + base::TimeTicks capture_time;
|
| + FakeMediaStreamVideoSink fake_sink(
|
| + &capture_time,
|
| + media::BindToCurrentLoop(run_loop.QuitClosure()));
|
| + FakeMediaStreamVideoSink::AddToVideoTrack(
|
| + &fake_sink,
|
| + base::Bind(&FakeMediaStreamVideoSink::OnVideoFrame,
|
| + base::Unretained(&fake_sink)),
|
| + track);
|
| + child_process_->io_message_loop()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(deliver_frame_cb,
|
| + media::VideoFrame::CreateBlackFrame(gfx::Size(2, 2)),
|
| + media::VideoCaptureFormat(),
|
| + reference_capture_time));
|
| + run_loop.Run();
|
| + FakeMediaStreamVideoSink::RemoveFromVideoTrack(&fake_sink, track);
|
| + EXPECT_EQ(reference_capture_time, capture_time);
|
| +}
|
| +
|
| } // namespace content
|
|
|