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

Side by Side Diff: content/renderer/media/webmediaplayer_ms_unittest.cc

Issue 2053133003: Always post deletion of WebMediaPlayerMSCompositor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix unittests. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/run_loop.h"
7 #include "content/public/renderer/media_stream_renderer_factory.h" 8 #include "content/public/renderer/media_stream_renderer_factory.h"
8 #include "content/renderer/media/webmediaplayer_ms.h" 9 #include "content/renderer/media/webmediaplayer_ms.h"
9 #include "content/renderer/media/webmediaplayer_ms_compositor.h" 10 #include "content/renderer/media/webmediaplayer_ms_compositor.h"
10 #include "content/renderer/render_frame_impl.h" 11 #include "content/renderer/render_frame_impl.h"
11 #include "media/base/test_helpers.h" 12 #include "media/base/test_helpers.h"
12 #include "media/base/video_frame.h" 13 #include "media/base/video_frame.h"
13 #include "third_party/WebKit/public/platform/WebMediaPlayer.h" 14 #include "third_party/WebKit/public/platform/WebMediaPlayer.h"
14 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" 15 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h"
15 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" 16 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h"
16 17
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 // 7. When WebMediaPlayerMS::play gets called, evething paused in step 6 should 356 // 7. When WebMediaPlayerMS::play gets called, evething paused in step 6 should
356 // be resumed. 357 // be resumed.
357 class WebMediaPlayerMSTest 358 class WebMediaPlayerMSTest
358 : public testing::TestWithParam<testing::tuple<bool, bool>> , 359 : public testing::TestWithParam<testing::tuple<bool, bool>> ,
359 public blink::WebMediaPlayerClient, 360 public blink::WebMediaPlayerClient,
360 public cc::VideoFrameProvider::Client { 361 public cc::VideoFrameProvider::Client {
361 public: 362 public:
362 WebMediaPlayerMSTest() 363 WebMediaPlayerMSTest()
363 : render_factory_(new MockRenderFactory(message_loop_.task_runner(), 364 : render_factory_(new MockRenderFactory(message_loop_.task_runner(),
364 &message_loop_controller_)), 365 &message_loop_controller_)),
365 player_(nullptr, 366 player_(new WebMediaPlayerMS(
366 this, 367 nullptr,
367 delegate_.AsWeakPtr(), 368 this,
368 new media::MediaLog(), 369 delegate_.AsWeakPtr(),
369 std::unique_ptr<MediaStreamRendererFactory>(render_factory_), 370 new media::MediaLog(),
370 message_loop_.task_runner(), 371 std::unique_ptr<MediaStreamRendererFactory>(render_factory_),
371 message_loop_.task_runner(), 372 message_loop_.task_runner(),
372 message_loop_.task_runner(), 373 message_loop_.task_runner(),
373 nullptr, 374 message_loop_.task_runner(),
374 blink::WebString(), 375 nullptr,
375 blink::WebSecurityOrigin()), 376 blink::WebString(),
377 blink::WebSecurityOrigin())),
376 rendering_(false), 378 rendering_(false),
377 background_rendering_(false) {} 379 background_rendering_(false) {}
378 ~WebMediaPlayerMSTest() override {} 380 ~WebMediaPlayerMSTest() override {
381 player_.reset();
382 base::RunLoop().RunUntilIdle();
383 }
379 384
380 MockMediaStreamVideoRenderer* LoadAndGetFrameProvider(bool algorithm_enabled); 385 MockMediaStreamVideoRenderer* LoadAndGetFrameProvider(bool algorithm_enabled);
381 386
382 // Implementation of WebMediaPlayerClient 387 // Implementation of WebMediaPlayerClient
383 void networkStateChanged() override; 388 void networkStateChanged() override;
384 void readyStateChanged() override; 389 void readyStateChanged() override;
385 void timeChanged() override {} 390 void timeChanged() override {}
386 void repaint() override {} 391 void repaint() override {}
387 void durationChanged() override {} 392 void durationChanged() override {}
388 void sizeChanged() override; 393 void sizeChanged() override;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 435
431 MOCK_METHOD1(DoSetWebLayer, void(bool)); 436 MOCK_METHOD1(DoSetWebLayer, void(bool));
432 MOCK_METHOD1(DoNetworkStateChanged, 437 MOCK_METHOD1(DoNetworkStateChanged,
433 void(blink::WebMediaPlayer::NetworkState)); 438 void(blink::WebMediaPlayer::NetworkState));
434 MOCK_METHOD1(DoReadyStateChanged, void(blink::WebMediaPlayer::ReadyState)); 439 MOCK_METHOD1(DoReadyStateChanged, void(blink::WebMediaPlayer::ReadyState));
435 MOCK_METHOD1(CheckSizeChanged, void(gfx::Size)); 440 MOCK_METHOD1(CheckSizeChanged, void(gfx::Size));
436 441
437 base::MessageLoop message_loop_; 442 base::MessageLoop message_loop_;
438 MockRenderFactory* render_factory_; 443 MockRenderFactory* render_factory_;
439 FakeWebMediaPlayerDelegate delegate_; 444 FakeWebMediaPlayerDelegate delegate_;
440 WebMediaPlayerMS player_; 445 std::unique_ptr<WebMediaPlayerMS> player_;
441 WebMediaPlayerMSCompositor* compositor_; 446 WebMediaPlayerMSCompositor* compositor_;
442 ReusableMessageLoopEvent message_loop_controller_; 447 ReusableMessageLoopEvent message_loop_controller_;
443 448
444 private: 449 private:
445 // Main function trying to ask WebMediaPlayerMS to submit a frame for 450 // Main function trying to ask WebMediaPlayerMS to submit a frame for
446 // rendering. 451 // rendering.
447 void RenderFrame(); 452 void RenderFrame();
448 453
449 bool rendering_; 454 bool rendering_;
450 bool background_rendering_; 455 bool background_rendering_;
451 }; 456 };
452 457
453 MockMediaStreamVideoRenderer* WebMediaPlayerMSTest::LoadAndGetFrameProvider( 458 MockMediaStreamVideoRenderer* WebMediaPlayerMSTest::LoadAndGetFrameProvider(
454 bool algorithm_enabled) { 459 bool algorithm_enabled) {
455 EXPECT_FALSE(!!render_factory_->provider()) << "There should not be a " 460 EXPECT_FALSE(!!render_factory_->provider()) << "There should not be a "
456 "FrameProvider yet."; 461 "FrameProvider yet.";
457 462
458 EXPECT_CALL( 463 EXPECT_CALL(
459 *this, DoNetworkStateChanged(blink::WebMediaPlayer::NetworkStateLoading)); 464 *this, DoNetworkStateChanged(blink::WebMediaPlayer::NetworkStateLoading));
460 EXPECT_CALL( 465 EXPECT_CALL(
461 *this, DoReadyStateChanged(blink::WebMediaPlayer::ReadyStateHaveNothing)); 466 *this, DoReadyStateChanged(blink::WebMediaPlayer::ReadyStateHaveNothing));
462 player_.load(blink::WebMediaPlayer::LoadTypeURL, 467 player_->load(blink::WebMediaPlayer::LoadTypeURL,
463 blink::WebMediaPlayerSource(), 468 blink::WebMediaPlayerSource(),
464 blink::WebMediaPlayer::CORSModeUnspecified); 469 blink::WebMediaPlayer::CORSModeUnspecified);
465 compositor_ = player_.compositor_.get(); 470 compositor_ = player_->compositor_.get();
466 EXPECT_TRUE(!!compositor_); 471 EXPECT_TRUE(!!compositor_);
467 compositor_->SetAlgorithmEnabledForTesting(algorithm_enabled); 472 compositor_->SetAlgorithmEnabledForTesting(algorithm_enabled);
468 473
469 MockMediaStreamVideoRenderer* const provider = render_factory_->provider(); 474 MockMediaStreamVideoRenderer* const provider = render_factory_->provider();
470 EXPECT_TRUE(!!provider); 475 EXPECT_TRUE(!!provider);
471 EXPECT_TRUE(provider->Started()); 476 EXPECT_TRUE(provider->Started());
472 477
473 testing::Mock::VerifyAndClearExpectations(this); 478 testing::Mock::VerifyAndClearExpectations(this);
474 return provider; 479 return provider;
475 } 480 }
476 481
477 void WebMediaPlayerMSTest::networkStateChanged() { 482 void WebMediaPlayerMSTest::networkStateChanged() {
478 blink::WebMediaPlayer::NetworkState state = player_.getNetworkState(); 483 blink::WebMediaPlayer::NetworkState state = player_->getNetworkState();
479 DoNetworkStateChanged(state); 484 DoNetworkStateChanged(state);
480 if (state == blink::WebMediaPlayer::NetworkState::NetworkStateFormatError || 485 if (state == blink::WebMediaPlayer::NetworkState::NetworkStateFormatError ||
481 state == blink::WebMediaPlayer::NetworkState::NetworkStateDecodeError || 486 state == blink::WebMediaPlayer::NetworkState::NetworkStateDecodeError ||
482 state == blink::WebMediaPlayer::NetworkState::NetworkStateNetworkError) { 487 state == blink::WebMediaPlayer::NetworkState::NetworkStateNetworkError) {
483 message_loop_controller_.GetPipelineStatusCB().Run( 488 message_loop_controller_.GetPipelineStatusCB().Run(
484 media::PipelineStatus::PIPELINE_ERROR_NETWORK); 489 media::PipelineStatus::PIPELINE_ERROR_NETWORK);
485 } 490 }
486 } 491 }
487 492
488 void WebMediaPlayerMSTest::readyStateChanged() { 493 void WebMediaPlayerMSTest::readyStateChanged() {
489 blink::WebMediaPlayer::ReadyState state = player_.getReadyState(); 494 blink::WebMediaPlayer::ReadyState state = player_->getReadyState();
490 DoReadyStateChanged(state); 495 DoReadyStateChanged(state);
491 if (state == blink::WebMediaPlayer::ReadyState::ReadyStateHaveEnoughData) 496 if (state == blink::WebMediaPlayer::ReadyState::ReadyStateHaveEnoughData)
492 player_.play(); 497 player_->play();
493 } 498 }
494 499
495 void WebMediaPlayerMSTest::setWebLayer(blink::WebLayer* layer) { 500 void WebMediaPlayerMSTest::setWebLayer(blink::WebLayer* layer) {
496 if (layer) 501 if (layer)
497 compositor_->SetVideoFrameProviderClient(this); 502 compositor_->SetVideoFrameProviderClient(this);
498 DoSetWebLayer(!!layer); 503 DoSetWebLayer(!!layer);
499 } 504 }
500 505
501 void WebMediaPlayerMSTest::StopUsingProvider() { 506 void WebMediaPlayerMSTest::StopUsingProvider() {
502 if (rendering_) 507 if (rendering_)
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 gfx::Size frame_size = 633 gfx::Size frame_size =
629 gfx::Size(kStandardWidth - (odd_size_frame ? kOddSizeOffset : 0), 634 gfx::Size(kStandardWidth - (odd_size_frame ? kOddSizeOffset : 0),
630 kStandardHeight - (odd_size_frame ? kOddSizeOffset : 0)); 635 kStandardHeight - (odd_size_frame ? kOddSizeOffset : 0));
631 EXPECT_CALL(*this, CheckSizeChanged(frame_size)); 636 EXPECT_CALL(*this, CheckSizeChanged(frame_size));
632 message_loop_controller_.RunAndWaitForStatus( 637 message_loop_controller_.RunAndWaitForStatus(
633 media::PipelineStatus::PIPELINE_OK); 638 media::PipelineStatus::PIPELINE_OK);
634 testing::Mock::VerifyAndClearExpectations(this); 639 testing::Mock::VerifyAndClearExpectations(this);
635 640
636 // Here we call pause, and expect a freezing frame. 641 // Here we call pause, and expect a freezing frame.
637 EXPECT_CALL(*this, DoStopRendering()); 642 EXPECT_CALL(*this, DoStopRendering());
638 player_.pause(); 643 player_->pause();
639 auto prev_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics(); 644 auto prev_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics();
640 message_loop_controller_.RunAndWaitForStatus( 645 message_loop_controller_.RunAndWaitForStatus(
641 media::PipelineStatus::PIPELINE_OK); 646 media::PipelineStatus::PIPELINE_OK);
642 auto after_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics(); 647 auto after_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics();
643 EXPECT_EQ(prev_frame->timestamp(), after_frame->timestamp()); 648 EXPECT_EQ(prev_frame->timestamp(), after_frame->timestamp());
644 testing::Mock::VerifyAndClearExpectations(this); 649 testing::Mock::VerifyAndClearExpectations(this);
645 650
646 EXPECT_CALL(*this, DoSetWebLayer(false)); 651 EXPECT_CALL(*this, DoSetWebLayer(false));
647 } 652 }
648 653
(...skipping 20 matching lines...) Expand all
669 gfx::Size frame_size = 674 gfx::Size frame_size =
670 gfx::Size(kStandardWidth - (odd_size_frame ? kOddSizeOffset : 0), 675 gfx::Size(kStandardWidth - (odd_size_frame ? kOddSizeOffset : 0),
671 kStandardHeight - (odd_size_frame ? kOddSizeOffset : 0)); 676 kStandardHeight - (odd_size_frame ? kOddSizeOffset : 0));
672 EXPECT_CALL(*this, CheckSizeChanged(frame_size)); 677 EXPECT_CALL(*this, CheckSizeChanged(frame_size));
673 message_loop_controller_.RunAndWaitForStatus( 678 message_loop_controller_.RunAndWaitForStatus(
674 media::PipelineStatus::PIPELINE_OK); 679 media::PipelineStatus::PIPELINE_OK);
675 testing::Mock::VerifyAndClearExpectations(this); 680 testing::Mock::VerifyAndClearExpectations(this);
676 681
677 // Here we call pause, and expect a freezing frame. 682 // Here we call pause, and expect a freezing frame.
678 EXPECT_CALL(*this, DoStopRendering()); 683 EXPECT_CALL(*this, DoStopRendering());
679 player_.pause(); 684 player_->pause();
680 auto prev_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics(); 685 auto prev_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics();
681 message_loop_controller_.RunAndWaitForStatus( 686 message_loop_controller_.RunAndWaitForStatus(
682 media::PipelineStatus::PIPELINE_OK); 687 media::PipelineStatus::PIPELINE_OK);
683 auto after_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics(); 688 auto after_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics();
684 EXPECT_EQ(prev_frame->timestamp(), after_frame->timestamp()); 689 EXPECT_EQ(prev_frame->timestamp(), after_frame->timestamp());
685 testing::Mock::VerifyAndClearExpectations(this); 690 testing::Mock::VerifyAndClearExpectations(this);
686 691
687 // We resume the player, and expect rendering can continue. 692 // We resume the player, and expect rendering can continue.
688 EXPECT_CALL(*this, DoStartRendering()); 693 EXPECT_CALL(*this, DoStartRendering());
689 player_.play(); 694 player_->play();
690 prev_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics(); 695 prev_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics();
691 message_loop_controller_.RunAndWaitForStatus( 696 message_loop_controller_.RunAndWaitForStatus(
692 media::PipelineStatus::PIPELINE_OK); 697 media::PipelineStatus::PIPELINE_OK);
693 after_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics(); 698 after_frame = compositor_->GetCurrentFrameWithoutUpdatingStatistics();
694 EXPECT_NE(prev_frame->timestamp(), after_frame->timestamp()); 699 EXPECT_NE(prev_frame->timestamp(), after_frame->timestamp());
695 testing::Mock::VerifyAndClearExpectations(this); 700 testing::Mock::VerifyAndClearExpectations(this);
696 701
697 EXPECT_CALL(*this, DoSetWebLayer(false)); 702 EXPECT_CALL(*this, DoSetWebLayer(false));
698 EXPECT_CALL(*this, DoStopRendering()); 703 EXPECT_CALL(*this, DoStopRendering());
699 } 704 }
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 EXPECT_CALL(*this, DoSetWebLayer(false)); 785 EXPECT_CALL(*this, DoSetWebLayer(false));
781 EXPECT_CALL(*this, DoStopRendering()); 786 EXPECT_CALL(*this, DoStopRendering());
782 } 787 }
783 788
784 #if defined(OS_ANDROID) 789 #if defined(OS_ANDROID)
785 TEST_F(WebMediaPlayerMSTest, HiddenPlayerTests) { 790 TEST_F(WebMediaPlayerMSTest, HiddenPlayerTests) {
786 LoadAndGetFrameProvider(true); 791 LoadAndGetFrameProvider(true);
787 792
788 // Hidden status should not affect playback. 793 // Hidden status should not affect playback.
789 delegate_.set_hidden(true); 794 delegate_.set_hidden(true);
790 player_.play(); 795 player_->play();
791 EXPECT_FALSE(player_.paused()); 796 EXPECT_FALSE(player_->paused());
792 797
793 // A pause delivered via the delegate should not pause the video since these 798 // A pause delivered via the delegate should not pause the video since these
794 // calls are currently ignored. 799 // calls are currently ignored.
795 player_.OnPause(); 800 player_->OnPause();
796 EXPECT_FALSE(player_.paused()); 801 EXPECT_FALSE(player_->paused());
797 802
798 // A hidden player should start still be playing upon shown. 803 // A hidden player should start still be playing upon shown.
799 delegate_.set_hidden(false); 804 delegate_.set_hidden(false);
800 player_.OnShown(); 805 player_->OnShown();
801 EXPECT_FALSE(player_.paused()); 806 EXPECT_FALSE(player_->paused());
802 807
803 // A hidden event should not pause the player. 808 // A hidden event should not pause the player.
804 delegate_.set_hidden(true); 809 delegate_.set_hidden(true);
805 player_.OnHidden(); 810 player_->OnHidden();
806 EXPECT_FALSE(player_.paused()); 811 EXPECT_FALSE(player_->paused());
807 812
808 // A user generated pause() should clear the automatic resumption. 813 // A user generated pause() should clear the automatic resumption.
809 player_.pause(); 814 player_->pause();
810 delegate_.set_hidden(false); 815 delegate_.set_hidden(false);
811 player_.OnShown(); 816 player_->OnShown();
812 EXPECT_TRUE(player_.paused()); 817 EXPECT_TRUE(player_->paused());
813 818
814 // A user generated play() should start playback. 819 // A user generated play() should start playback.
815 player_.play(); 820 player_->play();
816 EXPECT_FALSE(player_.paused()); 821 EXPECT_FALSE(player_->paused());
817 822
818 // An OnSuspendRequested() without forced suspension should do nothing. 823 // An OnSuspendRequested() without forced suspension should do nothing.
819 player_.OnSuspendRequested(false); 824 player_->OnSuspendRequested(false);
820 EXPECT_FALSE(player_.paused()); 825 EXPECT_FALSE(player_->paused());
821 826
822 // An OnSuspendRequested() with forced suspension should pause playback. 827 // An OnSuspendRequested() with forced suspension should pause playback.
823 player_.OnSuspendRequested(true); 828 player_->OnSuspendRequested(true);
824 EXPECT_TRUE(player_.paused()); 829 EXPECT_TRUE(player_->paused());
825 830
826 // OnShown() should restart after a forced suspension. 831 // OnShown() should restart after a forced suspension.
827 player_.OnShown(); 832 player_->OnShown();
828 EXPECT_FALSE(player_.paused()); 833 EXPECT_FALSE(player_->paused());
829 EXPECT_CALL(*this, DoSetWebLayer(false)); 834 EXPECT_CALL(*this, DoSetWebLayer(false));
830 } 835 }
831 #endif 836 #endif
832 837
833 } // namespace content 838 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698