| Index: content/renderer/media/media_stream_video_track_unittest.cc
|
| diff --git a/content/renderer/media/media_stream_video_track_unittest.cc b/content/renderer/media/media_stream_video_track_unittest.cc
|
| index 7e6bb3b1bd29b3d2698539de1b266be7958b3230..410207c8ae12e455087f3311263ddfaf1421ae6e 100644
|
| --- a/content/renderer/media/media_stream_video_track_unittest.cc
|
| +++ b/content/renderer/media/media_stream_video_track_unittest.cc
|
| @@ -37,7 +37,10 @@ class MediaStreamVideoTrackTest : public ::testing::Test {
|
| MediaStreamVideoTrackTest()
|
| : child_process_(new ChildProcess()),
|
| mock_source_(nullptr),
|
| - source_started_(false) {}
|
| + source_started_(false) {
|
| + scoped_feature_list_.InitAndDisableFeature(
|
| + features::kMediaStreamOldVideoConstraints);
|
| + }
|
|
|
| ~MediaStreamVideoTrackTest() override {}
|
|
|
| @@ -120,6 +123,7 @@ class MediaStreamVideoTrackTest : public ::testing::Test {
|
| // |mock_source_| is owned by |webkit_source_|.
|
| MockMediaStreamVideoSource* mock_source_;
|
| bool source_started_;
|
| + base::test::ScopedFeatureList scoped_feature_list_;
|
| };
|
|
|
| TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
|
| @@ -260,12 +264,8 @@ TEST_F(MediaStreamVideoTrackTest, StopLastTrack) {
|
| sink2.DisconnectFromTrack();
|
| }
|
|
|
| -// TODO(guidou): Remove this test. http://crbug.com/706408
|
| -TEST_F(MediaStreamVideoTrackTest,
|
| - CheckTrackRequestsFrameOldConstraintsOldConstraints) {
|
| - base::test::ScopedFeatureList scoped_feature_list;
|
| - scoped_feature_list.InitAndEnableFeature(
|
| - features::kMediaStreamOldVideoConstraints);
|
| +TEST_F(MediaStreamVideoTrackTest, CheckTrackRequestsFrame) {
|
| + InitializeSource();
|
| UpdateVideoSourceToRespondToRequestRefreshFrame();
|
| blink::WebMediaStreamTrack track = CreateTrack();
|
|
|
| @@ -281,11 +281,228 @@ TEST_F(MediaStreamVideoTrackTest,
|
| sink.DisconnectFromTrack();
|
| }
|
|
|
| -TEST_F(MediaStreamVideoTrackTest, CheckTrackRequestsFrame) {
|
| - base::test::ScopedFeatureList scoped_feature_list;
|
| - scoped_feature_list.InitAndDisableFeature(
|
| - features::kMediaStreamOldVideoConstraints);
|
| +TEST_F(MediaStreamVideoTrackTest, GetSettings) {
|
| + InitializeSource();
|
| + blink::WebMediaStreamTrack track = CreateTrack();
|
| + MediaStreamVideoTrack* const native_track =
|
| + MediaStreamVideoTrack::GetVideoTrack(track);
|
| + blink::WebMediaStreamTrack::Settings settings;
|
| + native_track->getSettings(settings);
|
| + // These values come straight from the mock video track implementation.
|
| + EXPECT_EQ(640, settings.width);
|
| + EXPECT_EQ(480, settings.height);
|
| + EXPECT_EQ(30.0, settings.frameRate);
|
| + EXPECT_EQ(blink::WebMediaStreamTrack::FacingMode::None, settings.facingMode);
|
| +}
|
| +
|
| +// TODO(guidou): Remove this test. http://crbug.com/706408
|
| +class MediaStreamVideoTrackOldConstraintsTest : public ::testing::Test {
|
| + public:
|
| + MediaStreamVideoTrackOldConstraintsTest()
|
| + : child_process_(new ChildProcess()),
|
| + mock_source_(nullptr),
|
| + source_started_(false) {
|
| + scoped_feature_list_.InitAndEnableFeature(
|
| + features::kMediaStreamOldVideoConstraints);
|
| + }
|
| +
|
| + ~MediaStreamVideoTrackOldConstraintsTest() override {}
|
| +
|
| + void TearDown() override {
|
| + blink_source_.reset();
|
| + blink::WebHeap::collectAllGarbageForTesting();
|
| + }
|
| +
|
| + void DeliverVideoFrameAndWaitForRenderer(MockMediaStreamVideoSink* sink) {
|
| + base::RunLoop run_loop;
|
| + base::Closure quit_closure = run_loop.QuitClosure();
|
| + EXPECT_CALL(*sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure));
|
| + const scoped_refptr<media::VideoFrame> frame =
|
| + media::VideoFrame::CreateColorFrame(
|
| + gfx::Size(MediaStreamVideoSource::kDefaultWidth,
|
| + MediaStreamVideoSource::kDefaultHeight),
|
| + kColorValue, kColorValue, kColorValue, base::TimeDelta());
|
| + mock_source()->DeliverVideoFrame(frame);
|
| + run_loop.Run();
|
| + }
|
| +
|
| + protected:
|
| + base::MessageLoop* io_message_loop() const {
|
| + return child_process_->io_message_loop();
|
| + }
|
| +
|
| + void InitializeSource() {
|
| + blink_source_.reset();
|
| + mock_source_ = IsOldVideoConstraints()
|
| + ? new MockMediaStreamVideoSource(false)
|
| + : new MockMediaStreamVideoSource(
|
| + media::VideoCaptureFormat(
|
| + gfx::Size(kMockSourceWidth, kMockSourceHeight),
|
| + 30.0, media::PIXEL_FORMAT_I420),
|
| + false);
|
| + blink_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
|
| + blink::WebMediaStreamSource::TypeVideo,
|
| + blink::WebString::fromASCII("dummy_source_name"),
|
| + false /* remote */);
|
| + blink_source_.setExtraData(mock_source_);
|
| + }
|
| +
|
| + // Create a track that's associated with |mock_source_|.
|
| + blink::WebMediaStreamTrack CreateTrack() {
|
| + const bool enabled = true;
|
| + blink::WebMediaStreamTrack track = MediaStreamVideoTrack::CreateVideoTrack(
|
| + mock_source_, MediaStreamSource::ConstraintsCallback(), enabled);
|
| + if (!source_started_) {
|
| + mock_source_->StartMockedSource();
|
| + source_started_ = true;
|
| + }
|
| + return track;
|
| + }
|
| +
|
| + void UpdateVideoSourceToRespondToRequestRefreshFrame() {
|
| + blink_source_.reset();
|
| + mock_source_ = IsOldVideoConstraints()
|
| + ? new MockMediaStreamVideoSource(false, true)
|
| + : new MockMediaStreamVideoSource(
|
| + media::VideoCaptureFormat(
|
| + gfx::Size(kMockSourceWidth, kMockSourceHeight),
|
| + 30.0, media::PIXEL_FORMAT_I420),
|
| + true);
|
| + blink_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
|
| + blink::WebMediaStreamSource::TypeVideo,
|
| + blink::WebString::fromASCII("dummy_source_name"),
|
| + false /* remote */);
|
| + blink_source_.setExtraData(mock_source_);
|
| + }
|
| +
|
| + MockMediaStreamVideoSource* mock_source() { return mock_source_; }
|
| + const blink::WebMediaStreamSource& blink_source() const {
|
| + return blink_source_;
|
| + }
|
| +
|
| + private:
|
| + const base::MessageLoopForUI message_loop_;
|
| + const std::unique_ptr<ChildProcess> child_process_;
|
| + blink::WebMediaStreamSource blink_source_;
|
| + // |mock_source_| is owned by |webkit_source_|.
|
| + MockMediaStreamVideoSource* mock_source_;
|
| + bool source_started_;
|
| + base::test::ScopedFeatureList scoped_feature_list_;
|
| +};
|
| +
|
| +TEST_F(MediaStreamVideoTrackOldConstraintsTest, AddAndRemoveSink) {
|
| + InitializeSource();
|
| + MockMediaStreamVideoSink sink;
|
| + blink::WebMediaStreamTrack track = CreateTrack();
|
| + sink.ConnectToTrack(track);
|
| +
|
| + DeliverVideoFrameAndWaitForRenderer(&sink);
|
| + EXPECT_EQ(1, sink.number_of_frames());
|
| +
|
| + DeliverVideoFrameAndWaitForRenderer(&sink);
|
| +
|
| + sink.DisconnectFromTrack();
|
| +
|
| + scoped_refptr<media::VideoFrame> frame = media::VideoFrame::CreateBlackFrame(
|
| + gfx::Size(MediaStreamVideoSource::kDefaultWidth,
|
| + MediaStreamVideoSource::kDefaultHeight));
|
| + mock_source()->DeliverVideoFrame(frame);
|
| + // Wait for the IO thread to complete delivering frames.
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(2, sink.number_of_frames());
|
| +}
|
| +
|
| +// Checks that the callback given to the track is reset on the right thread.
|
| +TEST_F(MediaStreamVideoTrackOldConstraintsTest, ResetCallbackOnThread) {
|
| + InitializeSource();
|
| + MockMediaStreamVideoSink sink;
|
| + blink::WebMediaStreamTrack track = CreateTrack();
|
| +
|
| + base::RunLoop run_loop;
|
| + bool correct = false;
|
| + sink.ConnectToTrackWithCallback(
|
| + track, base::Bind(&CheckThreadVideoFrameReceiver,
|
| + base::Owned(new CheckThreadHelper(
|
| + run_loop.QuitClosure(), &correct))));
|
| + sink.DisconnectFromTrack();
|
| + run_loop.Run();
|
| + EXPECT_TRUE(correct) << "Not called on correct thread.";
|
| +}
|
| +
|
| +TEST_F(MediaStreamVideoTrackOldConstraintsTest, SetEnabled) {
|
| InitializeSource();
|
| + MockMediaStreamVideoSink sink;
|
| + blink::WebMediaStreamTrack track = CreateTrack();
|
| + sink.ConnectToTrack(track);
|
| +
|
| + MediaStreamVideoTrack* video_track =
|
| + MediaStreamVideoTrack::GetVideoTrack(track);
|
| +
|
| + DeliverVideoFrameAndWaitForRenderer(&sink);
|
| + EXPECT_EQ(1, sink.number_of_frames());
|
| + EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
|
| +
|
| + video_track->SetEnabled(false);
|
| + EXPECT_FALSE(sink.enabled());
|
| +
|
| + DeliverVideoFrameAndWaitForRenderer(&sink);
|
| + EXPECT_EQ(2, sink.number_of_frames());
|
| + EXPECT_EQ(kBlackValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
|
| +
|
| + video_track->SetEnabled(true);
|
| + EXPECT_TRUE(sink.enabled());
|
| + DeliverVideoFrameAndWaitForRenderer(&sink);
|
| + EXPECT_EQ(3, sink.number_of_frames());
|
| + EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
|
| + sink.DisconnectFromTrack();
|
| +}
|
| +
|
| +TEST_F(MediaStreamVideoTrackOldConstraintsTest, SourceStopped) {
|
| + InitializeSource();
|
| + MockMediaStreamVideoSink sink;
|
| + blink::WebMediaStreamTrack track = CreateTrack();
|
| + sink.ConnectToTrack(track);
|
| + EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
|
| +
|
| + mock_source()->StopSource();
|
| + EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state());
|
| + sink.DisconnectFromTrack();
|
| +}
|
| +
|
| +TEST_F(MediaStreamVideoTrackOldConstraintsTest, StopLastTrack) {
|
| + InitializeSource();
|
| + MockMediaStreamVideoSink sink1;
|
| + blink::WebMediaStreamTrack track1 = CreateTrack();
|
| + sink1.ConnectToTrack(track1);
|
| + EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink1.state());
|
| +
|
| + EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
|
| + blink_source().getReadyState());
|
| +
|
| + MockMediaStreamVideoSink sink2;
|
| + blink::WebMediaStreamTrack track2 = CreateTrack();
|
| + sink2.ConnectToTrack(track2);
|
| + EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink2.state());
|
| +
|
| + MediaStreamVideoTrack* const native_track1 =
|
| + MediaStreamVideoTrack::GetVideoTrack(track1);
|
| + native_track1->Stop();
|
| + EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink1.state());
|
| + EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
|
| + blink_source().getReadyState());
|
| + sink1.DisconnectFromTrack();
|
| +
|
| + MediaStreamVideoTrack* const native_track2 =
|
| + MediaStreamVideoTrack::GetVideoTrack(track2);
|
| + native_track2->Stop();
|
| + EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink2.state());
|
| + EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
|
| + blink_source().getReadyState());
|
| + sink2.DisconnectFromTrack();
|
| +}
|
| +
|
| +TEST_F(MediaStreamVideoTrackOldConstraintsTest,
|
| + CheckTrackRequestsFrameOldConstraintsOldConstraints) {
|
| UpdateVideoSourceToRespondToRequestRefreshFrame();
|
| blink::WebMediaStreamTrack track = CreateTrack();
|
|
|
| @@ -301,28 +518,7 @@ TEST_F(MediaStreamVideoTrackTest, CheckTrackRequestsFrame) {
|
| sink.DisconnectFromTrack();
|
| }
|
|
|
| -// TODO(guidou): Remove this test. http://crbug.com/706408
|
| -TEST_F(MediaStreamVideoTrackTest, GetSettingsOldConstraints) {
|
| - base::test::ScopedFeatureList scoped_feature_list;
|
| - scoped_feature_list.InitAndEnableFeature(
|
| - features::kMediaStreamOldVideoConstraints);
|
| - InitializeSource();
|
| - blink::WebMediaStreamTrack track = CreateTrack();
|
| - MediaStreamVideoTrack* const native_track =
|
| - MediaStreamVideoTrack::GetVideoTrack(track);
|
| - blink::WebMediaStreamTrack::Settings settings;
|
| - native_track->getSettings(settings);
|
| - // These values come straight from the mock video track implementation.
|
| - EXPECT_EQ(640, settings.width);
|
| - EXPECT_EQ(480, settings.height);
|
| - EXPECT_EQ(30.0, settings.frameRate);
|
| - EXPECT_EQ(blink::WebMediaStreamTrack::FacingMode::None, settings.facingMode);
|
| -}
|
| -
|
| -TEST_F(MediaStreamVideoTrackTest, GetSettings) {
|
| - base::test::ScopedFeatureList scoped_feature_list;
|
| - scoped_feature_list.InitAndDisableFeature(
|
| - features::kMediaStreamOldVideoConstraints);
|
| +TEST_F(MediaStreamVideoTrackOldConstraintsTest, GetSettingsOldConstraints) {
|
| InitializeSource();
|
| blink::WebMediaStreamTrack track = CreateTrack();
|
| MediaStreamVideoTrack* const native_track =
|
|
|