Chromium Code Reviews| Index: content/renderer/media/media_stream_constraints_util_video_device_unittest.cc |
| diff --git a/content/renderer/media/media_stream_constraints_util_video_device_unittest.cc b/content/renderer/media/media_stream_constraints_util_video_device_unittest.cc |
| index beac59c2e82c2bbbd89160316b6deecc59a1ece0..1c8c7f911237cfad88dd2060a954b540a46a21d5 100644 |
| --- a/content/renderer/media/media_stream_constraints_util_video_device_unittest.cc |
| +++ b/content/renderer/media/media_stream_constraints_util_video_device_unittest.cc |
| @@ -1248,12 +1248,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedExactResolution) { |
| constraint_factory_.Reset(); |
| blink::WebMediaTrackConstraintSet& advanced1 = |
| constraint_factory_.AddAdvanced(); |
| - advanced1.width.setExact(4000); |
| - advanced1.height.setExact(4000); |
| + advanced1.width.setMin(4000); |
| + advanced1.height.setMin(4000); |
| blink::WebMediaTrackConstraintSet& advanced2 = |
| constraint_factory_.AddAdvanced(); |
| - advanced2.width.setExact(3000); |
| - advanced2.height.setExact(3000); |
| + advanced2.width.setMin(3000); |
| + advanced2.height.setMin(3000); |
| auto result = SelectSettings(); |
| // No device supports the advanced constraint sets. |
| // Tie-breaker rule that applies is closeness to default settings. |
|
hbos_chromium
2017/02/28 11:41:54
adv1 is superflous given adv2.
What about...?
adv
Guido Urdaneta
2017/02/28 16:44:00
Replaced with a test where each advanced set cause
|
| @@ -1262,8 +1262,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedExactResolution) { |
| blink::WebMediaTrackConstraintSet& advanced3 = |
| constraint_factory_.AddAdvanced(); |
| - advanced3.width.setExact(1920); |
| - advanced3.height.setExact(1080); |
| + advanced3.width.setMin(1920); |
| + advanced3.height.setMin(1080); |
| result = SelectSettings(); |
| EXPECT_TRUE(result.HasValue()); |
| // The high-res device natively supports the third advanced constraint set |
| @@ -1277,8 +1277,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedExactResolution) { |
| blink::WebMediaTrackConstraintSet& advanced4 = |
| constraint_factory_.AddAdvanced(); |
| - advanced4.width.setExact(640); |
| - advanced4.height.setExact(480); |
| + advanced4.width.setMin(640); |
| + advanced4.height.setMin(480); |
| result = SelectSettings(); |
| EXPECT_TRUE(result.HasValue()); |
| // First tie-breaker rule that applies is support for advanced constraints |
| @@ -1341,18 +1341,18 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedNoiseReduction) { |
| constraint_factory_.Reset(); |
| blink::WebMediaTrackConstraintSet& advanced1 = |
| constraint_factory_.AddAdvanced(); |
| - advanced1.width.setExact(640); |
| - advanced1.height.setExact(480); |
| + advanced1.width.setMin(640); |
| + advanced1.height.setMin(480); |
| blink::WebMediaTrackConstraintSet& advanced2 = |
| constraint_factory_.AddAdvanced(); |
| - advanced2.width.setExact(1920); |
| - advanced2.height.setExact(1080); |
| + advanced2.width.setMin(1920); |
| + advanced2.height.setMin(1080); |
| advanced2.googNoiseReduction.setExact(false); |
| auto result = SelectSettings(); |
| EXPECT_TRUE(result.HasValue()); |
| EXPECT_EQ(high_res_device_->device_id, result.device_id); |
| - EXPECT_EQ(1920, result.Width()); |
| - EXPECT_EQ(1080, result.Height()); |
| + EXPECT_LE(1920, result.Width()); |
| + EXPECT_LE(1080, result.Height()); |
| EXPECT_TRUE(result.noise_reduction && !*result.noise_reduction); |
| } |
| @@ -1403,6 +1403,184 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
| } |
| } |
| +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
| + AdvancedContradictoryExactResolution) { |
| + constraint_factory_.Reset(); |
| + blink::WebMediaTrackConstraintSet& advanced1 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced1.width.setExact(640); |
| + advanced1.height.setExact(480); |
| + blink::WebMediaTrackConstraintSet& advanced2 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced2.width.setExact(1920); |
| + advanced2.height.setExact(1080); |
| + auto result = SelectSettings(); |
| + EXPECT_TRUE(result.HasValue()); |
| + // The second advanced set must be ignored because it contradicts the first |
| + // set. The low-res device is the one that best supports the requested |
| + // resolution. |
| + EXPECT_EQ(low_res_device_->device_id, result.device_id); |
| + EXPECT_EQ(640, result.Width()); |
| + EXPECT_EQ(480, result.Height()); |
|
hbos_chromium
2017/02/28 11:41:54
These tests are all good, but we want if possible
Guido Urdaneta
2017/02/28 16:44:00
Added tests similar to the proposed ones with widt
|
| +} |
| + |
| +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
| + AdvancedContradictoryResolutionRange) { |
| + constraint_factory_.Reset(); |
| + blink::WebMediaTrackConstraintSet& advanced1 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced1.width.setMax(640); |
| + advanced1.height.setMax(480); |
| + blink::WebMediaTrackConstraintSet& advanced2 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced2.width.setMin(1920); |
| + advanced2.height.setMin(1080); |
| + auto result = SelectSettings(); |
| + EXPECT_TRUE(result.HasValue()); |
| + // The second advanced set must be ignored because it contradicts the first |
| + // set. |
| + EXPECT_EQ(default_device_->device_id, result.device_id); |
| + EXPECT_GE(640, result.Width()); |
| + EXPECT_GE(480, result.Height()); |
| +} |
| + |
| +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
| + AdvancedContradictoryExactAspectRatio) { |
| + constraint_factory_.Reset(); |
| + blink::WebMediaTrackConstraintSet& advanced1 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced1.aspectRatio.setExact(2300.0); |
| + blink::WebMediaTrackConstraintSet& advanced2 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced2.aspectRatio.setExact(3.0); |
| + auto result = SelectSettings(); |
| + EXPECT_TRUE(result.HasValue()); |
| + // The second advanced set must be ignored because it contradicts the first |
| + // set. Only the high-res device in the highest-resolution format supports the |
| + // requested aspect ratio. |
| + EXPECT_EQ(high_res_device_->device_id, result.device_id); |
| + EXPECT_EQ(*high_res_highest_format_, result.Format()); |
| +} |
| + |
| +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
| + AdvancedContradictoryAspectRatioRange) { |
| + constraint_factory_.Reset(); |
| + blink::WebMediaTrackConstraintSet& advanced1 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced1.aspectRatio.setMin(2300.0); |
| + blink::WebMediaTrackConstraintSet& advanced2 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced2.aspectRatio.setMax(3.0); |
| + auto result = SelectSettings(); |
| + EXPECT_TRUE(result.HasValue()); |
| + // The second advanced set must be ignored because it contradicts the first |
| + // set. Only the high-res device in the highest-resolution format supports the |
| + // requested aspect ratio. |
| + EXPECT_EQ(high_res_device_->device_id, result.device_id); |
| + EXPECT_EQ(*high_res_highest_format_, result.Format()); |
| +} |
| + |
| +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
| + AdvancedContradictoryExactFrameRate) { |
| + constraint_factory_.Reset(); |
| + blink::WebMediaTrackConstraintSet& advanced1 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced1.frameRate.setExact(40.0); |
| + blink::WebMediaTrackConstraintSet& advanced2 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced2.frameRate.setExact(45.0); |
| + auto result = SelectSettings(); |
| + EXPECT_TRUE(result.HasValue()); |
| + // The second advanced set must be ignored because it contradicts the first |
| + // set. |
| + EXPECT_EQ(40.0, result.FrameRate()); |
| +} |
| + |
| +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
| + AdvancedContradictoryFrameRateRange) { |
| + constraint_factory_.Reset(); |
| + blink::WebMediaTrackConstraintSet& advanced1 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced1.frameRate.setMin(40.0); |
| + blink::WebMediaTrackConstraintSet& advanced2 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced2.frameRate.setMax(35.0); |
| + auto result = SelectSettings(); |
| + EXPECT_TRUE(result.HasValue()); |
| + // The second advanced set must be ignored because it contradicts the first |
| + // set. |
| + EXPECT_LE(40.0, result.FrameRate()); |
| +} |
| + |
| +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedDeviceID) { |
| + constraint_factory_.Reset(); |
| + blink::WebMediaTrackConstraintSet& advanced1 = |
| + constraint_factory_.AddAdvanced(); |
| + blink::WebString id_vector1[] = {blink::WebString::fromASCII(kDeviceID1), |
| + blink::WebString::fromASCII(kDeviceID2)}; |
| + advanced1.deviceId.setExact( |
| + blink::WebVector<blink::WebString>(id_vector1, arraysize(id_vector1))); |
| + blink::WebString id_vector2[] = {blink::WebString::fromASCII(kDeviceID2), |
| + blink::WebString::fromASCII(kDeviceID3)}; |
| + blink::WebMediaTrackConstraintSet& advanced2 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced2.deviceId.setExact( |
| + blink::WebVector<blink::WebString>(id_vector2, arraysize(id_vector2))); |
| + auto result = SelectSettings(); |
| + EXPECT_TRUE(result.HasValue()); |
| + // kDeviceID2 must be selected because it is the only one that satisfies both |
| + // advanced sets. |
| + EXPECT_EQ(std::string(kDeviceID2), result.device_id); |
| +} |
| + |
| +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
| + AdvancedContradictoryDeviceID) { |
| + constraint_factory_.Reset(); |
| + blink::WebMediaTrackConstraintSet& advanced1 = |
| + constraint_factory_.AddAdvanced(); |
| + blink::WebString id_vector1[] = {blink::WebString::fromASCII(kDeviceID1), |
| + blink::WebString::fromASCII(kDeviceID2)}; |
| + advanced1.deviceId.setExact( |
| + blink::WebVector<blink::WebString>(id_vector1, arraysize(id_vector1))); |
| + blink::WebString id_vector2[] = {blink::WebString::fromASCII(kDeviceID3), |
| + blink::WebString::fromASCII(kDeviceID4)}; |
| + blink::WebMediaTrackConstraintSet& advanced2 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced2.deviceId.setExact( |
| + blink::WebVector<blink::WebString>(id_vector2, arraysize(id_vector2))); |
| + auto result = SelectSettings(); |
| + EXPECT_TRUE(result.HasValue()); |
| + // The second advanced set must be ignored because it contradicts the first |
| + // set. |
| + EXPECT_EQ(std::string(kDeviceID1), result.device_id); |
| +} |
| + |
| +TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
| + AdvancedContradictoryPowerLineFrequency) { |
| + { |
| + constraint_factory_.Reset(); |
| + blink::WebMediaTrackConstraintSet& advanced1 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced1.width.setMin(640); |
| + advanced1.height.setMin(480); |
| + advanced1.googPowerLineFrequency.setExact(50); |
| + blink::WebMediaTrackConstraintSet& advanced2 = |
| + constraint_factory_.AddAdvanced(); |
| + advanced2.width.setMin(1920); |
| + advanced2.height.setMin(1080); |
| + advanced2.googPowerLineFrequency.setExact(60); |
| + auto result = SelectSettings(); |
| + EXPECT_TRUE(result.HasValue()); |
| + // The second advanced set cannot be satisfied because it contradicts the |
| + // first set. The default device supports the first set and should be |
| + // selected. |
| + EXPECT_EQ(default_device_->device_id, result.device_id); |
| + EXPECT_LE(640, result.Width()); |
| + EXPECT_LE(480, result.Height()); |
| + EXPECT_EQ(50, static_cast<int>(result.PowerLineFrequency())); |
| + } |
| +} |
| + |
| // The "NoDevices" tests verify that the algorithm returns the expected result |
| // when there are no candidates to choose from. |
| TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, NoDevicesNoConstraints) { |