| Index: content/renderer/media/media_stream_video_source_unittest.cc
|
| diff --git a/content/renderer/media/media_stream_video_source_unittest.cc b/content/renderer/media/media_stream_video_source_unittest.cc
|
| index 28816f1641edff2a89bcd63bbd764a98a85e9a9f..dfd0a4bc5089fc2f91b03bf03524281ec6e4ceec 100644
|
| --- a/content/renderer/media/media_stream_video_source_unittest.cc
|
| +++ b/content/renderer/media/media_stream_video_source_unittest.cc
|
| @@ -198,6 +198,10 @@ class MediaStreamVideoSourceTest
|
| MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2);
|
| }
|
|
|
| + void SetSourceSupportedFormats(const media::VideoCaptureFormats& formats) {
|
| + mock_source_->SetSupportedFormats(formats);
|
| + }
|
| +
|
| void ReleaseTrackAndSourceOnAddTrackCallback(
|
| const blink::WebMediaStreamTrack& track_to_release) {
|
| track_to_release_ = track_to_release;
|
| @@ -738,18 +742,25 @@ TEST_F(MediaStreamVideoSourceTest, Use0FpsSupportedFormat) {
|
| MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
|
| }
|
|
|
| -// Test that a source producing no frames calls back the MSVCS to tell so, and
|
| -// this in turn tells the Track attached. Then start passing frames, and check
|
| +// Test that a source producing no frames change the source readyState to muted.
|
| // that in a reasonable time frame the muted state turns to false.
|
| TEST_F(MediaStreamVideoSourceTest, MutedSource) {
|
| + // Setup the source for support a frame rate of 2000fps in order to test
|
| + // the muted event faster. This is since the frame monitoring uses
|
| + // PostDelayedTask that is dependent on the source frame rate.
|
| + media::VideoCaptureFormats formats;
|
| + formats.push_back(media::VideoCaptureFormat(
|
| + gfx::Size(640, 480), 2000, media::PIXEL_FORMAT_I420));
|
| + SetSourceSupportedFormats(formats);
|
| +
|
| MockMediaConstraintFactory factory;
|
| blink::WebMediaStreamTrack track =
|
| CreateTrackAndStartSource(factory.CreateWebMediaConstraints(),
|
| - 640, 480, 30);
|
| -
|
| + 640, 480, 2000);
|
| MockMediaStreamVideoSink sink;
|
| MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track);
|
| - EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), false);
|
| + EXPECT_EQ(track.source().readyState(),
|
| + blink::WebMediaStreamSource::ReadyStateLive);
|
|
|
| base::RunLoop run_loop;
|
| base::Closure quit_closure = run_loop.QuitClosure();
|
| @@ -758,67 +769,22 @@ TEST_F(MediaStreamVideoSourceTest, MutedSource) {
|
| .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
|
| run_loop.Run();
|
| EXPECT_EQ(muted_state, true);
|
| - // TODO(mcasas): When added, check |track|'s (WebMediaStreamTrack) Muted
|
| - // attribute, should be true. In the meantime, check the MediaStreamTrack's.
|
| - EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), true);
|
| -
|
| - EXPECT_CALL(*mock_source(), DoSetMutedState(_))
|
| - .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
|
| - // Mock frame delivery happens asynchronously, not according to the configured
|
| - // frame rate, potentially many frames can pass before the muted state is
|
| - // flipped. |kMaxFrameCount| is used as a reasonable high bound of this value.
|
| - const int kMaxFrameCount = 10000;
|
| - int i = 0;
|
| - while (muted_state != false || ++i > kMaxFrameCount)
|
| - DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
|
| - EXPECT_EQ(muted_state, false);
|
| - EXPECT_LT(i, kMaxFrameCount);
|
| - EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), false);
|
|
|
| - MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
|
| -}
|
| + EXPECT_EQ(track.source().readyState(),
|
| + blink::WebMediaStreamSource::ReadyStateMuted);
|
|
|
| -// Test that a source producing no frames calls back the MSVCS to tell so, and
|
| -// this in turn tells all the Tracks attached.
|
| -TEST_F(MediaStreamVideoSourceTest, MutedSourceWithTwoTracks) {
|
| - MockMediaConstraintFactory factory1;
|
| - blink::WebMediaStreamTrack track1 =
|
| - CreateTrackAndStartSource(factory1.CreateWebMediaConstraints(),
|
| - MediaStreamVideoSource::kDefaultWidth,
|
| - MediaStreamVideoSource::kDefaultHeight,
|
| - 30);
|
| -
|
| - MockMediaConstraintFactory factory2;
|
| - factory2.AddMandatory(MediaStreamVideoSource::kMaxFrameRate, 15);
|
| - blink::WebMediaStreamTrack track2 = CreateTrack(
|
| - "123", factory2.CreateWebMediaConstraints());
|
| - EXPECT_EQ(0, NumberOfFailedConstraintsCallbacks());
|
| -
|
| - MockMediaStreamVideoSink sink1;
|
| - MediaStreamVideoSink::AddToVideoTrack(&sink1, sink1.GetDeliverFrameCB(),
|
| - track1);
|
| - EXPECT_EQ(MediaStreamTrack::GetTrack(track1)->GetMutedState(), false);
|
| -
|
| - MockMediaStreamVideoSink sink2;
|
| - MediaStreamVideoSink::AddToVideoTrack(&sink2, sink2.GetDeliverFrameCB(),
|
| - track2);
|
| - EXPECT_EQ(MediaStreamTrack::GetTrack(track2)->GetMutedState(), false);
|
| -
|
| - base::RunLoop run_loop;
|
| - base::Closure quit_closure = run_loop.QuitClosure();
|
| - bool muted_state = false;
|
| + base::RunLoop run_loop2;
|
| + base::Closure quit_closure2 = run_loop2.QuitClosure();
|
| EXPECT_CALL(*mock_source(), DoSetMutedState(_))
|
| - .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
|
| - run_loop.Run();
|
| - EXPECT_EQ(muted_state, true);
|
| + .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2)));
|
| + DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
|
| + run_loop2.Run();
|
|
|
| - // TODO(mcasas): When added, check |track|'s (WebMediaStreamTrack) Muted
|
| - // attribute, should be true. In the meantime, check the MediaStreamTrack's.
|
| - EXPECT_EQ(MediaStreamTrack::GetTrack(track1)->GetMutedState(), true);
|
| - EXPECT_EQ(MediaStreamTrack::GetTrack(track2)->GetMutedState(), true);
|
| + EXPECT_EQ(muted_state, false);
|
| + EXPECT_EQ(track.source().readyState(),
|
| + blink::WebMediaStreamSource::ReadyStateLive);
|
|
|
| - MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1);
|
| - MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2);
|
| + MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
|
| }
|
|
|
| } // namespace content
|
|
|