Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2587)

Unified Diff: content/renderer/media/media_stream_video_capturer_source_unittest.cc

Issue 2790823002: Spec compliant video constraints for getUserMedia behind flag. (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698