| 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "base/test/scoped_feature_list.h" | |
| 14 #include "base/threading/thread_checker_impl.h" | 13 #include "base/threading/thread_checker_impl.h" |
| 15 #include "content/child/child_process.h" | 14 #include "content/child/child_process.h" |
| 16 #include "content/public/common/content_features.h" | |
| 17 #include "content/renderer/media/media_stream_video_track.h" | 15 #include "content/renderer/media/media_stream_video_track.h" |
| 18 #include "content/renderer/media/mock_media_stream_video_sink.h" | 16 #include "content/renderer/media/mock_media_stream_video_sink.h" |
| 19 #include "content/renderer/media/mock_media_stream_video_source.h" | 17 #include "content/renderer/media/mock_media_stream_video_source.h" |
| 20 #include "content/renderer/media/video_track_adapter.h" | 18 #include "content/renderer/media/video_track_adapter.h" |
| 21 #include "media/base/video_frame.h" | 19 #include "media/base/video_frame.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 23 #include "third_party/WebKit/public/web/WebHeap.h" | 21 #include "third_party/WebKit/public/web/WebHeap.h" |
| 24 | 22 |
| 25 namespace content { | 23 namespace content { |
| 26 | 24 |
| 27 const uint8_t kBlackValue = 0x00; | 25 const uint8_t kBlackValue = 0x00; |
| 28 const uint8_t kColorValue = 0xAB; | 26 const uint8_t kColorValue = 0xAB; |
| 29 const int kMockSourceWidth = 640; | 27 const int kMockSourceWidth = 640; |
| 30 const int kMockSourceHeight = 480; | 28 const int kMockSourceHeight = 480; |
| 31 | 29 |
| 32 ACTION_P(RunClosure, closure) { | 30 ACTION_P(RunClosure, closure) { |
| 33 closure.Run(); | 31 closure.Run(); |
| 34 } | 32 } |
| 35 | 33 |
| 36 class MediaStreamVideoTrackTest : public ::testing::Test { | 34 class MediaStreamVideoTrackTest : public ::testing::Test { |
| 37 public: | 35 public: |
| 38 MediaStreamVideoTrackTest() | 36 MediaStreamVideoTrackTest() |
| 39 : child_process_(new ChildProcess()), | 37 : child_process_(new ChildProcess()), |
| 40 mock_source_(nullptr), | 38 mock_source_(nullptr), |
| 41 source_started_(false) { | 39 source_started_(false) {} |
| 42 scoped_feature_list_.InitAndDisableFeature( | |
| 43 features::kMediaStreamOldVideoConstraints); | |
| 44 } | |
| 45 | 40 |
| 46 ~MediaStreamVideoTrackTest() override {} | 41 ~MediaStreamVideoTrackTest() override {} |
| 47 | 42 |
| 48 void TearDown() override { | 43 void TearDown() override { |
| 49 blink_source_.Reset(); | 44 blink_source_.Reset(); |
| 50 blink::WebHeap::CollectAllGarbageForTesting(); | 45 blink::WebHeap::CollectAllGarbageForTesting(); |
| 51 } | 46 } |
| 52 | 47 |
| 53 void DeliverVideoFrameAndWaitForRenderer(MockMediaStreamVideoSink* sink) { | 48 void DeliverVideoFrameAndWaitForRenderer(MockMediaStreamVideoSink* sink) { |
| 54 base::RunLoop run_loop; | 49 base::RunLoop run_loop; |
| 55 base::Closure quit_closure = run_loop.QuitClosure(); | 50 base::Closure quit_closure = run_loop.QuitClosure(); |
| 56 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure)); | 51 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure)); |
| 57 const scoped_refptr<media::VideoFrame> frame = | 52 const scoped_refptr<media::VideoFrame> frame = |
| 58 media::VideoFrame::CreateColorFrame( | 53 media::VideoFrame::CreateColorFrame( |
| 59 gfx::Size(MediaStreamVideoSource::kDefaultWidth, | 54 gfx::Size(MediaStreamVideoSource::kDefaultWidth, |
| 60 MediaStreamVideoSource::kDefaultHeight), | 55 MediaStreamVideoSource::kDefaultHeight), |
| 61 kColorValue, kColorValue, kColorValue, base::TimeDelta()); | 56 kColorValue, kColorValue, kColorValue, base::TimeDelta()); |
| 62 mock_source()->DeliverVideoFrame(frame); | 57 mock_source()->DeliverVideoFrame(frame); |
| 63 run_loop.Run(); | 58 run_loop.Run(); |
| 64 } | 59 } |
| 65 | 60 |
| 66 protected: | 61 protected: |
| 67 base::MessageLoop* io_message_loop() const { | 62 base::MessageLoop* io_message_loop() const { |
| 68 return child_process_->io_message_loop(); | 63 return child_process_->io_message_loop(); |
| 69 } | 64 } |
| 70 | 65 |
| 71 void InitializeSource() { | 66 void InitializeSource() { |
| 72 blink_source_.Reset(); | 67 blink_source_.Reset(); |
| 73 mock_source_ = IsOldVideoConstraints() | 68 mock_source_ = new MockMediaStreamVideoSource( |
| 74 ? new MockMediaStreamVideoSource(false) | 69 media::VideoCaptureFormat( |
| 75 : new MockMediaStreamVideoSource( | 70 gfx::Size(kMockSourceWidth, kMockSourceHeight), 30.0, |
| 76 media::VideoCaptureFormat( | 71 media::PIXEL_FORMAT_I420), |
| 77 gfx::Size(kMockSourceWidth, kMockSourceHeight), | 72 false); |
| 78 30.0, media::PIXEL_FORMAT_I420), | |
| 79 false); | |
| 80 blink_source_.Initialize(blink::WebString::FromASCII("dummy_source_id"), | 73 blink_source_.Initialize(blink::WebString::FromASCII("dummy_source_id"), |
| 81 blink::WebMediaStreamSource::kTypeVideo, | 74 blink::WebMediaStreamSource::kTypeVideo, |
| 82 blink::WebString::FromASCII("dummy_source_name"), | 75 blink::WebString::FromASCII("dummy_source_name"), |
| 83 false /* remote */); | 76 false /* remote */); |
| 84 blink_source_.SetExtraData(mock_source_); | 77 blink_source_.SetExtraData(mock_source_); |
| 85 } | 78 } |
| 86 | 79 |
| 87 // Create a track that's associated with |mock_source_|. | 80 // Create a track that's associated with |mock_source_|. |
| 88 blink::WebMediaStreamTrack CreateTrack() { | 81 blink::WebMediaStreamTrack CreateTrack() { |
| 89 const bool enabled = true; | 82 const bool enabled = true; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 106 MediaStreamSource::ConstraintsCallback(), enabled); | 99 MediaStreamSource::ConstraintsCallback(), enabled); |
| 107 if (!source_started_) { | 100 if (!source_started_) { |
| 108 mock_source_->StartMockedSource(); | 101 mock_source_->StartMockedSource(); |
| 109 source_started_ = true; | 102 source_started_ = true; |
| 110 } | 103 } |
| 111 return track; | 104 return track; |
| 112 } | 105 } |
| 113 | 106 |
| 114 void UpdateVideoSourceToRespondToRequestRefreshFrame() { | 107 void UpdateVideoSourceToRespondToRequestRefreshFrame() { |
| 115 blink_source_.Reset(); | 108 blink_source_.Reset(); |
| 116 mock_source_ = IsOldVideoConstraints() | 109 mock_source_ = new MockMediaStreamVideoSource( |
| 117 ? new MockMediaStreamVideoSource(false, true) | 110 media::VideoCaptureFormat( |
| 118 : new MockMediaStreamVideoSource( | 111 gfx::Size(kMockSourceWidth, kMockSourceHeight), 30.0, |
| 119 media::VideoCaptureFormat( | 112 media::PIXEL_FORMAT_I420), |
| 120 gfx::Size(kMockSourceWidth, kMockSourceHeight), | 113 true); |
| 121 30.0, media::PIXEL_FORMAT_I420), | |
| 122 true); | |
| 123 blink_source_.Initialize(blink::WebString::FromASCII("dummy_source_id"), | 114 blink_source_.Initialize(blink::WebString::FromASCII("dummy_source_id"), |
| 124 blink::WebMediaStreamSource::kTypeVideo, | 115 blink::WebMediaStreamSource::kTypeVideo, |
| 125 blink::WebString::FromASCII("dummy_source_name"), | 116 blink::WebString::FromASCII("dummy_source_name"), |
| 126 false /* remote */); | 117 false /* remote */); |
| 127 blink_source_.SetExtraData(mock_source_); | 118 blink_source_.SetExtraData(mock_source_); |
| 128 } | 119 } |
| 129 | 120 |
| 130 MockMediaStreamVideoSource* mock_source() { return mock_source_; } | 121 MockMediaStreamVideoSource* mock_source() { return mock_source_; } |
| 131 const blink::WebMediaStreamSource& blink_source() const { | 122 const blink::WebMediaStreamSource& blink_source() const { |
| 132 return blink_source_; | 123 return blink_source_; |
| 133 } | 124 } |
| 134 | 125 |
| 135 private: | 126 private: |
| 136 const base::MessageLoopForUI message_loop_; | 127 const base::MessageLoopForUI message_loop_; |
| 137 const std::unique_ptr<ChildProcess> child_process_; | 128 const std::unique_ptr<ChildProcess> child_process_; |
| 138 blink::WebMediaStreamSource blink_source_; | 129 blink::WebMediaStreamSource blink_source_; |
| 139 // |mock_source_| is owned by |webkit_source_|. | 130 // |mock_source_| is owned by |webkit_source_|. |
| 140 MockMediaStreamVideoSource* mock_source_; | 131 MockMediaStreamVideoSource* mock_source_; |
| 141 bool source_started_; | 132 bool source_started_; |
| 142 base::test::ScopedFeatureList scoped_feature_list_; | |
| 143 }; | 133 }; |
| 144 | 134 |
| 145 TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) { | 135 TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) { |
| 146 InitializeSource(); | 136 InitializeSource(); |
| 147 MockMediaStreamVideoSink sink; | 137 MockMediaStreamVideoSink sink; |
| 148 blink::WebMediaStreamTrack track = CreateTrack(); | 138 blink::WebMediaStreamTrack track = CreateTrack(); |
| 149 sink.ConnectToTrack(track); | 139 sink.ConnectToTrack(track); |
| 150 | 140 |
| 151 DeliverVideoFrameAndWaitForRenderer(&sink); | 141 DeliverVideoFrameAndWaitForRenderer(&sink); |
| 152 EXPECT_EQ(1, sink.number_of_frames()); | 142 EXPECT_EQ(1, sink.number_of_frames()); |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 blink::WebMediaStreamTrack::Settings settings; | 331 blink::WebMediaStreamTrack::Settings settings; |
| 342 native_track->GetSettings(settings); | 332 native_track->GetSettings(settings); |
| 343 EXPECT_EQ(-1, settings.width); | 333 EXPECT_EQ(-1, settings.width); |
| 344 EXPECT_EQ(-1, settings.height); | 334 EXPECT_EQ(-1, settings.height); |
| 345 EXPECT_EQ(-1, settings.frame_rate); | 335 EXPECT_EQ(-1, settings.frame_rate); |
| 346 EXPECT_EQ(blink::WebMediaStreamTrack::FacingMode::kNone, | 336 EXPECT_EQ(blink::WebMediaStreamTrack::FacingMode::kNone, |
| 347 settings.facing_mode); | 337 settings.facing_mode); |
| 348 EXPECT_TRUE(settings.device_id.IsNull()); | 338 EXPECT_TRUE(settings.device_id.IsNull()); |
| 349 } | 339 } |
| 350 | 340 |
| 351 // TODO(guidou): Remove this test. http://crbug.com/706408 | |
| 352 class MediaStreamVideoTrackOldConstraintsTest : public ::testing::Test { | |
| 353 public: | |
| 354 MediaStreamVideoTrackOldConstraintsTest() | |
| 355 : child_process_(new ChildProcess()), | |
| 356 mock_source_(nullptr), | |
| 357 source_started_(false) { | |
| 358 scoped_feature_list_.InitAndEnableFeature( | |
| 359 features::kMediaStreamOldVideoConstraints); | |
| 360 } | |
| 361 | |
| 362 ~MediaStreamVideoTrackOldConstraintsTest() override {} | |
| 363 | |
| 364 void TearDown() override { | |
| 365 blink_source_.Reset(); | |
| 366 blink::WebHeap::CollectAllGarbageForTesting(); | |
| 367 } | |
| 368 | |
| 369 void DeliverVideoFrameAndWaitForRenderer(MockMediaStreamVideoSink* sink) { | |
| 370 base::RunLoop run_loop; | |
| 371 base::Closure quit_closure = run_loop.QuitClosure(); | |
| 372 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure)); | |
| 373 const scoped_refptr<media::VideoFrame> frame = | |
| 374 media::VideoFrame::CreateColorFrame( | |
| 375 gfx::Size(MediaStreamVideoSource::kDefaultWidth, | |
| 376 MediaStreamVideoSource::kDefaultHeight), | |
| 377 kColorValue, kColorValue, kColorValue, base::TimeDelta()); | |
| 378 mock_source()->DeliverVideoFrame(frame); | |
| 379 run_loop.Run(); | |
| 380 } | |
| 381 | |
| 382 protected: | |
| 383 base::MessageLoop* io_message_loop() const { | |
| 384 return child_process_->io_message_loop(); | |
| 385 } | |
| 386 | |
| 387 void InitializeSource() { | |
| 388 blink_source_.Reset(); | |
| 389 mock_source_ = IsOldVideoConstraints() | |
| 390 ? new MockMediaStreamVideoSource(false) | |
| 391 : new MockMediaStreamVideoSource( | |
| 392 media::VideoCaptureFormat( | |
| 393 gfx::Size(kMockSourceWidth, kMockSourceHeight), | |
| 394 30.0, media::PIXEL_FORMAT_I420), | |
| 395 false); | |
| 396 blink_source_.Initialize(blink::WebString::FromASCII("dummy_source_id"), | |
| 397 blink::WebMediaStreamSource::kTypeVideo, | |
| 398 blink::WebString::FromASCII("dummy_source_name"), | |
| 399 false /* remote */); | |
| 400 blink_source_.SetExtraData(mock_source_); | |
| 401 } | |
| 402 | |
| 403 // Create a track that's associated with |mock_source_|. | |
| 404 blink::WebMediaStreamTrack CreateTrack() { | |
| 405 const bool enabled = true; | |
| 406 blink::WebMediaStreamTrack track = MediaStreamVideoTrack::CreateVideoTrack( | |
| 407 mock_source_, MediaStreamSource::ConstraintsCallback(), enabled); | |
| 408 if (!source_started_) { | |
| 409 mock_source_->StartMockedSource(); | |
| 410 source_started_ = true; | |
| 411 } | |
| 412 return track; | |
| 413 } | |
| 414 | |
| 415 void UpdateVideoSourceToRespondToRequestRefreshFrame() { | |
| 416 blink_source_.Reset(); | |
| 417 mock_source_ = IsOldVideoConstraints() | |
| 418 ? new MockMediaStreamVideoSource(false, true) | |
| 419 : new MockMediaStreamVideoSource( | |
| 420 media::VideoCaptureFormat( | |
| 421 gfx::Size(kMockSourceWidth, kMockSourceHeight), | |
| 422 30.0, media::PIXEL_FORMAT_I420), | |
| 423 true); | |
| 424 blink_source_.Initialize(blink::WebString::FromASCII("dummy_source_id"), | |
| 425 blink::WebMediaStreamSource::kTypeVideo, | |
| 426 blink::WebString::FromASCII("dummy_source_name"), | |
| 427 false /* remote */); | |
| 428 blink_source_.SetExtraData(mock_source_); | |
| 429 } | |
| 430 | |
| 431 MockMediaStreamVideoSource* mock_source() { return mock_source_; } | |
| 432 const blink::WebMediaStreamSource& blink_source() const { | |
| 433 return blink_source_; | |
| 434 } | |
| 435 | |
| 436 private: | |
| 437 const base::MessageLoopForUI message_loop_; | |
| 438 const std::unique_ptr<ChildProcess> child_process_; | |
| 439 blink::WebMediaStreamSource blink_source_; | |
| 440 // |mock_source_| is owned by |webkit_source_|. | |
| 441 MockMediaStreamVideoSource* mock_source_; | |
| 442 bool source_started_; | |
| 443 base::test::ScopedFeatureList scoped_feature_list_; | |
| 444 }; | |
| 445 | |
| 446 TEST_F(MediaStreamVideoTrackOldConstraintsTest, AddAndRemoveSink) { | |
| 447 InitializeSource(); | |
| 448 MockMediaStreamVideoSink sink; | |
| 449 blink::WebMediaStreamTrack track = CreateTrack(); | |
| 450 sink.ConnectToTrack(track); | |
| 451 | |
| 452 DeliverVideoFrameAndWaitForRenderer(&sink); | |
| 453 EXPECT_EQ(1, sink.number_of_frames()); | |
| 454 | |
| 455 DeliverVideoFrameAndWaitForRenderer(&sink); | |
| 456 | |
| 457 sink.DisconnectFromTrack(); | |
| 458 | |
| 459 scoped_refptr<media::VideoFrame> frame = media::VideoFrame::CreateBlackFrame( | |
| 460 gfx::Size(MediaStreamVideoSource::kDefaultWidth, | |
| 461 MediaStreamVideoSource::kDefaultHeight)); | |
| 462 mock_source()->DeliverVideoFrame(frame); | |
| 463 // Wait for the IO thread to complete delivering frames. | |
| 464 base::RunLoop().RunUntilIdle(); | |
| 465 EXPECT_EQ(2, sink.number_of_frames()); | |
| 466 } | |
| 467 | |
| 468 // Checks that the callback given to the track is reset on the right thread. | |
| 469 TEST_F(MediaStreamVideoTrackOldConstraintsTest, ResetCallbackOnThread) { | |
| 470 InitializeSource(); | |
| 471 MockMediaStreamVideoSink sink; | |
| 472 blink::WebMediaStreamTrack track = CreateTrack(); | |
| 473 | |
| 474 base::RunLoop run_loop; | |
| 475 bool correct = false; | |
| 476 sink.ConnectToTrackWithCallback( | |
| 477 track, base::Bind(&CheckThreadVideoFrameReceiver, | |
| 478 base::Owned(new CheckThreadHelper( | |
| 479 run_loop.QuitClosure(), &correct)))); | |
| 480 sink.DisconnectFromTrack(); | |
| 481 run_loop.Run(); | |
| 482 EXPECT_TRUE(correct) << "Not called on correct thread."; | |
| 483 } | |
| 484 | |
| 485 TEST_F(MediaStreamVideoTrackOldConstraintsTest, SetEnabled) { | |
| 486 InitializeSource(); | |
| 487 MockMediaStreamVideoSink sink; | |
| 488 blink::WebMediaStreamTrack track = CreateTrack(); | |
| 489 sink.ConnectToTrack(track); | |
| 490 | |
| 491 MediaStreamVideoTrack* video_track = | |
| 492 MediaStreamVideoTrack::GetVideoTrack(track); | |
| 493 | |
| 494 DeliverVideoFrameAndWaitForRenderer(&sink); | |
| 495 EXPECT_EQ(1, sink.number_of_frames()); | |
| 496 EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane)); | |
| 497 | |
| 498 video_track->SetEnabled(false); | |
| 499 EXPECT_FALSE(sink.enabled()); | |
| 500 | |
| 501 DeliverVideoFrameAndWaitForRenderer(&sink); | |
| 502 EXPECT_EQ(2, sink.number_of_frames()); | |
| 503 EXPECT_EQ(kBlackValue, *sink.last_frame()->data(media::VideoFrame::kYPlane)); | |
| 504 | |
| 505 video_track->SetEnabled(true); | |
| 506 EXPECT_TRUE(sink.enabled()); | |
| 507 DeliverVideoFrameAndWaitForRenderer(&sink); | |
| 508 EXPECT_EQ(3, sink.number_of_frames()); | |
| 509 EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane)); | |
| 510 sink.DisconnectFromTrack(); | |
| 511 } | |
| 512 | |
| 513 TEST_F(MediaStreamVideoTrackOldConstraintsTest, SourceStopped) { | |
| 514 InitializeSource(); | |
| 515 MockMediaStreamVideoSink sink; | |
| 516 blink::WebMediaStreamTrack track = CreateTrack(); | |
| 517 sink.ConnectToTrack(track); | |
| 518 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, sink.state()); | |
| 519 | |
| 520 mock_source()->StopSource(); | |
| 521 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, sink.state()); | |
| 522 sink.DisconnectFromTrack(); | |
| 523 } | |
| 524 | |
| 525 TEST_F(MediaStreamVideoTrackOldConstraintsTest, StopLastTrack) { | |
| 526 InitializeSource(); | |
| 527 MockMediaStreamVideoSink sink1; | |
| 528 blink::WebMediaStreamTrack track1 = CreateTrack(); | |
| 529 sink1.ConnectToTrack(track1); | |
| 530 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, sink1.state()); | |
| 531 | |
| 532 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, | |
| 533 blink_source().GetReadyState()); | |
| 534 | |
| 535 MockMediaStreamVideoSink sink2; | |
| 536 blink::WebMediaStreamTrack track2 = CreateTrack(); | |
| 537 sink2.ConnectToTrack(track2); | |
| 538 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, sink2.state()); | |
| 539 | |
| 540 MediaStreamVideoTrack* const native_track1 = | |
| 541 MediaStreamVideoTrack::GetVideoTrack(track1); | |
| 542 native_track1->Stop(); | |
| 543 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, sink1.state()); | |
| 544 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateLive, | |
| 545 blink_source().GetReadyState()); | |
| 546 sink1.DisconnectFromTrack(); | |
| 547 | |
| 548 MediaStreamVideoTrack* const native_track2 = | |
| 549 MediaStreamVideoTrack::GetVideoTrack(track2); | |
| 550 native_track2->Stop(); | |
| 551 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, sink2.state()); | |
| 552 EXPECT_EQ(blink::WebMediaStreamSource::kReadyStateEnded, | |
| 553 blink_source().GetReadyState()); | |
| 554 sink2.DisconnectFromTrack(); | |
| 555 } | |
| 556 | |
| 557 TEST_F(MediaStreamVideoTrackOldConstraintsTest, | |
| 558 CheckTrackRequestsFrameOldConstraintsOldConstraints) { | |
| 559 UpdateVideoSourceToRespondToRequestRefreshFrame(); | |
| 560 blink::WebMediaStreamTrack track = CreateTrack(); | |
| 561 | |
| 562 // Add sink and expect to get a frame. | |
| 563 MockMediaStreamVideoSink sink; | |
| 564 base::RunLoop run_loop; | |
| 565 base::Closure quit_closure = run_loop.QuitClosure(); | |
| 566 EXPECT_CALL(sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure)); | |
| 567 sink.ConnectToTrack(track); | |
| 568 run_loop.Run(); | |
| 569 EXPECT_EQ(1, sink.number_of_frames()); | |
| 570 | |
| 571 sink.DisconnectFromTrack(); | |
| 572 } | |
| 573 | |
| 574 TEST_F(MediaStreamVideoTrackOldConstraintsTest, GetSettingsOldConstraints) { | |
| 575 InitializeSource(); | |
| 576 blink::WebMediaStreamTrack track = CreateTrack(); | |
| 577 MediaStreamVideoTrack* const native_track = | |
| 578 MediaStreamVideoTrack::GetVideoTrack(track); | |
| 579 blink::WebMediaStreamTrack::Settings settings; | |
| 580 native_track->GetSettings(settings); | |
| 581 // These values come straight from the mock video track implementation. | |
| 582 EXPECT_EQ(640, settings.width); | |
| 583 EXPECT_EQ(480, settings.height); | |
| 584 EXPECT_EQ(30.0, settings.frame_rate); | |
| 585 EXPECT_EQ(blink::WebMediaStreamTrack::FacingMode::kNone, | |
| 586 settings.facing_mode); | |
| 587 } | |
| 588 | |
| 589 } // namespace content | 341 } // namespace content |
| OLD | NEW |