Index: content/renderer/media/media_stream_video_capturer_source_unittest.cc |
diff --git a/content/renderer/media/media_stream_video_capturer_source_unittest.cc b/content/renderer/media/media_stream_video_capturer_source_unittest.cc |
index 55f54b7efb2115473cddc2baf21c74706624c6ca..bdae3481b36f5b0c3e77428376dcffc2bbbc142e 100644 |
--- a/content/renderer/media/media_stream_video_capturer_source_unittest.cc |
+++ b/content/renderer/media/media_stream_video_capturer_source_unittest.cc |
@@ -12,10 +12,13 @@ |
#include "base/run_loop.h" |
#include "base/single_thread_task_runner.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "base/test/scoped_feature_list.h" |
#include "content/child/child_process.h" |
+#include "content/public/common/content_features.h" |
#include "content/public/renderer/media_stream_video_sink.h" |
#include "content/renderer/media/media_stream_video_track.h" |
#include "content/renderer/media/mock_constraint_factory.h" |
+#include "content/renderer/media/video_track_adapter.h" |
#include "media/base/bind_to_current_loop.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -104,6 +107,21 @@ class MediaStreamVideoCapturerSourceTest : public testing::Test { |
enabled); |
} |
+ blink::WebMediaStreamTrack StartSource( |
+ const VideoTrackAdapterSettings& adapter_settings, |
+ const base::Optional<bool>& noise_reduction, |
+ bool is_screencast, |
+ double min_frame_rate) { |
+ bool enabled = true; |
+ // CreateVideoTrack will trigger OnConstraintsApplied. |
+ return MediaStreamVideoTrack::CreateVideoTrack( |
+ source_, adapter_settings, noise_reduction, is_screencast, |
+ min_frame_rate, |
+ base::Bind(&MediaStreamVideoCapturerSourceTest::OnConstraintsApplied, |
+ base::Unretained(this)), |
+ enabled); |
+ } |
+ |
MockVideoCapturerSource& mock_delegate() { return *delegate_; } |
const char* GetPowerLineFrequencyForTesting() const { |
@@ -134,7 +152,13 @@ class MediaStreamVideoCapturerSourceTest : public testing::Test { |
MockConstraintFactory constraint_factory_; |
}; |
-TEST_F(MediaStreamVideoCapturerSourceTest, TabCaptureFixedResolutionByDefault) { |
+// This test does not apply with spec-compliant constraints. |
+// TODO(guidou): Remove this test. http://crbug.com/706408 |
+TEST_F(MediaStreamVideoCapturerSourceTest, |
+ TabCaptureFixedResolutionByDefaultOldConstraints) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndEnableFeature( |
+ features::kMediaStreamOldVideoConstraints); |
StreamDeviceInfo device_info; |
device_info.device.type = MEDIA_TAB_VIDEO_CAPTURE; |
InitWithDeviceInfo(device_info); |
@@ -159,8 +183,13 @@ TEST_F(MediaStreamVideoCapturerSourceTest, TabCaptureFixedResolutionByDefault) { |
EXPECT_CALL(mock_delegate(), StopCapture()); |
} |
+// This test does not apply with spec-compliant constraints. |
+// TODO(guidou): Remove this test. http://crbug.com/706408 |
TEST_F(MediaStreamVideoCapturerSourceTest, |
- DesktopCaptureAllowAnyResolutionChangeByDefault) { |
+ DesktopCaptureAllowAnyResolutionChangeByDefaultOldConstraints) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndEnableFeature( |
+ features::kMediaStreamOldVideoConstraints); |
StreamDeviceInfo device_info; |
device_info.device.type = MEDIA_DESKTOP_VIDEO_CAPTURE; |
InitWithDeviceInfo(device_info); |
@@ -185,8 +214,13 @@ TEST_F(MediaStreamVideoCapturerSourceTest, |
EXPECT_CALL(mock_delegate(), StopCapture()); |
} |
+// This test does not apply with spec-compliant constraints. |
+// TODO(guidou): Remove this test. http://crbug.com/706408 |
TEST_F(MediaStreamVideoCapturerSourceTest, |
- TabCaptureConstraintsImplyFixedAspectRatio) { |
+ TabCaptureConstraintsImplyFixedAspectRatioOldConstraints) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndEnableFeature( |
+ features::kMediaStreamOldVideoConstraints); |
StreamDeviceInfo device_info; |
device_info.device.type = MEDIA_TAB_VIDEO_CAPTURE; |
InitWithDeviceInfo(device_info); |
@@ -218,8 +252,13 @@ TEST_F(MediaStreamVideoCapturerSourceTest, |
EXPECT_CALL(mock_delegate(), StopCapture()); |
} |
+// This test does not apply with spec-compliant constraints. |
+// TODO(guidou): Remove this test. http://crbug.com/706408 |
TEST_F(MediaStreamVideoCapturerSourceTest, |
- TabCaptureConstraintsImplyAllowingAnyResolutionChange) { |
+ TabCaptureConstraintsImplyAllowingAnyResolutionChangeOldConstraints) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndEnableFeature( |
+ features::kMediaStreamOldVideoConstraints); |
StreamDeviceInfo device_info; |
device_info.device.type = MEDIA_TAB_VIDEO_CAPTURE; |
InitWithDeviceInfo(device_info); |
@@ -251,8 +290,13 @@ TEST_F(MediaStreamVideoCapturerSourceTest, |
EXPECT_CALL(mock_delegate(), StopCapture()); |
} |
+// This test does not apply with spec-compliant constraints. |
+// TODO(guidou): Remove this test. http://crbug.com/706408 |
TEST_F(MediaStreamVideoCapturerSourceTest, |
- DeviceCaptureConstraintsSupportPowerLineFrequency) { |
+ DeviceCaptureConstraintsSupportPowerLineFrequencyOldConstraints) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndEnableFeature( |
+ features::kMediaStreamOldVideoConstraints); |
for (int frequency = -100; frequency < 100; ++frequency) { |
StreamDeviceInfo device_info; |
device_info.device.type = MEDIA_DEVICE_VIDEO_CAPTURE; |
@@ -291,7 +335,11 @@ TEST_F(MediaStreamVideoCapturerSourceTest, |
} |
} |
-TEST_F(MediaStreamVideoCapturerSourceTest, Ended) { |
+// TODO(guidou): Remove this test. http://crbug.com/706408 |
+TEST_F(MediaStreamVideoCapturerSourceTest, EndedOldConstraints) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndEnableFeature( |
+ features::kMediaStreamOldVideoConstraints); |
std::unique_ptr<MockVideoCapturerSource> delegate( |
new MockVideoCapturerSource()); |
delegate_ = delegate.get(); |
@@ -328,6 +376,47 @@ TEST_F(MediaStreamVideoCapturerSourceTest, Ended) { |
EXPECT_TRUE(source_stopped_); |
} |
+TEST_F(MediaStreamVideoCapturerSourceTest, StartAndStop) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndDisableFeature( |
+ features::kMediaStreamOldVideoConstraints); |
+ std::unique_ptr<MockVideoCapturerSource> delegate( |
+ new MockVideoCapturerSource()); |
+ delegate_ = delegate.get(); |
+ EXPECT_CALL(*delegate_, GetPreferredFormats()); |
+ source_ = new MediaStreamVideoCapturerSource( |
+ base::Bind(&MediaStreamVideoCapturerSourceTest::OnSourceStopped, |
+ base::Unretained(this)), |
+ std::move(delegate)); |
+ webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"), |
+ blink::WebMediaStreamSource::TypeVideo, |
+ blink::WebString::fromASCII("dummy_source_name"), |
+ false /* remote */); |
+ webkit_source_.setExtraData(source_); |
+ webkit_source_id_ = webkit_source_.id(); |
+ |
+ InSequence s; |
+ EXPECT_CALL(mock_delegate(), StartCapture(_, _, _)); |
+ blink::WebMediaStreamTrack track = StartSource( |
+ VideoTrackAdapterSettings(), base::Optional<bool>(), false, 0.0); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ OnStarted(true); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, |
+ webkit_source_.getReadyState()); |
+ |
+ EXPECT_FALSE(source_stopped_); |
+ |
+ EXPECT_CALL(mock_delegate(), StopCapture()); |
+ OnStarted(false); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, |
+ webkit_source_.getReadyState()); |
+ // Verify that MediaStreamSource::SourceStoppedCallback has been triggered. |
+ EXPECT_TRUE(source_stopped_); |
+} |
+ |
class FakeMediaStreamVideoSink : public MediaStreamVideoSink { |
public: |
FakeMediaStreamVideoSink(base::TimeTicks* capture_time, |
@@ -362,7 +451,11 @@ class FakeMediaStreamVideoSink : public MediaStreamVideoSink { |
base::Closure got_frame_cb_; |
}; |
-TEST_F(MediaStreamVideoCapturerSourceTest, CaptureTimeAndMetadataPlumbing) { |
+TEST_F(MediaStreamVideoCapturerSourceTest, |
+ CaptureTimeAndMetadataPlumbingOldConstraints) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndEnableFeature( |
+ features::kMediaStreamOldVideoConstraints); |
StreamDeviceInfo device_info; |
device_info.device.type = MEDIA_DESKTOP_VIDEO_CAPTURE; |
InitWithDeviceInfo(device_info); |
@@ -403,4 +496,60 @@ TEST_F(MediaStreamVideoCapturerSourceTest, CaptureTimeAndMetadataPlumbing) { |
EXPECT_EQ(30.0, metadata_value); |
} |
+TEST_F(MediaStreamVideoCapturerSourceTest, CaptureTimeAndMetadataPlumbing) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndDisableFeature( |
+ features::kMediaStreamOldVideoConstraints); |
+ std::unique_ptr<MockVideoCapturerSource> delegate( |
+ new MockVideoCapturerSource()); |
+ delegate_ = delegate.get(); |
+ EXPECT_CALL(*delegate_, GetPreferredFormats()); |
+ source_ = new MediaStreamVideoCapturerSource( |
+ base::Bind(&MediaStreamVideoCapturerSourceTest::OnSourceStopped, |
+ base::Unretained(this)), |
+ std::move(delegate)); |
+ webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"), |
+ blink::WebMediaStreamSource::TypeVideo, |
+ blink::WebString::fromASCII("dummy_source_name"), |
+ false /* remote */); |
+ webkit_source_.setExtraData(source_); |
+ webkit_source_id_ = webkit_source_.id(); |
+ |
+ VideoCaptureDeliverFrameCB deliver_frame_cb; |
+ media::VideoCapturerSource::RunningCallback running_cb; |
+ |
+ InSequence s; |
+ // EXPECT_CALL(mock_delegate(), GetCurrentSupportedFormats(_, _, _, _)); |
+ EXPECT_CALL(mock_delegate(), StartCapture(_, _, _)) |
+ .WillOnce(testing::DoAll(testing::SaveArg<1>(&deliver_frame_cb), |
+ testing::SaveArg<2>(&running_cb))); |
+ EXPECT_CALL(mock_delegate(), RequestRefreshFrame()); |
+ EXPECT_CALL(mock_delegate(), StopCapture()); |
+ blink::WebMediaStreamTrack track = StartSource( |
+ VideoTrackAdapterSettings(), base::Optional<bool>(), false, 0.0); |
+ running_cb.Run(true); |
+ |
+ base::RunLoop run_loop; |
+ base::TimeTicks reference_capture_time = |
+ base::TimeTicks::FromInternalValue(60013); |
+ base::TimeTicks capture_time; |
+ media::VideoFrameMetadata metadata; |
+ FakeMediaStreamVideoSink fake_sink( |
+ &capture_time, &metadata, |
+ media::BindToCurrentLoop(run_loop.QuitClosure())); |
+ fake_sink.ConnectToTrack(track); |
+ const scoped_refptr<media::VideoFrame> frame = |
+ media::VideoFrame::CreateBlackFrame(gfx::Size(2, 2)); |
+ frame->metadata()->SetDouble(media::VideoFrameMetadata::FRAME_RATE, 30.0); |
+ child_process_->io_task_runner()->PostTask( |
+ FROM_HERE, base::Bind(deliver_frame_cb, frame, reference_capture_time)); |
+ run_loop.Run(); |
+ fake_sink.DisconnectFromTrack(); |
+ EXPECT_EQ(reference_capture_time, capture_time); |
+ double metadata_value; |
+ EXPECT_TRUE(metadata.GetDouble(media::VideoFrameMetadata::FRAME_RATE, |
+ &metadata_value)); |
+ EXPECT_EQ(30.0, metadata_value); |
+} |
+ |
} // namespace content |