| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 } | 35 } |
| 36 | 36 |
| 37 class MediaStreamVideoSourceTest : public ::testing::Test { | 37 class MediaStreamVideoSourceTest : public ::testing::Test { |
| 38 public: | 38 public: |
| 39 MediaStreamVideoSourceTest() | 39 MediaStreamVideoSourceTest() |
| 40 : child_process_(new ChildProcess()), | 40 : child_process_(new ChildProcess()), |
| 41 number_of_successful_constraints_applied_(0), | 41 number_of_successful_constraints_applied_(0), |
| 42 number_of_failed_constraints_applied_(0), | 42 number_of_failed_constraints_applied_(0), |
| 43 result_(MEDIA_DEVICE_OK), | 43 result_(MEDIA_DEVICE_OK), |
| 44 result_name_(""), | 44 result_name_(""), |
| 45 mock_source_(new MockMediaStreamVideoSource(true)), | 45 mock_source_(new MockMediaStreamVideoSource( |
| 46 mock_source2_(new MockMediaStreamVideoSource( | |
| 47 media::VideoCaptureFormat(gfx::Size(1280, 720), | 46 media::VideoCaptureFormat(gfx::Size(1280, 720), |
| 48 1000.0, | 47 1000.0, |
| 49 media::PIXEL_FORMAT_I420), | 48 media::PIXEL_FORMAT_I420), |
| 50 false)) { | 49 false)) { |
| 50 scoped_feature_list_.InitAndDisableFeature( |
| 51 features::kMediaStreamOldVideoConstraints); |
| 52 |
| 53 media::VideoCaptureFormats formats; |
| 54 formats.push_back(media::VideoCaptureFormat(gfx::Size(1280, 720), 30, |
| 55 media::PIXEL_FORMAT_I420)); |
| 56 formats.push_back(media::VideoCaptureFormat(gfx::Size(640, 480), 30, |
| 57 media::PIXEL_FORMAT_I420)); |
| 58 formats.push_back(media::VideoCaptureFormat(gfx::Size(352, 288), 30, |
| 59 media::PIXEL_FORMAT_I420)); |
| 60 formats.push_back(media::VideoCaptureFormat(gfx::Size(320, 240), 30, |
| 61 media::PIXEL_FORMAT_I420)); |
| 62 webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"), |
| 63 blink::WebMediaStreamSource::TypeVideo, |
| 64 blink::WebString::fromASCII("dummy_source_name"), |
| 65 false /* remote */); |
| 66 webkit_source_.setExtraData(mock_source_); |
| 67 } |
| 68 |
| 69 void TearDown() override { |
| 70 webkit_source_.reset(); |
| 71 blink::WebHeap::collectAllGarbageForTesting(); |
| 72 } |
| 73 |
| 74 protected: |
| 75 // Create a track that's associated with |webkit_source_|. |
| 76 blink::WebMediaStreamTrack CreateTrack(const std::string& id) { |
| 77 bool enabled = true; |
| 78 return MediaStreamVideoTrack::CreateVideoTrack( |
| 79 mock_source_, |
| 80 base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied, |
| 81 base::Unretained(this)), |
| 82 enabled); |
| 83 } |
| 84 |
| 85 blink::WebMediaStreamTrack CreateTrack( |
| 86 const std::string& id, |
| 87 const VideoTrackAdapterSettings& adapter_settings, |
| 88 const base::Optional<bool>& noise_reduction, |
| 89 bool is_screencast, |
| 90 double min_frame_rate) { |
| 91 bool enabled = true; |
| 92 return MediaStreamVideoTrack::CreateVideoTrack( |
| 93 mock_source_, adapter_settings, noise_reduction, is_screencast, |
| 94 min_frame_rate, |
| 95 base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied, |
| 96 base::Unretained(this)), |
| 97 enabled); |
| 98 } |
| 99 |
| 100 blink::WebMediaStreamTrack CreateTrackAndStartSource(int width, |
| 101 int height, |
| 102 double frame_rate) { |
| 103 DCHECK(!IsOldVideoConstraints()); |
| 104 blink::WebMediaStreamTrack track = CreateTrack( |
| 105 "123", |
| 106 VideoTrackAdapterSettings(width, height, 0.0, HUGE_VAL, frame_rate), |
| 107 base::Optional<bool>(), false, 0.0); |
| 108 |
| 109 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); |
| 110 mock_source_->StartMockedSource(); |
| 111 // Once the source has started successfully we expect that the |
| 112 // ConstraintsCallback in MediaStreamSource::AddTrack completes. |
| 113 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 114 return track; |
| 115 } |
| 116 |
| 117 int NumberOfSuccessConstraintsCallbacks() const { |
| 118 return number_of_successful_constraints_applied_; |
| 119 } |
| 120 |
| 121 int NumberOfFailedConstraintsCallbacks() const { |
| 122 return number_of_failed_constraints_applied_; |
| 123 } |
| 124 |
| 125 content::MediaStreamRequestResult error_type() const { return result_; } |
| 126 blink::WebString error_name() const { return result_name_; } |
| 127 |
| 128 MockMediaStreamVideoSource* mock_source() { return mock_source_; } |
| 129 |
| 130 const blink::WebMediaStreamSource& webkit_source() { return webkit_source_; } |
| 131 |
| 132 void TestSourceCropFrame(int capture_width, |
| 133 int capture_height, |
| 134 int expected_width, |
| 135 int expected_height) { |
| 136 DCHECK(!IsOldVideoConstraints()); |
| 137 // Configure the track to crop to the expected resolution. |
| 138 blink::WebMediaStreamTrack track = |
| 139 CreateTrackAndStartSource(expected_width, expected_height, 30.0); |
| 140 |
| 141 // Produce frames at the capture resolution. |
| 142 MockMediaStreamVideoSink sink; |
| 143 sink.ConnectToTrack(track); |
| 144 DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink); |
| 145 EXPECT_EQ(1, sink.number_of_frames()); |
| 146 |
| 147 // Expect the delivered frame to be cropped. |
| 148 EXPECT_EQ(expected_height, sink.frame_size().height()); |
| 149 EXPECT_EQ(expected_width, sink.frame_size().width()); |
| 150 sink.DisconnectFromTrack(); |
| 151 } |
| 152 |
| 153 void DeliverVideoFrameAndWaitForRenderer(int width, |
| 154 int height, |
| 155 MockMediaStreamVideoSink* sink) { |
| 156 base::RunLoop run_loop; |
| 157 base::Closure quit_closure = run_loop.QuitClosure(); |
| 158 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure)); |
| 159 scoped_refptr<media::VideoFrame> frame = |
| 160 media::VideoFrame::CreateBlackFrame(gfx::Size(width, height)); |
| 161 mock_source()->DeliverVideoFrame(frame); |
| 162 run_loop.Run(); |
| 163 } |
| 164 |
| 165 void DeliverVideoFrameAndWaitForTwoRenderers( |
| 166 int width, |
| 167 int height, |
| 168 MockMediaStreamVideoSink* sink1, |
| 169 MockMediaStreamVideoSink* sink2) { |
| 170 base::RunLoop run_loop; |
| 171 base::Closure quit_closure = run_loop.QuitClosure(); |
| 172 EXPECT_CALL(*sink1, OnVideoFrame()); |
| 173 EXPECT_CALL(*sink2, OnVideoFrame()).WillOnce(RunClosure(quit_closure)); |
| 174 scoped_refptr<media::VideoFrame> frame = |
| 175 media::VideoFrame::CreateBlackFrame(gfx::Size(width, height)); |
| 176 mock_source()->DeliverVideoFrame(frame); |
| 177 run_loop.Run(); |
| 178 } |
| 179 |
| 180 void TestTwoTracksWithDifferentSettings(int capture_width, |
| 181 int capture_height, |
| 182 int expected_width1, |
| 183 int expected_height1, |
| 184 int expected_width2, |
| 185 int expected_height2) { |
| 186 blink::WebMediaStreamTrack track1 = |
| 187 CreateTrackAndStartSource(expected_width1, expected_height1, |
| 188 MediaStreamVideoSource::kDefaultFrameRate); |
| 189 |
| 190 blink::WebMediaStreamTrack track2 = |
| 191 CreateTrack("dummy", |
| 192 VideoTrackAdapterSettings( |
| 193 expected_width2, expected_height2, 0.0, HUGE_VAL, |
| 194 MediaStreamVideoSource::kDefaultFrameRate), |
| 195 base::Optional<bool>(), false, 0.0); |
| 196 |
| 197 MockMediaStreamVideoSink sink1; |
| 198 sink1.ConnectToTrack(track1); |
| 199 EXPECT_EQ(0, sink1.number_of_frames()); |
| 200 |
| 201 MockMediaStreamVideoSink sink2; |
| 202 sink2.ConnectToTrack(track2); |
| 203 EXPECT_EQ(0, sink2.number_of_frames()); |
| 204 |
| 205 DeliverVideoFrameAndWaitForTwoRenderers(capture_width, capture_height, |
| 206 &sink1, &sink2); |
| 207 |
| 208 EXPECT_EQ(1, sink1.number_of_frames()); |
| 209 EXPECT_EQ(expected_width1, sink1.frame_size().width()); |
| 210 EXPECT_EQ(expected_height1, sink1.frame_size().height()); |
| 211 |
| 212 EXPECT_EQ(1, sink2.number_of_frames()); |
| 213 EXPECT_EQ(expected_width2, sink2.frame_size().width()); |
| 214 EXPECT_EQ(expected_height2, sink2.frame_size().height()); |
| 215 |
| 216 sink1.DisconnectFromTrack(); |
| 217 sink2.DisconnectFromTrack(); |
| 218 } |
| 219 |
| 220 void ReleaseTrackAndSourceOnAddTrackCallback( |
| 221 const blink::WebMediaStreamTrack& track_to_release) { |
| 222 track_to_release_ = track_to_release; |
| 223 } |
| 224 |
| 225 private: |
| 226 void OnConstraintsApplied(MediaStreamSource* source, |
| 227 MediaStreamRequestResult result, |
| 228 const blink::WebString& result_name) { |
| 229 ASSERT_EQ(source, webkit_source().getExtraData()); |
| 230 |
| 231 if (result == MEDIA_DEVICE_OK) { |
| 232 ++number_of_successful_constraints_applied_; |
| 233 } else { |
| 234 result_ = result; |
| 235 result_name_ = result_name; |
| 236 ++number_of_failed_constraints_applied_; |
| 237 } |
| 238 |
| 239 if (!track_to_release_.isNull()) { |
| 240 mock_source_ = nullptr; |
| 241 webkit_source_.reset(); |
| 242 track_to_release_.reset(); |
| 243 } |
| 244 } |
| 245 const base::MessageLoopForUI message_loop_; |
| 246 const std::unique_ptr<ChildProcess> child_process_; |
| 247 blink::WebMediaStreamTrack track_to_release_; |
| 248 int number_of_successful_constraints_applied_; |
| 249 int number_of_failed_constraints_applied_; |
| 250 content::MediaStreamRequestResult result_; |
| 251 blink::WebString result_name_; |
| 252 blink::WebMediaStreamSource webkit_source_; |
| 253 // |mock_source_| is owned by |webkit_source_|. |
| 254 MockMediaStreamVideoSource* mock_source_; |
| 255 base::test::ScopedFeatureList scoped_feature_list_; |
| 256 }; |
| 257 |
| 258 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { |
| 259 blink::WebMediaStreamTrack track = CreateTrack("123"); |
| 260 mock_source()->StartMockedSource(); |
| 261 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 262 } |
| 263 |
| 264 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) { |
| 265 blink::WebMediaStreamTrack track1 = CreateTrack("123"); |
| 266 blink::WebMediaStreamTrack track2 = CreateTrack("123"); |
| 267 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); |
| 268 mock_source()->StartMockedSource(); |
| 269 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| 270 } |
| 271 |
| 272 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) { |
| 273 blink::WebMediaStreamTrack track1 = CreateTrack("123"); |
| 274 mock_source()->StartMockedSource(); |
| 275 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 276 blink::WebMediaStreamTrack track2 = CreateTrack("123"); |
| 277 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| 278 } |
| 279 |
| 280 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) { |
| 281 blink::WebMediaStreamTrack track = CreateTrack("123"); |
| 282 mock_source()->FailToStartMockedSource(); |
| 283 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 284 } |
| 285 |
| 286 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3) { |
| 287 TestSourceCropFrame(1280, 720, 960, 720); |
| 288 } |
| 289 |
| 290 TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) { |
| 291 blink::WebMediaStreamTrack track = CreateTrack("123"); |
| 292 ReleaseTrackAndSourceOnAddTrackCallback(track); |
| 293 mock_source()->StartMockedSource(); |
| 294 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 295 } |
| 296 |
| 297 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGA) { |
| 298 TestTwoTracksWithDifferentSettings(640, 480, 640, 480, 640, 360); |
| 299 } |
| 300 |
| 301 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGA) { |
| 302 TestTwoTracksWithDifferentSettings(1280, 720, 1280, 720, 640, 360); |
| 303 } |
| 304 |
| 305 TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSize) { |
| 306 MockConstraintFactory factory; |
| 307 factory.AddAdvanced().width.setMax(800); |
| 308 factory.AddAdvanced().height.setMax(700); |
| 309 |
| 310 // Expect the source to start capture with the supported resolution. |
| 311 // Disable frame-rate adjustment in spec-compliant mode to ensure no frames |
| 312 // are dropped. |
| 313 blink::WebMediaStreamTrack track = CreateTrackAndStartSource(800, 700, 0.0); |
| 314 |
| 315 MockMediaStreamVideoSink sink; |
| 316 sink.ConnectToTrack(track); |
| 317 EXPECT_EQ(0, sink.number_of_frames()); |
| 318 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); |
| 319 EXPECT_EQ(1, sink.number_of_frames()); |
| 320 // Expect the delivered frame to be passed unchanged since its smaller than |
| 321 // max requested. |
| 322 EXPECT_EQ(320, sink.frame_size().width()); |
| 323 EXPECT_EQ(240, sink.frame_size().height()); |
| 324 |
| 325 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); |
| 326 EXPECT_EQ(2, sink.number_of_frames()); |
| 327 // Expect the delivered frame to be passed unchanged since its smaller than |
| 328 // max requested. |
| 329 EXPECT_EQ(640, sink.frame_size().width()); |
| 330 EXPECT_EQ(480, sink.frame_size().height()); |
| 331 |
| 332 DeliverVideoFrameAndWaitForRenderer(1280, 720, &sink); |
| 333 EXPECT_EQ(3, sink.number_of_frames()); |
| 334 // Expect a frame to be cropped since its larger than max requested. |
| 335 EXPECT_EQ(800, sink.frame_size().width()); |
| 336 EXPECT_EQ(700, sink.frame_size().height()); |
| 337 |
| 338 sink.DisconnectFromTrack(); |
| 339 } |
| 340 |
| 341 // Test that a source producing no frames change the source ReadyState to muted. |
| 342 // that in a reasonable time frame the muted state turns to false. |
| 343 TEST_F(MediaStreamVideoSourceTest, MutedSource) { |
| 344 // Setup the source for support a frame rate of 999 fps in order to test |
| 345 // the muted event faster. This is since the frame monitoring uses |
| 346 // PostDelayedTask that is dependent on the source frame rate. |
| 347 // Note that media::limits::kMaxFramesPerSecond is 1000. |
| 348 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( |
| 349 640, 480, media::limits::kMaxFramesPerSecond - 2); |
| 350 MockMediaStreamVideoSink sink; |
| 351 sink.ConnectToTrack(track); |
| 352 EXPECT_EQ(track.source().getReadyState(), |
| 353 blink::WebMediaStreamSource::ReadyStateLive); |
| 354 |
| 355 base::RunLoop run_loop; |
| 356 base::Closure quit_closure = run_loop.QuitClosure(); |
| 357 bool muted_state = false; |
| 358 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) |
| 359 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); |
| 360 run_loop.Run(); |
| 361 EXPECT_EQ(muted_state, true); |
| 362 |
| 363 EXPECT_EQ(track.source().getReadyState(), |
| 364 blink::WebMediaStreamSource::ReadyStateMuted); |
| 365 |
| 366 base::RunLoop run_loop2; |
| 367 base::Closure quit_closure2 = run_loop2.QuitClosure(); |
| 368 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) |
| 369 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2))); |
| 370 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); |
| 371 run_loop2.Run(); |
| 372 |
| 373 EXPECT_EQ(muted_state, false); |
| 374 EXPECT_EQ(track.source().getReadyState(), |
| 375 blink::WebMediaStreamSource::ReadyStateLive); |
| 376 |
| 377 sink.DisconnectFromTrack(); |
| 378 } |
| 379 |
| 380 class MediaStreamVideoSourceOldConstraintsTest : public ::testing::Test { |
| 381 public: |
| 382 MediaStreamVideoSourceOldConstraintsTest() |
| 383 : child_process_(new ChildProcess()), |
| 384 number_of_successful_constraints_applied_(0), |
| 385 number_of_failed_constraints_applied_(0), |
| 386 result_(MEDIA_DEVICE_OK), |
| 387 result_name_(""), |
| 388 mock_source_(new MockMediaStreamVideoSource(true)) { |
| 389 scoped_feature_list_.InitAndEnableFeature( |
| 390 features::kMediaStreamOldVideoConstraints); |
| 391 |
| 51 media::VideoCaptureFormats formats; | 392 media::VideoCaptureFormats formats; |
| 52 formats.push_back(media::VideoCaptureFormat( | 393 formats.push_back(media::VideoCaptureFormat( |
| 53 gfx::Size(1280, 720), 30, media::PIXEL_FORMAT_I420)); | 394 gfx::Size(1280, 720), 30, media::PIXEL_FORMAT_I420)); |
| 54 formats.push_back(media::VideoCaptureFormat( | 395 formats.push_back(media::VideoCaptureFormat( |
| 55 gfx::Size(640, 480), 30, media::PIXEL_FORMAT_I420)); | 396 gfx::Size(640, 480), 30, media::PIXEL_FORMAT_I420)); |
| 56 formats.push_back(media::VideoCaptureFormat( | 397 formats.push_back(media::VideoCaptureFormat( |
| 57 gfx::Size(352, 288), 30, media::PIXEL_FORMAT_I420)); | 398 gfx::Size(352, 288), 30, media::PIXEL_FORMAT_I420)); |
| 58 formats.push_back(media::VideoCaptureFormat( | 399 formats.push_back(media::VideoCaptureFormat( |
| 59 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420)); | 400 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420)); |
| 60 mock_source_->SetSupportedFormats(formats); | 401 mock_source_->SetSupportedFormats(formats); |
| 61 webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"), | 402 webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"), |
| 62 blink::WebMediaStreamSource::TypeVideo, | 403 blink::WebMediaStreamSource::TypeVideo, |
| 63 blink::WebString::fromASCII("dummy_source_name"), | 404 blink::WebString::fromASCII("dummy_source_name"), |
| 64 false /* remote */); | 405 false /* remote */); |
| 65 webkit_source_.setExtraData(mock_source_); | 406 webkit_source_.setExtraData(mock_source_); |
| 66 webkit_source2_.initialize(blink::WebString::fromASCII("dummy_source_id"), | |
| 67 blink::WebMediaStreamSource::TypeVideo, | |
| 68 blink::WebString::fromASCII("dummy_source_name"), | |
| 69 false /* remote */); | |
| 70 webkit_source2_.setExtraData(mock_source2_); | |
| 71 } | 407 } |
| 72 | 408 |
| 73 void TearDown() override { | 409 void TearDown() override { |
| 74 webkit_source_.reset(); | 410 webkit_source_.reset(); |
| 75 webkit_source2_.reset(); | |
| 76 blink::WebHeap::collectAllGarbageForTesting(); | 411 blink::WebHeap::collectAllGarbageForTesting(); |
| 77 } | 412 } |
| 78 | 413 |
| 79 protected: | 414 protected: |
| 80 // Create a track that's associated with |webkit_source_|. | 415 // Create a track that's associated with |webkit_source_|. |
| 81 blink::WebMediaStreamTrack CreateTrack( | 416 blink::WebMediaStreamTrack CreateTrack( |
| 82 const std::string& id, | 417 const std::string& id, |
| 83 const blink::WebMediaConstraints& constraints) { | 418 const blink::WebMediaConstraints& constraints) { |
| 84 bool enabled = true; | 419 bool enabled = true; |
| 85 return MediaStreamVideoTrack::CreateVideoTrack( | 420 return MediaStreamVideoTrack::CreateVideoTrack( |
| 86 mock_source_, constraints, | 421 mock_source_, constraints, |
| 87 base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied, | 422 base::Bind( |
| 88 base::Unretained(this)), | 423 &MediaStreamVideoSourceOldConstraintsTest::OnConstraintsApplied, |
| 424 base::Unretained(this)), |
| 89 enabled); | 425 enabled); |
| 90 } | 426 } |
| 91 | 427 |
| 92 blink::WebMediaStreamTrack CreateTrack(const std::string& id) { | |
| 93 bool enabled = true; | |
| 94 return MediaStreamVideoTrack::CreateVideoTrack( | |
| 95 mock_source2_, | |
| 96 base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied, | |
| 97 base::Unretained(this)), | |
| 98 enabled); | |
| 99 } | |
| 100 | |
| 101 blink::WebMediaStreamTrack CreateTrack( | |
| 102 const std::string& id, | |
| 103 const VideoTrackAdapterSettings& adapter_settings, | |
| 104 const base::Optional<bool>& noise_reduction, | |
| 105 bool is_screencast, | |
| 106 double min_frame_rate) { | |
| 107 bool enabled = true; | |
| 108 return MediaStreamVideoTrack::CreateVideoTrack( | |
| 109 mock_source2_, adapter_settings, noise_reduction, is_screencast, | |
| 110 min_frame_rate, | |
| 111 base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied, | |
| 112 base::Unretained(this)), | |
| 113 enabled); | |
| 114 } | |
| 115 | |
| 116 blink::WebMediaStreamTrack CreateTrackAndStartSource( | 428 blink::WebMediaStreamTrack CreateTrackAndStartSource( |
| 117 const blink::WebMediaConstraints& constraints, | 429 const blink::WebMediaConstraints& constraints, |
| 118 int expected_width, | 430 int expected_width, |
| 119 int expected_height, | 431 int expected_height, |
| 120 int expected_frame_rate) { | 432 int expected_frame_rate) { |
| 121 DCHECK(IsOldVideoConstraints()); | 433 DCHECK(IsOldVideoConstraints()); |
| 122 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 434 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
| 123 | 435 |
| 124 mock_source_->CompleteGetSupportedFormats(); | 436 mock_source_->CompleteGetSupportedFormats(); |
| 125 const media::VideoCaptureFormat& format = mock_source()->start_format(); | 437 const media::VideoCaptureFormat& format = mock_source()->start_format(); |
| 126 EXPECT_EQ(expected_width, format.frame_size.width()); | 438 EXPECT_EQ(expected_width, format.frame_size.width()); |
| 127 EXPECT_EQ(expected_height, format.frame_size.height()); | 439 EXPECT_EQ(expected_height, format.frame_size.height()); |
| 128 EXPECT_EQ(expected_frame_rate, format.frame_rate); | 440 EXPECT_EQ(expected_frame_rate, format.frame_rate); |
| 129 | 441 |
| 130 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); | 442 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); |
| 131 mock_source_->StartMockedSource(); | 443 mock_source_->StartMockedSource(); |
| 132 // Once the source has started successfully we expect that the | 444 // Once the source has started successfully we expect that the |
| 133 // ConstraintsCallback in MediaStreamSource::AddTrack completes. | 445 // ConstraintsCallback in MediaStreamSource::AddTrack completes. |
| 134 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 446 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 135 return track; | 447 return track; |
| 136 } | 448 } |
| 137 | 449 |
| 138 blink::WebMediaStreamTrack CreateTrackAndStartSource(int width, | |
| 139 int height, | |
| 140 double frame_rate) { | |
| 141 DCHECK(!IsOldVideoConstraints()); | |
| 142 blink::WebMediaStreamTrack track = CreateTrack( | |
| 143 "123", | |
| 144 VideoTrackAdapterSettings(width, height, 0.0, HUGE_VAL, frame_rate), | |
| 145 base::Optional<bool>(), false, 0.0); | |
| 146 | |
| 147 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); | |
| 148 mock_source2_->StartMockedSource(); | |
| 149 // Once the source has started successfully we expect that the | |
| 150 // ConstraintsCallback in MediaStreamSource::AddTrack completes. | |
| 151 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | |
| 152 return track; | |
| 153 } | |
| 154 | |
| 155 int NumberOfSuccessConstraintsCallbacks() const { | 450 int NumberOfSuccessConstraintsCallbacks() const { |
| 156 return number_of_successful_constraints_applied_; | 451 return number_of_successful_constraints_applied_; |
| 157 } | 452 } |
| 158 | 453 |
| 159 int NumberOfFailedConstraintsCallbacks() const { | 454 int NumberOfFailedConstraintsCallbacks() const { |
| 160 return number_of_failed_constraints_applied_; | 455 return number_of_failed_constraints_applied_; |
| 161 } | 456 } |
| 162 | 457 |
| 163 content::MediaStreamRequestResult error_type() const { return result_; } | 458 content::MediaStreamRequestResult error_type() const { return result_; } |
| 164 blink::WebString error_name() const { return result_name_; } | 459 blink::WebString error_name() const { return result_name_; } |
| 165 | 460 |
| 166 MockMediaStreamVideoSource* mock_source() { | 461 MockMediaStreamVideoSource* mock_source() { return mock_source_; } |
| 167 return IsOldVideoConstraints() ? mock_source_ : mock_source2_; | |
| 168 } | |
| 169 | 462 |
| 170 const blink::WebMediaStreamSource& webkit_source() { | 463 const blink::WebMediaStreamSource& webkit_source() { return webkit_source_; } |
| 171 return IsOldVideoConstraints() ? webkit_source_ : webkit_source2_; | |
| 172 } | |
| 173 | 464 |
| 174 // Test that the source crops/scales to the requested width and | 465 // Test that the source crops/scales to the requested width and |
| 175 // height even though the camera delivers a larger frame. | 466 // height even though the camera delivers a larger frame. |
| 176 void TestSourceCropFrame(int capture_width, | 467 void TestSourceCropFrame(int capture_width, |
| 177 int capture_height, | 468 int capture_height, |
| 178 const blink::WebMediaConstraints& constraints, | 469 const blink::WebMediaConstraints& constraints, |
| 179 int expected_width, | 470 int expected_width, |
| 180 int expected_height) { | 471 int expected_height) { |
| 181 DCHECK(IsOldVideoConstraints()); | 472 DCHECK(IsOldVideoConstraints()); |
| 182 // Expect the source to start capture with the supported resolution. | 473 // Expect the source to start capture with the supported resolution. |
| 183 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( | 474 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( |
| 184 constraints, capture_width, capture_height, 30); | 475 constraints, capture_width, capture_height, 30); |
| 185 | 476 |
| 186 MockMediaStreamVideoSink sink; | 477 MockMediaStreamVideoSink sink; |
| 187 sink.ConnectToTrack(track); | 478 sink.ConnectToTrack(track); |
| 188 DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink); | 479 DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink); |
| 189 EXPECT_EQ(1, sink.number_of_frames()); | 480 EXPECT_EQ(1, sink.number_of_frames()); |
| 190 | 481 |
| 191 // Expect the delivered frame to be cropped. | 482 // Expect the delivered frame to be cropped. |
| 192 EXPECT_EQ(expected_height, sink.frame_size().height()); | 483 EXPECT_EQ(expected_height, sink.frame_size().height()); |
| 193 EXPECT_EQ(expected_width, sink.frame_size().width()); | 484 EXPECT_EQ(expected_width, sink.frame_size().width()); |
| 194 sink.DisconnectFromTrack(); | 485 sink.DisconnectFromTrack(); |
| 195 } | 486 } |
| 196 | 487 |
| 197 void TestSourceCropFrame(int capture_width, | |
| 198 int capture_height, | |
| 199 int expected_width, | |
| 200 int expected_height) { | |
| 201 DCHECK(!IsOldVideoConstraints()); | |
| 202 // Configure the track to crop to the expected resolution. | |
| 203 blink::WebMediaStreamTrack track = | |
| 204 CreateTrackAndStartSource(expected_width, expected_height, 30.0); | |
| 205 | |
| 206 // Produce frames at the capture resolution. | |
| 207 MockMediaStreamVideoSink sink; | |
| 208 sink.ConnectToTrack(track); | |
| 209 DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink); | |
| 210 EXPECT_EQ(1, sink.number_of_frames()); | |
| 211 | |
| 212 // Expect the delivered frame to be cropped. | |
| 213 EXPECT_EQ(expected_height, sink.frame_size().height()); | |
| 214 EXPECT_EQ(expected_width, sink.frame_size().width()); | |
| 215 sink.DisconnectFromTrack(); | |
| 216 } | |
| 217 | |
| 218 void DeliverVideoFrameAndWaitForRenderer(int width, int height, | 488 void DeliverVideoFrameAndWaitForRenderer(int width, int height, |
| 219 MockMediaStreamVideoSink* sink) { | 489 MockMediaStreamVideoSink* sink) { |
| 220 base::RunLoop run_loop; | 490 base::RunLoop run_loop; |
| 221 base::Closure quit_closure = run_loop.QuitClosure(); | 491 base::Closure quit_closure = run_loop.QuitClosure(); |
| 222 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce( | 492 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce( |
| 223 RunClosure(quit_closure)); | 493 RunClosure(quit_closure)); |
| 224 scoped_refptr<media::VideoFrame> frame = | 494 scoped_refptr<media::VideoFrame> frame = |
| 225 media::VideoFrame::CreateBlackFrame(gfx::Size(width, height)); | 495 media::VideoFrame::CreateBlackFrame(gfx::Size(width, height)); |
| 226 mock_source()->DeliverVideoFrame(frame); | 496 mock_source()->DeliverVideoFrame(frame); |
| 227 run_loop.Run(); | 497 run_loop.Run(); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 EXPECT_EQ(expected_height1, sink1.frame_size().height()); | 546 EXPECT_EQ(expected_height1, sink1.frame_size().height()); |
| 277 | 547 |
| 278 EXPECT_EQ(1, sink2.number_of_frames()); | 548 EXPECT_EQ(1, sink2.number_of_frames()); |
| 279 EXPECT_EQ(expected_width2, sink2.frame_size().width()); | 549 EXPECT_EQ(expected_width2, sink2.frame_size().width()); |
| 280 EXPECT_EQ(expected_height2, sink2.frame_size().height()); | 550 EXPECT_EQ(expected_height2, sink2.frame_size().height()); |
| 281 | 551 |
| 282 sink1.DisconnectFromTrack(); | 552 sink1.DisconnectFromTrack(); |
| 283 sink2.DisconnectFromTrack(); | 553 sink2.DisconnectFromTrack(); |
| 284 } | 554 } |
| 285 | 555 |
| 286 void TestTwoTracksWithDifferentSettings(int capture_width, | |
| 287 int capture_height, | |
| 288 int expected_width1, | |
| 289 int expected_height1, | |
| 290 int expected_width2, | |
| 291 int expected_height2) { | |
| 292 blink::WebMediaStreamTrack track1 = | |
| 293 CreateTrackAndStartSource(expected_width1, expected_height1, | |
| 294 MediaStreamVideoSource::kDefaultFrameRate); | |
| 295 | |
| 296 blink::WebMediaStreamTrack track2 = | |
| 297 CreateTrack("dummy", | |
| 298 VideoTrackAdapterSettings( | |
| 299 expected_width2, expected_height2, 0.0, HUGE_VAL, | |
| 300 MediaStreamVideoSource::kDefaultFrameRate), | |
| 301 base::Optional<bool>(), false, 0.0); | |
| 302 | |
| 303 MockMediaStreamVideoSink sink1; | |
| 304 sink1.ConnectToTrack(track1); | |
| 305 EXPECT_EQ(0, sink1.number_of_frames()); | |
| 306 | |
| 307 MockMediaStreamVideoSink sink2; | |
| 308 sink2.ConnectToTrack(track2); | |
| 309 EXPECT_EQ(0, sink2.number_of_frames()); | |
| 310 | |
| 311 DeliverVideoFrameAndWaitForTwoRenderers(capture_width, capture_height, | |
| 312 &sink1, &sink2); | |
| 313 | |
| 314 EXPECT_EQ(1, sink1.number_of_frames()); | |
| 315 EXPECT_EQ(expected_width1, sink1.frame_size().width()); | |
| 316 EXPECT_EQ(expected_height1, sink1.frame_size().height()); | |
| 317 | |
| 318 EXPECT_EQ(1, sink2.number_of_frames()); | |
| 319 EXPECT_EQ(expected_width2, sink2.frame_size().width()); | |
| 320 EXPECT_EQ(expected_height2, sink2.frame_size().height()); | |
| 321 | |
| 322 sink1.DisconnectFromTrack(); | |
| 323 sink2.DisconnectFromTrack(); | |
| 324 } | |
| 325 void SetSourceSupportedFormats(const media::VideoCaptureFormats& formats) { | 556 void SetSourceSupportedFormats(const media::VideoCaptureFormats& formats) { |
| 326 mock_source_->SetSupportedFormats(formats); | 557 mock_source_->SetSupportedFormats(formats); |
| 327 } | 558 } |
| 328 | 559 |
| 329 void ReleaseTrackAndSourceOnAddTrackCallback( | 560 void ReleaseTrackAndSourceOnAddTrackCallback( |
| 330 const blink::WebMediaStreamTrack& track_to_release) { | 561 const blink::WebMediaStreamTrack& track_to_release) { |
| 331 track_to_release_ = track_to_release; | 562 track_to_release_ = track_to_release; |
| 332 } | 563 } |
| 333 | 564 |
| 334 private: | 565 private: |
| 335 void OnConstraintsApplied(MediaStreamSource* source, | 566 void OnConstraintsApplied(MediaStreamSource* source, |
| 336 MediaStreamRequestResult result, | 567 MediaStreamRequestResult result, |
| 337 const blink::WebString& result_name) { | 568 const blink::WebString& result_name) { |
| 338 ASSERT_EQ(source, webkit_source().getExtraData()); | 569 ASSERT_EQ(source, webkit_source().getExtraData()); |
| 339 | 570 |
| 340 if (result == MEDIA_DEVICE_OK) { | 571 if (result == MEDIA_DEVICE_OK) { |
| 341 ++number_of_successful_constraints_applied_; | 572 ++number_of_successful_constraints_applied_; |
| 342 } else { | 573 } else { |
| 343 result_ = result; | 574 result_ = result; |
| 344 result_name_ = result_name; | 575 result_name_ = result_name; |
| 345 ++number_of_failed_constraints_applied_; | 576 ++number_of_failed_constraints_applied_; |
| 346 } | 577 } |
| 347 | 578 |
| 348 if (!track_to_release_.isNull()) { | 579 if (!track_to_release_.isNull()) { |
| 349 mock_source_ = nullptr; | 580 mock_source_ = nullptr; |
| 350 webkit_source_.reset(); | 581 webkit_source_.reset(); |
| 351 mock_source2_ = nullptr; | |
| 352 webkit_source2_.reset(); | |
| 353 track_to_release_.reset(); | 582 track_to_release_.reset(); |
| 354 } | 583 } |
| 355 } | 584 } |
| 356 const base::MessageLoopForUI message_loop_; | 585 const base::MessageLoopForUI message_loop_; |
| 357 const std::unique_ptr<ChildProcess> child_process_; | 586 const std::unique_ptr<ChildProcess> child_process_; |
| 358 blink::WebMediaStreamTrack track_to_release_; | 587 blink::WebMediaStreamTrack track_to_release_; |
| 359 int number_of_successful_constraints_applied_; | 588 int number_of_successful_constraints_applied_; |
| 360 int number_of_failed_constraints_applied_; | 589 int number_of_failed_constraints_applied_; |
| 361 content::MediaStreamRequestResult result_; | 590 content::MediaStreamRequestResult result_; |
| 362 blink::WebString result_name_; | 591 blink::WebString result_name_; |
| 363 blink::WebMediaStreamSource webkit_source_; | 592 blink::WebMediaStreamSource webkit_source_; |
| 364 // |mock_source_| is owned by |webkit_source_|. | 593 // |mock_source_| is owned by |webkit_source_|. |
| 365 MockMediaStreamVideoSource* mock_source_; | 594 MockMediaStreamVideoSource* mock_source_; |
| 366 blink::WebMediaStreamSource webkit_source2_; | 595 base::test::ScopedFeatureList scoped_feature_list_; |
| 367 // |mock_source2_| is owned by |webkit_source2_|. | |
| 368 MockMediaStreamVideoSource* mock_source2_; | |
| 369 }; | 596 }; |
| 370 | 597 |
| 371 // TODO(guidou): Remove this test. http://crbug.com/706408 | 598 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 372 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSourceOldConstraints) { | 599 TEST_F(MediaStreamVideoSourceOldConstraintsTest, AddTrackAndStartSource) { |
| 373 base::test::ScopedFeatureList scoped_feature_list; | |
| 374 scoped_feature_list.InitAndEnableFeature( | |
| 375 features::kMediaStreamOldVideoConstraints); | |
| 376 blink::WebMediaConstraints constraints; | 600 blink::WebMediaConstraints constraints; |
| 377 constraints.initialize(); | 601 constraints.initialize(); |
| 378 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 602 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
| 379 mock_source()->CompleteGetSupportedFormats(); | 603 mock_source()->CompleteGetSupportedFormats(); |
| 380 mock_source()->StartMockedSource(); | 604 mock_source()->StartMockedSource(); |
| 381 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 605 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 382 } | 606 } |
| 383 | 607 |
| 384 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { | |
| 385 base::test::ScopedFeatureList scoped_feature_list; | |
| 386 scoped_feature_list.InitAndDisableFeature( | |
| 387 features::kMediaStreamOldVideoConstraints); | |
| 388 blink::WebMediaStreamTrack track = CreateTrack("123"); | |
| 389 mock_source()->StartMockedSource(); | |
| 390 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | |
| 391 } | |
| 392 | |
| 393 // TODO(guidou): Remove this test. http://crbug.com/706408 | 608 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 394 TEST_F(MediaStreamVideoSourceTest, | 609 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 395 AddTwoTracksBeforeSourceStartsOldConstraints) { | 610 AddTwoTracksBeforeSourceStarts) { |
| 396 base::test::ScopedFeatureList scoped_feature_list; | |
| 397 scoped_feature_list.InitAndEnableFeature( | |
| 398 features::kMediaStreamOldVideoConstraints); | |
| 399 blink::WebMediaConstraints constraints; | 611 blink::WebMediaConstraints constraints; |
| 400 constraints.initialize(); | 612 constraints.initialize(); |
| 401 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); | 613 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); |
| 402 mock_source()->CompleteGetSupportedFormats(); | 614 mock_source()->CompleteGetSupportedFormats(); |
| 403 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); | 615 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); |
| 404 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); | 616 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); |
| 405 mock_source()->StartMockedSource(); | 617 mock_source()->StartMockedSource(); |
| 406 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | 618 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| 407 } | 619 } |
| 408 | 620 |
| 409 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) { | |
| 410 base::test::ScopedFeatureList scoped_feature_list; | |
| 411 scoped_feature_list.InitAndDisableFeature( | |
| 412 features::kMediaStreamOldVideoConstraints); | |
| 413 blink::WebMediaStreamTrack track1 = CreateTrack("123"); | |
| 414 blink::WebMediaStreamTrack track2 = CreateTrack("123"); | |
| 415 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); | |
| 416 mock_source()->StartMockedSource(); | |
| 417 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | |
| 418 } | |
| 419 | |
| 420 // TODO(guidou): Remove this test. http://crbug.com/706408 | 621 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 421 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStartsOldConstraints) { | 622 TEST_F(MediaStreamVideoSourceOldConstraintsTest, AddTrackAfterSourceStarts) { |
| 422 base::test::ScopedFeatureList scoped_feature_list; | |
| 423 scoped_feature_list.InitAndEnableFeature( | |
| 424 features::kMediaStreamOldVideoConstraints); | |
| 425 blink::WebMediaConstraints constraints; | 623 blink::WebMediaConstraints constraints; |
| 426 constraints.initialize(); | 624 constraints.initialize(); |
| 427 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); | 625 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); |
| 428 mock_source()->CompleteGetSupportedFormats(); | 626 mock_source()->CompleteGetSupportedFormats(); |
| 429 mock_source()->StartMockedSource(); | 627 mock_source()->StartMockedSource(); |
| 430 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 628 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 431 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); | 629 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); |
| 432 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | 630 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| 433 } | 631 } |
| 434 | 632 |
| 435 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) { | |
| 436 base::test::ScopedFeatureList scoped_feature_list; | |
| 437 scoped_feature_list.InitAndDisableFeature( | |
| 438 features::kMediaStreamOldVideoConstraints); | |
| 439 blink::WebMediaStreamTrack track1 = CreateTrack("123"); | |
| 440 mock_source()->StartMockedSource(); | |
| 441 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | |
| 442 blink::WebMediaStreamTrack track2 = CreateTrack("123"); | |
| 443 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | |
| 444 } | |
| 445 | |
| 446 // TODO(guidou): Remove this test. http://crbug.com/706408 | 633 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 447 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSourceOldConstraints) { | 634 TEST_F(MediaStreamVideoSourceOldConstraintsTest, AddTrackAndFailToStartSource) { |
| 448 base::test::ScopedFeatureList scoped_feature_list; | |
| 449 scoped_feature_list.InitAndEnableFeature( | |
| 450 features::kMediaStreamOldVideoConstraints); | |
| 451 blink::WebMediaConstraints constraints; | 635 blink::WebMediaConstraints constraints; |
| 452 constraints.initialize(); | 636 constraints.initialize(); |
| 453 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 637 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
| 454 mock_source()->CompleteGetSupportedFormats(); | 638 mock_source()->CompleteGetSupportedFormats(); |
| 455 mock_source()->FailToStartMockedSource(); | 639 mock_source()->FailToStartMockedSource(); |
| 456 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 640 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 457 } | 641 } |
| 458 | 642 |
| 459 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) { | |
| 460 base::test::ScopedFeatureList scoped_feature_list; | |
| 461 scoped_feature_list.InitAndDisableFeature( | |
| 462 features::kMediaStreamOldVideoConstraints); | |
| 463 blink::WebMediaStreamTrack track = CreateTrack("123"); | |
| 464 mock_source()->FailToStartMockedSource(); | |
| 465 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | |
| 466 } | |
| 467 | |
| 468 // Does not apply with spec-compliant constraints. | 643 // Does not apply with spec-compliant constraints. |
| 469 // TODO(guidou): Remove this test. http://crbug.com/706408 | 644 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 470 TEST_F(MediaStreamVideoSourceTest, | 645 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 471 AddTwoTracksBeforeGetSupportedFormatsOldConstraints) { | 646 AddTwoTracksBeforeGetSupportedFormats) { |
| 472 base::test::ScopedFeatureList scoped_feature_list; | |
| 473 scoped_feature_list.InitAndEnableFeature( | |
| 474 features::kMediaStreamOldVideoConstraints); | |
| 475 blink::WebMediaConstraints constraints; | 647 blink::WebMediaConstraints constraints; |
| 476 constraints.initialize(); | 648 constraints.initialize(); |
| 477 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); | 649 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); |
| 478 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); | 650 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); |
| 479 mock_source()->CompleteGetSupportedFormats(); | 651 mock_source()->CompleteGetSupportedFormats(); |
| 480 mock_source()->StartMockedSource(); | 652 mock_source()->StartMockedSource(); |
| 481 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | 653 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| 482 } | 654 } |
| 483 | 655 |
| 484 // Test that the capture output is CIF if we set max constraints to CIF. | 656 // Test that the capture output is CIF if we set max constraints to CIF. |
| 485 // and the capture device support CIF. | 657 // and the capture device support CIF. |
| 486 // Does not apply with spec-compliant constraints. | 658 // Does not apply with spec-compliant constraints. |
| 487 // TODO(guidou): Remove this test. http://crbug.com/706408 | 659 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 488 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5FpsOldConstraints) { | 660 TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryConstraintCif5Fps) { |
| 489 base::test::ScopedFeatureList scoped_feature_list; | |
| 490 scoped_feature_list.InitAndEnableFeature( | |
| 491 features::kMediaStreamOldVideoConstraints); | |
| 492 MockConstraintFactory factory; | 661 MockConstraintFactory factory; |
| 493 factory.basic().width.setMax(352); | 662 factory.basic().width.setMax(352); |
| 494 factory.basic().height.setMax(288); | 663 factory.basic().height.setMax(288); |
| 495 factory.basic().frameRate.setMax(5.0); | 664 factory.basic().frameRate.setMax(5.0); |
| 496 | 665 |
| 497 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 352, 288, 5); | 666 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 352, 288, 5); |
| 498 } | 667 } |
| 499 | 668 |
| 500 // Test that the capture output is 720P if the camera support it and the | 669 // Test that the capture output is 720P if the camera support it and the |
| 501 // optional constraint is set to 720P. | 670 // optional constraint is set to 720P. |
| 502 // Does not apply with spec-compliant constraints. | 671 // Does not apply with spec-compliant constraints. |
| 503 // TODO(guidou): Remove this test. http://crbug.com/706408 | 672 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 504 TEST_F(MediaStreamVideoSourceTest, MandatoryMinVgaOptional720POldConstraints) { | 673 TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryMinVgaOptional720P) { |
| 505 base::test::ScopedFeatureList scoped_feature_list; | |
| 506 scoped_feature_list.InitAndEnableFeature( | |
| 507 features::kMediaStreamOldVideoConstraints); | |
| 508 MockConstraintFactory factory; | 674 MockConstraintFactory factory; |
| 509 factory.basic().width.setMin(640); | 675 factory.basic().width.setMin(640); |
| 510 factory.basic().height.setMin(480); | 676 factory.basic().height.setMin(480); |
| 511 factory.AddAdvanced().width.setMin(1280); | 677 factory.AddAdvanced().width.setMin(1280); |
| 512 factory.AddAdvanced().aspectRatio.setMin(1280.0 / 720); | 678 factory.AddAdvanced().aspectRatio.setMin(1280.0 / 720); |
| 513 | 679 |
| 514 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); | 680 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); |
| 515 } | 681 } |
| 516 | 682 |
| 517 // Test that the capture output is 720P if the camera supports it and the | 683 // Test that the capture output is 720P if the camera supports it and the |
| 518 // mandatory constraint is exactly width 1280. | 684 // mandatory constraint is exactly width 1280. |
| 519 // Does not apply with spec-compliant constraints. | 685 // Does not apply with spec-compliant constraints. |
| 520 // TODO(guidou): Remove this test. http://crbug.com/706408 | 686 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 521 TEST_F(MediaStreamVideoSourceTest, MandatoryExact720POldConstraints) { | 687 TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryExact720P) { |
| 522 base::test::ScopedFeatureList scoped_feature_list; | |
| 523 scoped_feature_list.InitAndEnableFeature( | |
| 524 features::kMediaStreamOldVideoConstraints); | |
| 525 MockConstraintFactory factory; | 688 MockConstraintFactory factory; |
| 526 factory.basic().width.setExact(1280); | 689 factory.basic().width.setExact(1280); |
| 527 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); | 690 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); |
| 528 } | 691 } |
| 529 | 692 |
| 530 // Test that the capture output have aspect ratio 4:3 if a mandatory constraint | 693 // Test that the capture output have aspect ratio 4:3 if a mandatory constraint |
| 531 // require it even if an optional constraint request a higher resolution | 694 // require it even if an optional constraint request a higher resolution |
| 532 // that don't have this aspect ratio. | 695 // that don't have this aspect ratio. |
| 533 // TODO(guidou): Remove this test. http://crbug.com/706408 | 696 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 534 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3OldConstraints) { | 697 TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryAspectRatio4To3) { |
| 535 base::test::ScopedFeatureList scoped_feature_list; | |
| 536 scoped_feature_list.InitAndEnableFeature( | |
| 537 features::kMediaStreamOldVideoConstraints); | |
| 538 MockConstraintFactory factory; | 698 MockConstraintFactory factory; |
| 539 factory.basic().width.setMin(640); | 699 factory.basic().width.setMin(640); |
| 540 factory.basic().height.setMin(480); | 700 factory.basic().height.setMin(480); |
| 541 factory.basic().aspectRatio.setMax(640.0 / 480); | 701 factory.basic().aspectRatio.setMax(640.0 / 480); |
| 542 factory.AddAdvanced().width.setMin(1280); | 702 factory.AddAdvanced().width.setMin(1280); |
| 543 | 703 |
| 544 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 960, 720); | 704 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 960, 720); |
| 545 } | 705 } |
| 546 | 706 |
| 547 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3) { | |
| 548 base::test::ScopedFeatureList scoped_feature_list; | |
| 549 scoped_feature_list.InitAndDisableFeature( | |
| 550 features::kMediaStreamOldVideoConstraints); | |
| 551 TestSourceCropFrame(1280, 720, 960, 720); | |
| 552 } | |
| 553 | |
| 554 // Test that AddTrack succeeds if the mandatory min aspect ratio it set to 2. | 707 // Test that AddTrack succeeds if the mandatory min aspect ratio it set to 2. |
| 555 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2OldConstraints) { | 708 TEST_F(MediaStreamVideoSourceOldConstraintsTest, MandatoryAspectRatio2) { |
| 556 base::test::ScopedFeatureList scoped_feature_list; | |
| 557 scoped_feature_list.InitAndEnableFeature( | |
| 558 features::kMediaStreamOldVideoConstraints); | |
| 559 MockConstraintFactory factory; | 709 MockConstraintFactory factory; |
| 560 factory.basic().aspectRatio.setMin(2.0); | 710 factory.basic().aspectRatio.setMin(2.0); |
| 561 | 711 |
| 562 TestSourceCropFrame(MediaStreamVideoSource::kDefaultWidth, | 712 TestSourceCropFrame(MediaStreamVideoSource::kDefaultWidth, |
| 563 MediaStreamVideoSource::kDefaultHeight, | 713 MediaStreamVideoSource::kDefaultHeight, |
| 564 factory.CreateWebMediaConstraints(), 640, 320); | 714 factory.CreateWebMediaConstraints(), 640, 320); |
| 565 } | 715 } |
| 566 | 716 |
| 567 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2) { | |
| 568 base::test::ScopedFeatureList scoped_feature_list; | |
| 569 scoped_feature_list.InitAndDisableFeature( | |
| 570 features::kMediaStreamOldVideoConstraints); | |
| 571 TestSourceCropFrame(1280, 720, 960, 720); | |
| 572 } | |
| 573 | |
| 574 // Does not apply with spec-compliant constraints. | 717 // Does not apply with spec-compliant constraints. |
| 575 // TODO(guidou): Remove this test. http://crbug.com/706408 | 718 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 576 TEST_F(MediaStreamVideoSourceTest, | 719 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 577 MinAspectRatioLargerThanMaxAspectRatioOldConstraints) { | 720 MinAspectRatioLargerThanMaxAspectRatio) { |
| 578 base::test::ScopedFeatureList scoped_feature_list; | |
| 579 scoped_feature_list.InitAndEnableFeature( | |
| 580 features::kMediaStreamOldVideoConstraints); | |
| 581 MockConstraintFactory factory; | 721 MockConstraintFactory factory; |
| 582 factory.basic().aspectRatio.setMin(2.0); | 722 factory.basic().aspectRatio.setMin(2.0); |
| 583 factory.basic().aspectRatio.setMax(1.0); | 723 factory.basic().aspectRatio.setMax(1.0); |
| 584 blink::WebMediaStreamTrack track = | 724 blink::WebMediaStreamTrack track = |
| 585 CreateTrack("123", factory.CreateWebMediaConstraints()); | 725 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 586 mock_source()->CompleteGetSupportedFormats(); | 726 mock_source()->CompleteGetSupportedFormats(); |
| 587 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 727 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 588 } | 728 } |
| 589 | 729 |
| 590 // Does not apply with spec-compliant constraints. | 730 // Does not apply with spec-compliant constraints. |
| 591 // TODO(guidou): Remove this test. http://crbug.com/706408 | 731 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 592 TEST_F(MediaStreamVideoSourceTest, MinWidthLargerThanMaxWidthOldConstraints) { | 732 TEST_F(MediaStreamVideoSourceOldConstraintsTest, MinWidthLargerThanMaxWidth) { |
| 593 base::test::ScopedFeatureList scoped_feature_list; | |
| 594 scoped_feature_list.InitAndEnableFeature( | |
| 595 features::kMediaStreamOldVideoConstraints); | |
| 596 MockConstraintFactory factory; | 733 MockConstraintFactory factory; |
| 597 factory.basic().width.setMin(640); | 734 factory.basic().width.setMin(640); |
| 598 factory.basic().width.setMax(320); | 735 factory.basic().width.setMax(320); |
| 599 blink::WebMediaStreamTrack track = | 736 blink::WebMediaStreamTrack track = |
| 600 CreateTrack("123", factory.CreateWebMediaConstraints()); | 737 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 601 mock_source()->CompleteGetSupportedFormats(); | 738 mock_source()->CompleteGetSupportedFormats(); |
| 602 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 739 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 603 } | 740 } |
| 604 | 741 |
| 605 // Does not apply with spec-compliant constraints. | 742 // Does not apply with spec-compliant constraints. |
| 606 // TODO(guidou): Remove this test. http://crbug.com/706408 | 743 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 607 TEST_F(MediaStreamVideoSourceTest, MinHeightLargerThanMaxHeightOldConstraints) { | 744 TEST_F(MediaStreamVideoSourceOldConstraintsTest, MinHeightLargerThanMaxHeight) { |
| 608 base::test::ScopedFeatureList scoped_feature_list; | |
| 609 scoped_feature_list.InitAndEnableFeature( | |
| 610 features::kMediaStreamOldVideoConstraints); | |
| 611 MockConstraintFactory factory; | 745 MockConstraintFactory factory; |
| 612 factory.basic().height.setMin(480); | 746 factory.basic().height.setMin(480); |
| 613 factory.basic().height.setMax(360); | 747 factory.basic().height.setMax(360); |
| 614 | 748 |
| 615 blink::WebMediaStreamTrack track = | 749 blink::WebMediaStreamTrack track = |
| 616 CreateTrack("123", factory.CreateWebMediaConstraints()); | 750 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 617 mock_source()->CompleteGetSupportedFormats(); | 751 mock_source()->CompleteGetSupportedFormats(); |
| 618 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 752 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 619 } | 753 } |
| 620 | 754 |
| 621 // Does not apply with spec-compliant constraints. | 755 // Does not apply with spec-compliant constraints. |
| 622 // TODO(guidou): Remove this test. http://crbug.com/706408 | 756 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 623 TEST_F(MediaStreamVideoSourceTest, | 757 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 624 MinFrameRateLargerThanMaxFrameRateOldConstraints) { | 758 MinFrameRateLargerThanMaxFrameRate) { |
| 625 base::test::ScopedFeatureList scoped_feature_list; | |
| 626 scoped_feature_list.InitAndEnableFeature( | |
| 627 features::kMediaStreamOldVideoConstraints); | |
| 628 MockConstraintFactory factory; | 759 MockConstraintFactory factory; |
| 629 factory.basic().frameRate.setMin(25); | 760 factory.basic().frameRate.setMin(25); |
| 630 factory.basic().frameRate.setMax(15); | 761 factory.basic().frameRate.setMax(15); |
| 631 blink::WebMediaStreamTrack track = | 762 blink::WebMediaStreamTrack track = |
| 632 CreateTrack("123", factory.CreateWebMediaConstraints()); | 763 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 633 mock_source()->CompleteGetSupportedFormats(); | 764 mock_source()->CompleteGetSupportedFormats(); |
| 634 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 765 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 635 } | 766 } |
| 636 | 767 |
| 637 // Does not apply with spec-compliant constraints. | 768 // Does not apply with spec-compliant constraints. |
| 638 // TODO(guidou): Remove this test. http://crbug.com/706408 | 769 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 639 TEST_F(MediaStreamVideoSourceTest, ExactWidthNotSupportedOldConstraints) { | 770 TEST_F(MediaStreamVideoSourceOldConstraintsTest, ExactWidthNotSupported) { |
| 640 base::test::ScopedFeatureList scoped_feature_list; | |
| 641 scoped_feature_list.InitAndEnableFeature( | |
| 642 features::kMediaStreamOldVideoConstraints); | |
| 643 MockConstraintFactory factory; | 771 MockConstraintFactory factory; |
| 644 factory.basic().width.setExact(12000); | 772 factory.basic().width.setExact(12000); |
| 645 blink::WebMediaStreamTrack track = | 773 blink::WebMediaStreamTrack track = |
| 646 CreateTrack("123", factory.CreateWebMediaConstraints()); | 774 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 647 mock_source()->CompleteGetSupportedFormats(); | 775 mock_source()->CompleteGetSupportedFormats(); |
| 648 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 776 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 649 } | 777 } |
| 650 | 778 |
| 651 // Does not apply with spec-compliant constraints. | 779 // Does not apply with spec-compliant constraints. |
| 652 // TODO(guidou): Remove this test. http://crbug.com/706408 | 780 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 653 TEST_F(MediaStreamVideoSourceTest, MinWidthNotSupportedOldConstraints) { | 781 TEST_F(MediaStreamVideoSourceOldConstraintsTest, MinWidthNotSupported) { |
| 654 base::test::ScopedFeatureList scoped_feature_list; | |
| 655 scoped_feature_list.InitAndEnableFeature( | |
| 656 features::kMediaStreamOldVideoConstraints); | |
| 657 MockConstraintFactory factory; | 782 MockConstraintFactory factory; |
| 658 factory.basic().width.setMin(12000); | 783 factory.basic().width.setMin(12000); |
| 659 blink::WebMediaStreamTrack track = | 784 blink::WebMediaStreamTrack track = |
| 660 CreateTrack("123", factory.CreateWebMediaConstraints()); | 785 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 661 mock_source()->CompleteGetSupportedFormats(); | 786 mock_source()->CompleteGetSupportedFormats(); |
| 662 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 787 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 663 } | 788 } |
| 664 | 789 |
| 665 // Test that its safe to release the last reference of a blink track and the | 790 // Test that its safe to release the last reference of a blink track and the |
| 666 // source during the callback if adding a track succeeds. | 791 // source during the callback if adding a track succeeds. |
| 667 // TODO(guidou): Remove this test. http://crbug.com/706408 | 792 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 668 TEST_F(MediaStreamVideoSourceTest, | 793 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 669 ReleaseTrackAndSourceOnSuccessCallBackOldConstraints) { | 794 ReleaseTrackAndSourceOnSuccessCallBack) { |
| 670 base::test::ScopedFeatureList scoped_feature_list; | |
| 671 scoped_feature_list.InitAndEnableFeature( | |
| 672 features::kMediaStreamOldVideoConstraints); | |
| 673 MockConstraintFactory factory; | 795 MockConstraintFactory factory; |
| 674 blink::WebMediaStreamTrack track = | 796 blink::WebMediaStreamTrack track = |
| 675 CreateTrack("123", factory.CreateWebMediaConstraints()); | 797 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 676 ReleaseTrackAndSourceOnAddTrackCallback(track); | 798 ReleaseTrackAndSourceOnAddTrackCallback(track); |
| 677 mock_source()->CompleteGetSupportedFormats(); | 799 mock_source()->CompleteGetSupportedFormats(); |
| 678 mock_source()->StartMockedSource(); | 800 mock_source()->StartMockedSource(); |
| 679 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 801 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 680 } | 802 } |
| 681 | 803 |
| 682 TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) { | |
| 683 base::test::ScopedFeatureList scoped_feature_list; | |
| 684 scoped_feature_list.InitAndDisableFeature( | |
| 685 features::kMediaStreamOldVideoConstraints); | |
| 686 blink::WebMediaStreamTrack track = CreateTrack("123"); | |
| 687 ReleaseTrackAndSourceOnAddTrackCallback(track); | |
| 688 mock_source()->StartMockedSource(); | |
| 689 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | |
| 690 } | |
| 691 | |
| 692 // Test that its safe to release the last reference of a blink track and the | 804 // Test that its safe to release the last reference of a blink track and the |
| 693 // source during the callback if adding a track fails. | 805 // source during the callback if adding a track fails. |
| 694 // Does not apply with spec-compliant constraints. | 806 // Does not apply with spec-compliant constraints. |
| 695 // TODO(guidou): Remove this test. http://crbug.com/706408 | 807 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 696 TEST_F(MediaStreamVideoSourceTest, | 808 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 697 ReleaseTrackAndSourceOnFailureCallBackOldConstraints) { | 809 ReleaseTrackAndSourceOnFailureCallBack) { |
| 698 base::test::ScopedFeatureList scoped_feature_list; | |
| 699 scoped_feature_list.InitAndEnableFeature( | |
| 700 features::kMediaStreamOldVideoConstraints); | |
| 701 MockConstraintFactory factory; | 810 MockConstraintFactory factory; |
| 702 factory.basic().width.setMin(99999); | 811 factory.basic().width.setMin(99999); |
| 703 { | 812 { |
| 704 blink::WebMediaStreamTrack track = | 813 blink::WebMediaStreamTrack track = |
| 705 CreateTrack("123", factory.CreateWebMediaConstraints()); | 814 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 706 ReleaseTrackAndSourceOnAddTrackCallback(track); | 815 ReleaseTrackAndSourceOnAddTrackCallback(track); |
| 707 } | 816 } |
| 708 mock_source()->CompleteGetSupportedFormats(); | 817 mock_source()->CompleteGetSupportedFormats(); |
| 709 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 818 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 710 } | 819 } |
| 711 | 820 |
| 712 // Test that the source ignores an optional aspect ratio that is higher than | 821 // Test that the source ignores an optional aspect ratio that is higher than |
| 713 // supported. | 822 // supported. |
| 714 // Does not apply with spec-compliant constraints. | 823 // Does not apply with spec-compliant constraints. |
| 715 // TODO(guidou): Remove this test. http://crbug.com/706408 | 824 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 716 TEST_F(MediaStreamVideoSourceTest, OptionalAspectRatioTooHighOldConstraints) { | 825 TEST_F(MediaStreamVideoSourceOldConstraintsTest, OptionalAspectRatioTooHigh) { |
| 717 base::test::ScopedFeatureList scoped_feature_list; | |
| 718 scoped_feature_list.InitAndEnableFeature( | |
| 719 features::kMediaStreamOldVideoConstraints); | |
| 720 MockConstraintFactory factory; | 826 MockConstraintFactory factory; |
| 721 factory.AddAdvanced().aspectRatio.setMin(2.0); | 827 factory.AddAdvanced().aspectRatio.setMin(2.0); |
| 722 blink::WebMediaStreamTrack track = | 828 blink::WebMediaStreamTrack track = |
| 723 CreateTrack("123", factory.CreateWebMediaConstraints()); | 829 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 724 mock_source()->CompleteGetSupportedFormats(); | 830 mock_source()->CompleteGetSupportedFormats(); |
| 725 | 831 |
| 726 const media::VideoCaptureFormat& format = mock_source()->start_format(); | 832 const media::VideoCaptureFormat& format = mock_source()->start_format(); |
| 727 const double aspect_ratio = static_cast<double>(format.frame_size.width()) / | 833 const double aspect_ratio = static_cast<double>(format.frame_size.width()) / |
| 728 format.frame_size.height(); | 834 format.frame_size.height(); |
| 729 EXPECT_LT(aspect_ratio, 2); | 835 EXPECT_LT(aspect_ratio, 2); |
| 730 } | 836 } |
| 731 | 837 |
| 732 // Test that the source starts video with the default resolution if the | 838 // Test that the source starts video with the default resolution if the |
| 733 // that is the only supported. | 839 // that is the only supported. |
| 734 // Does not apply with spec-compliant constraints. | 840 // Does not apply with spec-compliant constraints. |
| 735 // TODO(guidou): Remove this test. http://crbug.com/706408 | 841 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 736 TEST_F(MediaStreamVideoSourceTest, DefaultCapabilityOldConstraints) { | 842 TEST_F(MediaStreamVideoSourceOldConstraintsTest, DefaultCapability) { |
| 737 base::test::ScopedFeatureList scoped_feature_list; | |
| 738 scoped_feature_list.InitAndEnableFeature( | |
| 739 features::kMediaStreamOldVideoConstraints); | |
| 740 media::VideoCaptureFormats formats; | 843 media::VideoCaptureFormats formats; |
| 741 formats.push_back(media::VideoCaptureFormat( | 844 formats.push_back(media::VideoCaptureFormat( |
| 742 gfx::Size(MediaStreamVideoSource::kDefaultWidth, | 845 gfx::Size(MediaStreamVideoSource::kDefaultWidth, |
| 743 MediaStreamVideoSource::kDefaultHeight), | 846 MediaStreamVideoSource::kDefaultHeight), |
| 744 MediaStreamVideoSource::kDefaultFrameRate, media::PIXEL_FORMAT_I420)); | 847 MediaStreamVideoSource::kDefaultFrameRate, media::PIXEL_FORMAT_I420)); |
| 745 mock_source()->SetSupportedFormats(formats); | 848 mock_source()->SetSupportedFormats(formats); |
| 746 | 849 |
| 747 blink::WebMediaConstraints constraints; | 850 blink::WebMediaConstraints constraints; |
| 748 constraints.initialize(); | 851 constraints.initialize(); |
| 749 CreateTrackAndStartSource(constraints, MediaStreamVideoSource::kDefaultWidth, | 852 CreateTrackAndStartSource(constraints, MediaStreamVideoSource::kDefaultWidth, |
| 750 MediaStreamVideoSource::kDefaultHeight, 30); | 853 MediaStreamVideoSource::kDefaultHeight, 30); |
| 751 } | 854 } |
| 752 | 855 |
| 753 // Does not apply with spec-compliant constraints. | 856 // Does not apply with spec-compliant constraints. |
| 754 // TODO(guidou): Remove this test. http://crbug.com/706408 | 857 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 755 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraintOldConstraints) { | 858 TEST_F(MediaStreamVideoSourceOldConstraintsTest, InvalidMandatoryConstraint) { |
| 756 base::test::ScopedFeatureList scoped_feature_list; | |
| 757 scoped_feature_list.InitAndEnableFeature( | |
| 758 features::kMediaStreamOldVideoConstraints); | |
| 759 MockConstraintFactory factory; | 859 MockConstraintFactory factory; |
| 760 // Use a constraint that is only known for audio. | 860 // Use a constraint that is only known for audio. |
| 761 factory.basic().echoCancellation.setExact(true); | 861 factory.basic().echoCancellation.setExact(true); |
| 762 blink::WebMediaStreamTrack track = | 862 blink::WebMediaStreamTrack track = |
| 763 CreateTrack("123", factory.CreateWebMediaConstraints()); | 863 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 764 mock_source()->CompleteGetSupportedFormats(); | 864 mock_source()->CompleteGetSupportedFormats(); |
| 765 EXPECT_EQ(MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED, error_type()); | 865 EXPECT_EQ(MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED, error_type()); |
| 766 EXPECT_EQ("echoCancellation", error_name()); | 866 EXPECT_EQ("echoCancellation", error_name()); |
| 767 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 867 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 768 } | 868 } |
| 769 | 869 |
| 770 // Test that the source ignores an unknown optional constraint. | 870 // Test that the source ignores an unknown optional constraint. |
| 771 // Does not apply with spec-compliant constraints. | 871 // Does not apply with spec-compliant constraints. |
| 772 // TODO(guidou): Remove this test. http://crbug.com/706408 | 872 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 773 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraintOldConstraints) { | 873 TEST_F(MediaStreamVideoSourceOldConstraintsTest, InvalidOptionalConstraint) { |
| 774 base::test::ScopedFeatureList scoped_feature_list; | |
| 775 scoped_feature_list.InitAndEnableFeature( | |
| 776 features::kMediaStreamOldVideoConstraints); | |
| 777 MockConstraintFactory factory; | 874 MockConstraintFactory factory; |
| 778 factory.AddAdvanced().echoCancellation.setExact(true); | 875 factory.AddAdvanced().echoCancellation.setExact(true); |
| 779 | 876 |
| 780 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), | 877 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), |
| 781 MediaStreamVideoSource::kDefaultWidth, | 878 MediaStreamVideoSource::kDefaultWidth, |
| 782 MediaStreamVideoSource::kDefaultHeight, 30); | 879 MediaStreamVideoSource::kDefaultHeight, 30); |
| 783 } | 880 } |
| 784 | 881 |
| 785 // Tests that the source starts video with the max width and height set by | 882 // Tests that the source starts video with the max width and height set by |
| 786 // constraints for screencast. | 883 // constraints for screencast. |
| 787 // Does not apply with spec-compliant constraints. | 884 // Does not apply with spec-compliant constraints. |
| 788 // TODO(guidou): Remove this test. http://crbug.com/706408 | 885 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 789 TEST_F(MediaStreamVideoSourceTest, | 886 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 790 ScreencastResolutionWithConstraintOldConstraints) { | 887 ScreencastResolutionWithConstraint) { |
| 791 base::test::ScopedFeatureList scoped_feature_list; | |
| 792 scoped_feature_list.InitAndEnableFeature( | |
| 793 features::kMediaStreamOldVideoConstraints); | |
| 794 media::VideoCaptureFormats formats; | 888 media::VideoCaptureFormats formats; |
| 795 formats.push_back(media::VideoCaptureFormat(gfx::Size(480, 270), 30, | 889 formats.push_back(media::VideoCaptureFormat(gfx::Size(480, 270), 30, |
| 796 media::PIXEL_FORMAT_I420)); | 890 media::PIXEL_FORMAT_I420)); |
| 797 mock_source()->SetSupportedFormats(formats); | 891 mock_source()->SetSupportedFormats(formats); |
| 798 MockConstraintFactory factory; | 892 MockConstraintFactory factory; |
| 799 factory.basic().width.setMax(480); | 893 factory.basic().width.setMax(480); |
| 800 factory.basic().height.setMax(270); | 894 factory.basic().height.setMax(270); |
| 801 | 895 |
| 802 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( | 896 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( |
| 803 factory.CreateWebMediaConstraints(), 480, 270, 30); | 897 factory.CreateWebMediaConstraints(), 480, 270, 30); |
| 804 EXPECT_EQ(480, mock_source()->max_requested_height()); | 898 EXPECT_EQ(480, mock_source()->max_requested_height()); |
| 805 EXPECT_EQ(270, mock_source()->max_requested_width()); | 899 EXPECT_EQ(270, mock_source()->max_requested_width()); |
| 806 } | 900 } |
| 807 | 901 |
| 808 // Test that optional constraints are applied in order. | 902 // Test that optional constraints are applied in order. |
| 809 // Does not apply with spec-compliant constraints. | 903 // Does not apply with spec-compliant constraints. |
| 810 // TODO(guidou): Remove this test. http://crbug.com/706408 | 904 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 811 TEST_F(MediaStreamVideoSourceTest, OptionalConstraintsOldConstraints) { | 905 TEST_F(MediaStreamVideoSourceOldConstraintsTest, OptionalConstraints) { |
| 812 base::test::ScopedFeatureList scoped_feature_list; | |
| 813 scoped_feature_list.InitAndEnableFeature( | |
| 814 features::kMediaStreamOldVideoConstraints); | |
| 815 MockConstraintFactory factory; | 906 MockConstraintFactory factory; |
| 816 // Min width of 2056 pixels can not be fulfilled. | 907 // Min width of 2056 pixels can not be fulfilled. |
| 817 factory.AddAdvanced().width.setMin(2056); | 908 factory.AddAdvanced().width.setMin(2056); |
| 818 factory.AddAdvanced().width.setMin(641); | 909 factory.AddAdvanced().width.setMin(641); |
| 819 // Since min width is set to 641 pixels, max width 640 can not be fulfilled. | 910 // Since min width is set to 641 pixels, max width 640 can not be fulfilled. |
| 820 factory.AddAdvanced().width.setMax(640); | 911 factory.AddAdvanced().width.setMax(640); |
| 821 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); | 912 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); |
| 822 } | 913 } |
| 823 | 914 |
| 824 // Test that the source crops to the requested max width and | 915 // Test that the source crops to the requested max width and |
| 825 // height even though the camera delivers a larger frame. | 916 // height even though the camera delivers a larger frame. |
| 826 // Redundant with spec-compliant constraints. | 917 // Redundant with spec-compliant constraints. |
| 827 // TODO(guidou): Remove this test. http://crbug.com/706408 | 918 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 828 TEST_F(MediaStreamVideoSourceTest, | 919 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 829 DeliverCroppedVideoFrameOptional640360OldConstraints) { | 920 DeliverCroppedVideoFrameOptional640360) { |
| 830 base::test::ScopedFeatureList scoped_feature_list; | |
| 831 scoped_feature_list.InitAndEnableFeature( | |
| 832 features::kMediaStreamOldVideoConstraints); | |
| 833 MockConstraintFactory factory; | 921 MockConstraintFactory factory; |
| 834 factory.AddAdvanced().width.setMax(640); | 922 factory.AddAdvanced().width.setMax(640); |
| 835 factory.AddAdvanced().height.setMax(360); | 923 factory.AddAdvanced().height.setMax(360); |
| 836 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360); | 924 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360); |
| 837 } | 925 } |
| 838 | 926 |
| 839 // Redundant with spec-compliant constraints. | 927 // Redundant with spec-compliant constraints. |
| 840 // TODO(guidou): Remove this test. http://crbug.com/706408 | 928 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 841 TEST_F(MediaStreamVideoSourceTest, | 929 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 842 DeliverCroppedVideoFrameMandatory640360OldConstraints) { | 930 DeliverCroppedVideoFrameMandatory640360) { |
| 843 base::test::ScopedFeatureList scoped_feature_list; | |
| 844 scoped_feature_list.InitAndEnableFeature( | |
| 845 features::kMediaStreamOldVideoConstraints); | |
| 846 MockConstraintFactory factory; | 931 MockConstraintFactory factory; |
| 847 factory.basic().width.setMax(640); | 932 factory.basic().width.setMax(640); |
| 848 factory.basic().height.setMax(360); | 933 factory.basic().height.setMax(360); |
| 849 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360); | 934 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360); |
| 850 } | 935 } |
| 851 | 936 |
| 852 // Redundant with spec-compliant constraints. | 937 // Redundant with spec-compliant constraints. |
| 853 // TODO(guidou): Remove this test. http://crbug.com/706408 | 938 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 854 TEST_F(MediaStreamVideoSourceTest, | 939 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 855 DeliverCroppedVideoFrameMandatory732489OldConstraints) { | 940 DeliverCroppedVideoFrameMandatory732489) { |
| 856 base::test::ScopedFeatureList scoped_feature_list; | |
| 857 scoped_feature_list.InitAndEnableFeature( | |
| 858 features::kMediaStreamOldVideoConstraints); | |
| 859 MockConstraintFactory factory; | 941 MockConstraintFactory factory; |
| 860 factory.basic().width.setMax(732); | 942 factory.basic().width.setMax(732); |
| 861 factory.basic().height.setMax(489); | 943 factory.basic().height.setMax(489); |
| 862 factory.basic().width.setMin(732); | 944 factory.basic().width.setMin(732); |
| 863 factory.basic().height.setMin(489); | 945 factory.basic().height.setMin(489); |
| 864 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 732, 489); | 946 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 732, 489); |
| 865 } | 947 } |
| 866 | 948 |
| 867 // Test that the source crops to the requested max width and | 949 // Test that the source crops to the requested max width and |
| 868 // height even though the requested frame has odd size. | 950 // height even though the requested frame has odd size. |
| 869 // Redundant with spec-compliant constraints. | 951 // Redundant with spec-compliant constraints. |
| 870 // TODO(guidou): Remove this test. http://crbug.com/706408 | 952 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 871 TEST_F(MediaStreamVideoSourceTest, | 953 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 872 DeliverCroppedVideoFrame637359OldConstraints) { | 954 DeliverCroppedVideoFrame637359) { |
| 873 base::test::ScopedFeatureList scoped_feature_list; | |
| 874 scoped_feature_list.InitAndEnableFeature( | |
| 875 features::kMediaStreamOldVideoConstraints); | |
| 876 MockConstraintFactory factory; | 955 MockConstraintFactory factory; |
| 877 factory.AddAdvanced().width.setMax(637); | 956 factory.AddAdvanced().width.setMax(637); |
| 878 factory.AddAdvanced().height.setMax(359); | 957 factory.AddAdvanced().height.setMax(359); |
| 879 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 637, 359); | 958 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 637, 359); |
| 880 } | 959 } |
| 881 | 960 |
| 882 // Redundant with spec-compliant constraints. | 961 // Redundant with spec-compliant constraints. |
| 883 // TODO(guidou): Remove this test. http://crbug.com/706408 | 962 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 884 TEST_F(MediaStreamVideoSourceTest, | 963 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 885 DeliverCroppedVideoFrame320320OldConstraints) { | 964 DeliverCroppedVideoFrame320320) { |
| 886 base::test::ScopedFeatureList scoped_feature_list; | |
| 887 scoped_feature_list.InitAndEnableFeature( | |
| 888 features::kMediaStreamOldVideoConstraints); | |
| 889 MockConstraintFactory factory; | 965 MockConstraintFactory factory; |
| 890 factory.basic().width.setMax(320); | 966 factory.basic().width.setMax(320); |
| 891 factory.basic().height.setMax(320); | 967 factory.basic().height.setMax(320); |
| 892 factory.basic().height.setMin(320); | 968 factory.basic().height.setMin(320); |
| 893 factory.basic().width.setMax(320); | 969 factory.basic().width.setMax(320); |
| 894 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 320, 320); | 970 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 320, 320); |
| 895 } | 971 } |
| 896 | 972 |
| 897 // Redundant with spec-compliant constraints. | 973 // Redundant with spec-compliant constraints. |
| 898 // TODO(guidou): Remove this test. http://crbug.com/706408 | 974 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 899 TEST_F(MediaStreamVideoSourceTest, | 975 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 900 DeliverSmallerSizeWhenTooLargeMaxOldConstraints) { | 976 DeliverSmallerSizeWhenTooLargeMax) { |
| 901 base::test::ScopedFeatureList scoped_feature_list; | |
| 902 scoped_feature_list.InitAndEnableFeature( | |
| 903 features::kMediaStreamOldVideoConstraints); | |
| 904 MockConstraintFactory factory; | 977 MockConstraintFactory factory; |
| 905 factory.AddAdvanced().width.setMax(1920); | 978 factory.AddAdvanced().width.setMax(1920); |
| 906 factory.AddAdvanced().height.setMax(1080); | 979 factory.AddAdvanced().height.setMax(1080); |
| 907 factory.AddAdvanced().width.setMin(1280); | 980 factory.AddAdvanced().width.setMin(1280); |
| 908 factory.AddAdvanced().height.setMin(720); | 981 factory.AddAdvanced().height.setMin(720); |
| 909 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 1280, | 982 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 1280, |
| 910 720); | 983 720); |
| 911 } | 984 } |
| 912 | 985 |
| 913 // TODO(guidou): Remove this test. http://crbug.com/706408 | 986 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 914 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGAOldConstraints) { | 987 TEST_F(MediaStreamVideoSourceOldConstraintsTest, TwoTracksWithVGAAndWVGA) { |
| 915 base::test::ScopedFeatureList scoped_feature_list; | |
| 916 scoped_feature_list.InitAndEnableFeature( | |
| 917 features::kMediaStreamOldVideoConstraints); | |
| 918 MockConstraintFactory factory1; | 988 MockConstraintFactory factory1; |
| 919 factory1.AddAdvanced().width.setMax(640); | 989 factory1.AddAdvanced().width.setMax(640); |
| 920 factory1.AddAdvanced().height.setMax(480); | 990 factory1.AddAdvanced().height.setMax(480); |
| 921 | 991 |
| 922 MockConstraintFactory factory2; | 992 MockConstraintFactory factory2; |
| 923 factory2.AddAdvanced().height.setMax(360); | 993 factory2.AddAdvanced().height.setMax(360); |
| 924 | 994 |
| 925 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), | 995 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), |
| 926 factory2.CreateWebMediaConstraints(), | 996 factory2.CreateWebMediaConstraints(), |
| 927 640, 480, 640, 480, 640, 360); | 997 640, 480, 640, 480, 640, 360); |
| 928 } | 998 } |
| 929 | 999 |
| 930 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGA) { | |
| 931 base::test::ScopedFeatureList scoped_feature_list; | |
| 932 scoped_feature_list.InitAndDisableFeature( | |
| 933 features::kMediaStreamOldVideoConstraints); | |
| 934 TestTwoTracksWithDifferentSettings(640, 480, 640, 480, 640, 360); | |
| 935 } | |
| 936 | |
| 937 // Redundant with spec-compliant constraints | 1000 // Redundant with spec-compliant constraints |
| 938 // TODO(guidou): Remove this test. http://crbug.com/706408 | 1001 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 939 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGAOldConstraints) { | 1002 TEST_F(MediaStreamVideoSourceOldConstraintsTest, TwoTracksWith720AndWVGA) { |
| 940 base::test::ScopedFeatureList scoped_feature_list; | |
| 941 scoped_feature_list.InitAndEnableFeature( | |
| 942 features::kMediaStreamOldVideoConstraints); | |
| 943 MockConstraintFactory factory1; | 1003 MockConstraintFactory factory1; |
| 944 factory1.AddAdvanced().width.setMin(1280); | 1004 factory1.AddAdvanced().width.setMin(1280); |
| 945 factory1.AddAdvanced().height.setMin(720); | 1005 factory1.AddAdvanced().height.setMin(720); |
| 946 | 1006 |
| 947 MockConstraintFactory factory2; | 1007 MockConstraintFactory factory2; |
| 948 factory2.basic().width.setMax(640); | 1008 factory2.basic().width.setMax(640); |
| 949 factory2.basic().height.setMax(360); | 1009 factory2.basic().height.setMax(360); |
| 950 | 1010 |
| 951 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), | 1011 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), |
| 952 factory2.CreateWebMediaConstraints(), | 1012 factory2.CreateWebMediaConstraints(), |
| 953 1280, 720, 1280, 720, 640, 360); | 1013 1280, 720, 1280, 720, 640, 360); |
| 954 } | 1014 } |
| 955 | 1015 |
| 956 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGA) { | |
| 957 base::test::ScopedFeatureList scoped_feature_list; | |
| 958 scoped_feature_list.InitAndDisableFeature( | |
| 959 features::kMediaStreamOldVideoConstraints); | |
| 960 TestTwoTracksWithDifferentSettings(1280, 720, 1280, 720, 640, 360); | |
| 961 } | |
| 962 | |
| 963 // Redundant with spec-compliant constraints | 1016 // Redundant with spec-compliant constraints |
| 964 // TODO(guidou): Remove this test. http://crbug.com/706408 | 1017 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 965 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndW700H700OldConstraints) { | 1018 TEST_F(MediaStreamVideoSourceOldConstraintsTest, TwoTracksWith720AndW700H700) { |
| 966 base::test::ScopedFeatureList scoped_feature_list; | |
| 967 scoped_feature_list.InitAndEnableFeature( | |
| 968 features::kMediaStreamOldVideoConstraints); | |
| 969 MockConstraintFactory factory1; | 1019 MockConstraintFactory factory1; |
| 970 factory1.AddAdvanced().width.setMin(1280); | 1020 factory1.AddAdvanced().width.setMin(1280); |
| 971 factory1.AddAdvanced().height.setMin(720); | 1021 factory1.AddAdvanced().height.setMin(720); |
| 972 | 1022 |
| 973 MockConstraintFactory factory2; | 1023 MockConstraintFactory factory2; |
| 974 factory2.basic().width.setMax(700); | 1024 factory2.basic().width.setMax(700); |
| 975 factory2.basic().height.setMax(700); | 1025 factory2.basic().height.setMax(700); |
| 976 | 1026 |
| 977 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), | 1027 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), |
| 978 factory2.CreateWebMediaConstraints(), | 1028 factory2.CreateWebMediaConstraints(), |
| 979 1280, 720, 1280, 720, 700, 700); | 1029 1280, 720, 1280, 720, 700, 700); |
| 980 } | 1030 } |
| 981 | 1031 |
| 982 // Redundant with spec-compliant constraints | 1032 // Redundant with spec-compliant constraints |
| 983 // TODO(guidou): Remove this test. http://crbug.com/706408 | 1033 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 984 TEST_F(MediaStreamVideoSourceTest, | 1034 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 985 TwoTracksWith720AndMaxAspectRatio4To3OldConstraints) { | 1035 TwoTracksWith720AndMaxAspectRatio4To3) { |
| 986 base::test::ScopedFeatureList scoped_feature_list; | |
| 987 scoped_feature_list.InitAndEnableFeature( | |
| 988 features::kMediaStreamOldVideoConstraints); | |
| 989 MockConstraintFactory factory1; | 1036 MockConstraintFactory factory1; |
| 990 factory1.AddAdvanced().width.setMin(1280); | 1037 factory1.AddAdvanced().width.setMin(1280); |
| 991 factory1.AddAdvanced().height.setMin(720); | 1038 factory1.AddAdvanced().height.setMin(720); |
| 992 | 1039 |
| 993 MockConstraintFactory factory2; | 1040 MockConstraintFactory factory2; |
| 994 factory2.basic().aspectRatio.setMax(640.0 / 480); | 1041 factory2.basic().aspectRatio.setMax(640.0 / 480); |
| 995 | 1042 |
| 996 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), | 1043 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), |
| 997 factory2.CreateWebMediaConstraints(), | 1044 factory2.CreateWebMediaConstraints(), |
| 998 1280, 720, 1280, 720, 960, 720); | 1045 1280, 720, 1280, 720, 960, 720); |
| 999 } | 1046 } |
| 1000 | 1047 |
| 1001 // Redundant with spec-compliant constraints | 1048 // Redundant with spec-compliant constraints |
| 1002 // TODO(guidou): Remove this test. http://crbug.com/706408 | 1049 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 1003 TEST_F(MediaStreamVideoSourceTest, | 1050 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 1004 TwoTracksWithVgaAndMinAspectRatioOldConstraints) { | 1051 TwoTracksWithVgaAndMinAspectRatio) { |
| 1005 base::test::ScopedFeatureList scoped_feature_list; | |
| 1006 scoped_feature_list.InitAndEnableFeature( | |
| 1007 features::kMediaStreamOldVideoConstraints); | |
| 1008 MockConstraintFactory factory1; | 1052 MockConstraintFactory factory1; |
| 1009 factory1.AddAdvanced().width.setMax(640); | 1053 factory1.AddAdvanced().width.setMax(640); |
| 1010 factory1.AddAdvanced().height.setMax(480); | 1054 factory1.AddAdvanced().height.setMax(480); |
| 1011 | 1055 |
| 1012 MockConstraintFactory factory2; | 1056 MockConstraintFactory factory2; |
| 1013 factory2.basic().aspectRatio.setMin(640.0 / 360); | 1057 factory2.basic().aspectRatio.setMin(640.0 / 360); |
| 1014 | 1058 |
| 1015 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), | 1059 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), |
| 1016 factory2.CreateWebMediaConstraints(), | 1060 factory2.CreateWebMediaConstraints(), |
| 1017 640, 480, 640, 480, 640, 360); | 1061 640, 480, 640, 480, 640, 360); |
| 1018 } | 1062 } |
| 1019 | 1063 |
| 1020 // Does not apply with spec-compliant constraints | 1064 // Does not apply with spec-compliant constraints |
| 1021 // TODO(guidou): Remove this test. http://crbug.com/706408 | 1065 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 1022 TEST_F(MediaStreamVideoSourceTest, | 1066 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 1023 TwoTracksWithSecondTrackFrameRateHigherThanFirstOldConstraints) { | 1067 TwoTracksWithSecondTrackFrameRateHigherThanFirst) { |
| 1024 base::test::ScopedFeatureList scoped_feature_list; | |
| 1025 scoped_feature_list.InitAndEnableFeature( | |
| 1026 features::kMediaStreamOldVideoConstraints); | |
| 1027 MockConstraintFactory factory1; | 1068 MockConstraintFactory factory1; |
| 1028 factory1.basic().frameRate.setMin(15); | 1069 factory1.basic().frameRate.setMin(15); |
| 1029 factory1.basic().frameRate.setMax(15); | 1070 factory1.basic().frameRate.setMax(15); |
| 1030 | 1071 |
| 1031 blink::WebMediaStreamTrack track1 = | 1072 blink::WebMediaStreamTrack track1 = |
| 1032 CreateTrackAndStartSource(factory1.CreateWebMediaConstraints(), | 1073 CreateTrackAndStartSource(factory1.CreateWebMediaConstraints(), |
| 1033 MediaStreamVideoSource::kDefaultWidth, | 1074 MediaStreamVideoSource::kDefaultWidth, |
| 1034 MediaStreamVideoSource::kDefaultHeight, 15); | 1075 MediaStreamVideoSource::kDefaultHeight, 15); |
| 1035 | 1076 |
| 1036 MockConstraintFactory factory2; | 1077 MockConstraintFactory factory2; |
| 1037 factory2.basic().frameRate.setMin(30); | 1078 factory2.basic().frameRate.setMin(30); |
| 1038 blink::WebMediaStreamTrack track2 = | 1079 blink::WebMediaStreamTrack track2 = |
| 1039 CreateTrack("123", factory2.CreateWebMediaConstraints()); | 1080 CreateTrack("123", factory2.CreateWebMediaConstraints()); |
| 1040 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 1081 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 1041 } | 1082 } |
| 1042 | 1083 |
| 1043 // Test that a source can change the frame resolution on the fly and that | 1084 // Test that a source can change the frame resolution on the fly and that |
| 1044 // tracks sinks get the new frame size unless constraints force the frame to be | 1085 // tracks sinks get the new frame size unless constraints force the frame to be |
| 1045 // cropped. | 1086 // cropped. |
| 1046 // TODO(guidou): Remove this test. http://crbug.com/706408 | 1087 // TODO(guidou): Remove this test. http://crbug.com/706408 |
| 1047 TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSizeOldConstraints) { | 1088 TEST_F(MediaStreamVideoSourceOldConstraintsTest, SourceChangeFrameSize) { |
| 1048 base::test::ScopedFeatureList scoped_feature_list; | |
| 1049 scoped_feature_list.InitAndEnableFeature( | |
| 1050 features::kMediaStreamOldVideoConstraints); | |
| 1051 MockConstraintFactory factory; | 1089 MockConstraintFactory factory; |
| 1052 factory.AddAdvanced().width.setMax(800); | 1090 factory.AddAdvanced().width.setMax(800); |
| 1053 factory.AddAdvanced().height.setMax(700); | 1091 factory.AddAdvanced().height.setMax(700); |
| 1054 | 1092 |
| 1055 // Expect the source to start capture with the supported resolution. | 1093 // Expect the source to start capture with the supported resolution. |
| 1056 // Disable frame-rate adjustment in spec-compliant mode to ensure no frames | 1094 // Disable frame-rate adjustment in spec-compliant mode to ensure no frames |
| 1057 // are dropped. | 1095 // are dropped. |
| 1058 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( | 1096 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( |
| 1059 factory.CreateWebMediaConstraints(), 640, 480, 30); | 1097 factory.CreateWebMediaConstraints(), 640, 480, 30); |
| 1060 | 1098 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1077 | 1115 |
| 1078 DeliverVideoFrameAndWaitForRenderer(1280, 720, &sink); | 1116 DeliverVideoFrameAndWaitForRenderer(1280, 720, &sink); |
| 1079 EXPECT_EQ(3, sink.number_of_frames()); | 1117 EXPECT_EQ(3, sink.number_of_frames()); |
| 1080 // Expect a frame to be cropped since its larger than max requested. | 1118 // Expect a frame to be cropped since its larger than max requested. |
| 1081 EXPECT_EQ(800, sink.frame_size().width()); | 1119 EXPECT_EQ(800, sink.frame_size().width()); |
| 1082 EXPECT_EQ(700, sink.frame_size().height()); | 1120 EXPECT_EQ(700, sink.frame_size().height()); |
| 1083 | 1121 |
| 1084 sink.DisconnectFromTrack(); | 1122 sink.DisconnectFromTrack(); |
| 1085 } | 1123 } |
| 1086 | 1124 |
| 1087 TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSize) { | |
| 1088 base::test::ScopedFeatureList scoped_feature_list; | |
| 1089 scoped_feature_list.InitAndDisableFeature( | |
| 1090 features::kMediaStreamOldVideoConstraints); | |
| 1091 MockConstraintFactory factory; | |
| 1092 factory.AddAdvanced().width.setMax(800); | |
| 1093 factory.AddAdvanced().height.setMax(700); | |
| 1094 | |
| 1095 // Expect the source to start capture with the supported resolution. | |
| 1096 // Disable frame-rate adjustment in spec-compliant mode to ensure no frames | |
| 1097 // are dropped. | |
| 1098 blink::WebMediaStreamTrack track = CreateTrackAndStartSource(800, 700, 0.0); | |
| 1099 | |
| 1100 MockMediaStreamVideoSink sink; | |
| 1101 sink.ConnectToTrack(track); | |
| 1102 EXPECT_EQ(0, sink.number_of_frames()); | |
| 1103 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); | |
| 1104 EXPECT_EQ(1, sink.number_of_frames()); | |
| 1105 // Expect the delivered frame to be passed unchanged since its smaller than | |
| 1106 // max requested. | |
| 1107 EXPECT_EQ(320, sink.frame_size().width()); | |
| 1108 EXPECT_EQ(240, sink.frame_size().height()); | |
| 1109 | |
| 1110 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); | |
| 1111 EXPECT_EQ(2, sink.number_of_frames()); | |
| 1112 // Expect the delivered frame to be passed unchanged since its smaller than | |
| 1113 // max requested. | |
| 1114 EXPECT_EQ(640, sink.frame_size().width()); | |
| 1115 EXPECT_EQ(480, sink.frame_size().height()); | |
| 1116 | |
| 1117 DeliverVideoFrameAndWaitForRenderer(1280, 720, &sink); | |
| 1118 EXPECT_EQ(3, sink.number_of_frames()); | |
| 1119 // Expect a frame to be cropped since its larger than max requested. | |
| 1120 EXPECT_EQ(800, sink.frame_size().width()); | |
| 1121 EXPECT_EQ(700, sink.frame_size().height()); | |
| 1122 | |
| 1123 sink.DisconnectFromTrack(); | |
| 1124 } | |
| 1125 | |
| 1126 // Test that the constraint negotiation can handle 0.0 fps as frame rate. | 1125 // Test that the constraint negotiation can handle 0.0 fps as frame rate. |
| 1127 // Does not apply to spec-compliant constraints. | 1126 TEST_F(MediaStreamVideoSourceOldConstraintsTest, Use0FpsSupportedFormat) { |
| 1128 // TODO(guidou): Remove this test. http://crbug.com/706408 | |
| 1129 TEST_F(MediaStreamVideoSourceTest, Use0FpsSupportedFormatOldConstraints) { | |
| 1130 base::test::ScopedFeatureList scoped_feature_list; | |
| 1131 scoped_feature_list.InitAndEnableFeature( | |
| 1132 features::kMediaStreamOldVideoConstraints); | |
| 1133 media::VideoCaptureFormats formats; | 1127 media::VideoCaptureFormats formats; |
| 1134 formats.push_back(media::VideoCaptureFormat(gfx::Size(640, 480), 0.0f, | 1128 formats.push_back(media::VideoCaptureFormat(gfx::Size(640, 480), 0.0f, |
| 1135 media::PIXEL_FORMAT_I420)); | 1129 media::PIXEL_FORMAT_I420)); |
| 1136 formats.push_back(media::VideoCaptureFormat(gfx::Size(320, 240), 0.0f, | 1130 formats.push_back(media::VideoCaptureFormat(gfx::Size(320, 240), 0.0f, |
| 1137 media::PIXEL_FORMAT_I420)); | 1131 media::PIXEL_FORMAT_I420)); |
| 1138 mock_source()->SetSupportedFormats(formats); | 1132 mock_source()->SetSupportedFormats(formats); |
| 1139 | 1133 |
| 1140 blink::WebMediaConstraints constraints; | 1134 blink::WebMediaConstraints constraints; |
| 1141 constraints.initialize(); | 1135 constraints.initialize(); |
| 1142 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 1136 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
| 1143 mock_source()->CompleteGetSupportedFormats(); | 1137 mock_source()->CompleteGetSupportedFormats(); |
| 1144 mock_source()->StartMockedSource(); | 1138 mock_source()->StartMockedSource(); |
| 1145 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 1139 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 1146 | 1140 |
| 1147 MockMediaStreamVideoSink sink; | 1141 MockMediaStreamVideoSink sink; |
| 1148 sink.ConnectToTrack(track); | 1142 sink.ConnectToTrack(track); |
| 1149 EXPECT_EQ(0, sink.number_of_frames()); | 1143 EXPECT_EQ(0, sink.number_of_frames()); |
| 1150 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); | 1144 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); |
| 1151 EXPECT_EQ(1, sink.number_of_frames()); | 1145 EXPECT_EQ(1, sink.number_of_frames()); |
| 1152 // Expect the delivered frame to be passed unchanged since its smaller than | 1146 // Expect the delivered frame to be passed unchanged since its smaller than |
| 1153 // max requested. | 1147 // max requested. |
| 1154 EXPECT_EQ(320, sink.frame_size().width()); | 1148 EXPECT_EQ(320, sink.frame_size().width()); |
| 1155 EXPECT_EQ(240, sink.frame_size().height()); | 1149 EXPECT_EQ(240, sink.frame_size().height()); |
| 1156 sink.DisconnectFromTrack(); | 1150 sink.DisconnectFromTrack(); |
| 1157 } | 1151 } |
| 1158 | 1152 |
| 1159 // Test that a source producing no frames change the source ReadyState to muted. | 1153 // Test that a source producing no frames change the source ReadyState to muted. |
| 1160 // that in a reasonable time frame the muted state turns to false. | 1154 // that in a reasonable time frame the muted state turns to false. |
| 1161 // TODO(guidou): Remove this test. http://crbug.com/706408 | 1155 TEST_F(MediaStreamVideoSourceOldConstraintsTest, MutedSource) { |
| 1162 TEST_F(MediaStreamVideoSourceTest, MutedSourceOldConstraints) { | |
| 1163 base::test::ScopedFeatureList scoped_feature_list; | |
| 1164 scoped_feature_list.InitAndEnableFeature( | |
| 1165 features::kMediaStreamOldVideoConstraints); | |
| 1166 // Setup the source for support a frame rate of 999 fps in order to test | 1156 // Setup the source for support a frame rate of 999 fps in order to test |
| 1167 // the muted event faster. This is since the frame monitoring uses | 1157 // the muted event faster. This is since the frame monitoring uses |
| 1168 // PostDelayedTask that is dependent on the source frame rate. | 1158 // PostDelayedTask that is dependent on the source frame rate. |
| 1169 // Note that media::limits::kMaxFramesPerSecond is 1000. | 1159 // Note that media::limits::kMaxFramesPerSecond is 1000. |
| 1170 media::VideoCaptureFormats formats; | 1160 media::VideoCaptureFormats formats; |
| 1171 formats.push_back(media::VideoCaptureFormat( | 1161 formats.push_back(media::VideoCaptureFormat( |
| 1172 gfx::Size(640, 480), media::limits::kMaxFramesPerSecond - 1, | 1162 gfx::Size(640, 480), media::limits::kMaxFramesPerSecond - 1, |
| 1173 media::PIXEL_FORMAT_I420)); | 1163 media::PIXEL_FORMAT_I420)); |
| 1174 SetSourceSupportedFormats(formats); | 1164 SetSourceSupportedFormats(formats); |
| 1175 | 1165 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1201 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); | 1191 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); |
| 1202 run_loop2.Run(); | 1192 run_loop2.Run(); |
| 1203 | 1193 |
| 1204 EXPECT_EQ(muted_state, false); | 1194 EXPECT_EQ(muted_state, false); |
| 1205 EXPECT_EQ(track.source().getReadyState(), | 1195 EXPECT_EQ(track.source().getReadyState(), |
| 1206 blink::WebMediaStreamSource::ReadyStateLive); | 1196 blink::WebMediaStreamSource::ReadyStateLive); |
| 1207 | 1197 |
| 1208 sink.DisconnectFromTrack(); | 1198 sink.DisconnectFromTrack(); |
| 1209 } | 1199 } |
| 1210 | 1200 |
| 1211 // Test that a source producing no frames change the source ReadyState to muted. | |
| 1212 // that in a reasonable time frame the muted state turns to false. | |
| 1213 TEST_F(MediaStreamVideoSourceTest, MutedSource) { | |
| 1214 base::test::ScopedFeatureList scoped_feature_list; | |
| 1215 scoped_feature_list.InitAndDisableFeature( | |
| 1216 features::kMediaStreamOldVideoConstraints); | |
| 1217 // Setup the source for support a frame rate of 999 fps in order to test | |
| 1218 // the muted event faster. This is since the frame monitoring uses | |
| 1219 // PostDelayedTask that is dependent on the source frame rate. | |
| 1220 // Note that media::limits::kMaxFramesPerSecond is 1000. | |
| 1221 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( | |
| 1222 640, 480, media::limits::kMaxFramesPerSecond - 2); | |
| 1223 MockMediaStreamVideoSink sink; | |
| 1224 sink.ConnectToTrack(track); | |
| 1225 EXPECT_EQ(track.source().getReadyState(), | |
| 1226 blink::WebMediaStreamSource::ReadyStateLive); | |
| 1227 | |
| 1228 base::RunLoop run_loop; | |
| 1229 base::Closure quit_closure = run_loop.QuitClosure(); | |
| 1230 bool muted_state = false; | |
| 1231 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) | |
| 1232 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); | |
| 1233 run_loop.Run(); | |
| 1234 EXPECT_EQ(muted_state, true); | |
| 1235 | |
| 1236 EXPECT_EQ(track.source().getReadyState(), | |
| 1237 blink::WebMediaStreamSource::ReadyStateMuted); | |
| 1238 | |
| 1239 base::RunLoop run_loop2; | |
| 1240 base::Closure quit_closure2 = run_loop2.QuitClosure(); | |
| 1241 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) | |
| 1242 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2))); | |
| 1243 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); | |
| 1244 run_loop2.Run(); | |
| 1245 | |
| 1246 EXPECT_EQ(muted_state, false); | |
| 1247 EXPECT_EQ(track.source().getReadyState(), | |
| 1248 blink::WebMediaStreamSource::ReadyStateLive); | |
| 1249 | |
| 1250 sink.DisconnectFromTrack(); | |
| 1251 } | |
| 1252 | |
| 1253 // Test that an optional constraint with an invalid aspect ratio is ignored. | 1201 // Test that an optional constraint with an invalid aspect ratio is ignored. |
| 1254 // Does not apply with spec-compliant constraints. | 1202 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 1255 // TODO(guidou): Remove this test. http://crbug.com/706408 | 1203 InvalidOptionalAspectRatioIgnored) { |
| 1256 TEST_F(MediaStreamVideoSourceTest, | |
| 1257 InvalidOptionalAspectRatioIgnoredOldConstraints) { | |
| 1258 base::test::ScopedFeatureList scoped_feature_list; | |
| 1259 scoped_feature_list.InitAndEnableFeature( | |
| 1260 features::kMediaStreamOldVideoConstraints); | |
| 1261 MockConstraintFactory factory; | 1204 MockConstraintFactory factory; |
| 1262 factory.AddAdvanced().aspectRatio.setMax(0.0); | 1205 factory.AddAdvanced().aspectRatio.setMax(0.0); |
| 1263 blink::WebMediaStreamTrack track = | 1206 blink::WebMediaStreamTrack track = |
| 1264 CreateTrack("123", factory.CreateWebMediaConstraints()); | 1207 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 1265 mock_source()->CompleteGetSupportedFormats(); | 1208 mock_source()->CompleteGetSupportedFormats(); |
| 1266 EXPECT_EQ(0, NumberOfFailedConstraintsCallbacks()); | 1209 EXPECT_EQ(0, NumberOfFailedConstraintsCallbacks()); |
| 1267 } | 1210 } |
| 1268 | 1211 |
| 1269 // Test that setting an invalid mandatory aspect ratio fails. | 1212 // Test that setting an invalid mandatory aspect ratio fails. |
| 1270 // Does not apply with spec-compliant constraints. | 1213 // Does not apply with spec-compliant constraints. |
| 1271 // TODO(guidou): Remove this test. http://crbug.com/706408 | 1214 TEST_F(MediaStreamVideoSourceOldConstraintsTest, |
| 1272 TEST_F(MediaStreamVideoSourceTest, | 1215 InvalidMandatoryAspectRatioFails) { |
| 1273 InvalidMandatoryAspectRatioFailsOldConstraints) { | |
| 1274 base::test::ScopedFeatureList scoped_feature_list; | |
| 1275 scoped_feature_list.InitAndEnableFeature( | |
| 1276 features::kMediaStreamOldVideoConstraints); | |
| 1277 MockConstraintFactory factory; | 1216 MockConstraintFactory factory; |
| 1278 factory.basic().aspectRatio.setMax(0.0); | 1217 factory.basic().aspectRatio.setMax(0.0); |
| 1279 blink::WebMediaStreamTrack track = | 1218 blink::WebMediaStreamTrack track = |
| 1280 CreateTrack("123", factory.CreateWebMediaConstraints()); | 1219 CreateTrack("123", factory.CreateWebMediaConstraints()); |
| 1281 mock_source()->CompleteGetSupportedFormats(); | 1220 mock_source()->CompleteGetSupportedFormats(); |
| 1282 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 1221 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 1283 } | 1222 } |
| 1284 | 1223 |
| 1285 } // namespace content | 1224 } // namespace content |
| OLD | NEW |