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

Side by Side Diff: media/blink/webmediaplayer_impl_unittest.cc

Issue 2681863005: [Video] MediaSession API event handlers can resume background video. (Closed)
Patch Set: has_session is true on desktop Created 3 years, 10 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "media/blink/webmediaplayer_impl.h" 5 #include "media/blink/webmediaplayer_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 void SetVideoKeyframeDistanceAverage(base::TimeDelta value) { 296 void SetVideoKeyframeDistanceAverage(base::TimeDelta value) {
297 PipelineStatistics statistics; 297 PipelineStatistics statistics;
298 statistics.video_keyframe_distance_average = value; 298 statistics.video_keyframe_distance_average = value;
299 wmpi_->SetPipelineStatisticsForTest(statistics); 299 wmpi_->SetPipelineStatisticsForTest(statistics);
300 } 300 }
301 301
302 void SetDuration(base::TimeDelta value) { 302 void SetDuration(base::TimeDelta value) {
303 wmpi_->SetPipelineMediaDurationForTest(value); 303 wmpi_->SetPipelineMediaDurationForTest(value);
304 } 304 }
305 305
306 void SetUpMediaSuspend(bool enable) {
307 #if defined(OS_ANDROID)
308 if (!enable) {
309 base::CommandLine::ForCurrentProcess()->AppendSwitch(
310 switches::kDisableMediaSuspend);
311 }
312 #else
313 if (enable) {
314 base::CommandLine::ForCurrentProcess()->AppendSwitch(
315 switches::kEnableMediaSuspend);
316 }
317 #endif
318 }
319
306 // "Renderer" thread. 320 // "Renderer" thread.
307 base::MessageLoop message_loop_; 321 base::MessageLoop message_loop_;
308 322
309 // "Media" thread. This is necessary because WMPI destruction waits on a 323 // "Media" thread. This is necessary because WMPI destruction waits on a
310 // WaitableEvent. 324 // WaitableEvent.
311 base::Thread media_thread_; 325 base::Thread media_thread_;
312 326
313 // Blink state. 327 // Blink state.
314 blink::WebFrameClient web_frame_client_; 328 blink::WebFrameClient web_frame_client_;
315 blink::WebView* web_view_; 329 blink::WebView* web_view_;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 EXPECT_FALSE(state.is_suspended); 466 EXPECT_FALSE(state.is_suspended);
453 EXPECT_TRUE(state.is_memory_reporting_enabled); 467 EXPECT_TRUE(state.is_memory_reporting_enabled);
454 } 468 }
455 469
456 TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameHidden) { 470 TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameHidden) {
457 InitializeWebMediaPlayerImpl(true); 471 InitializeWebMediaPlayerImpl(true);
458 SetMetadata(true, true); 472 SetMetadata(true, true);
459 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 473 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
460 SetPaused(false); 474 SetPaused(false);
461 475
462 { 476 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
463 base::test::ScopedFeatureList scoped_feature_list; 477 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
464 scoped_feature_list.InitAndEnableFeature(kResumeBackgroundVideo); 478 EXPECT_FALSE(state.is_idle);
465 479 EXPECT_FALSE(state.is_suspended);
466 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden(); 480 EXPECT_TRUE(state.is_memory_reporting_enabled);
467 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
468 EXPECT_TRUE(state.is_idle);
469 EXPECT_TRUE(state.is_suspended);
470 EXPECT_FALSE(state.is_memory_reporting_enabled);
471 }
472
473 {
474 base::test::ScopedFeatureList scoped_feature_list;
475 scoped_feature_list.InitAndDisableFeature(kResumeBackgroundVideo);
476
477 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
478 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
479 EXPECT_TRUE(state.is_idle);
480 EXPECT_TRUE(state.is_suspended);
481 EXPECT_FALSE(state.is_memory_reporting_enabled);
482 }
483 } 481 }
484 482
485 TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameClosed) { 483 TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameClosed) {
486 InitializeWebMediaPlayerImpl(true); 484 InitializeWebMediaPlayerImpl(true);
487 SetMetadata(true, true); 485 SetMetadata(true, true);
488 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 486 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
489 SetPaused(false); 487 SetPaused(false);
490 delegate_.SetFrameClosedForTesting(true); 488 delegate_.SetFrameClosedForTesting(true);
491 WebMediaPlayerImpl::PlayState state = ComputePlayState(); 489 WebMediaPlayerImpl::PlayState state = ComputePlayState();
492 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 490 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 metadata.video_rotation = VIDEO_ROTATION_90; 680 metadata.video_rotation = VIDEO_ROTATION_90;
683 681
684 OnMetadata(metadata); 682 OnMetadata(metadata);
685 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize()); 683 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize());
686 684
687 // For 90/270deg rotations, the natural size should be transposed. 685 // For 90/270deg rotations, the natural size should be transposed.
688 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); 686 OnVideoNaturalSizeChange(gfx::Size(1920, 1080));
689 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize()); 687 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize());
690 } 688 }
691 689
692 TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureEnabled) { 690 TEST_F(WebMediaPlayerImplTest,
691 BackgroundOptimizationsFeatureEnabledSuspendEnabled) {
693 base::test::ScopedFeatureList scoped_feature_list; 692 base::test::ScopedFeatureList scoped_feature_list;
694 scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization); 693 scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization);
694 SetUpMediaSuspend(true);
695
695 InitializeWebMediaPlayerImpl(true); 696 InitializeWebMediaPlayerImpl(true);
696 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); 697 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
697 SetDuration(base::TimeDelta::FromSeconds(300)); 698 SetDuration(base::TimeDelta::FromSeconds(300));
698 699
699 // Audible video. 700 // Audible video.
700 SetMetadata(true, true); 701 SetMetadata(true, true);
701 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 702 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
702 EXPECT_TRUE(ShouldDisableVideoWhenHidden()); 703 EXPECT_TRUE(ShouldDisableVideoWhenHidden());
703 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 704 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
704 705
705 // Video only. 706 // Video only.
706 SetMetadata(false, true); 707 SetMetadata(false, true);
707 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 708 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
708 EXPECT_TRUE(ShouldPauseVideoWhenHidden()); 709 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
709 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 710 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
710 711
711 // Audio only. 712 // Audio only.
712 SetMetadata(true, false); 713 SetMetadata(true, false);
713 EXPECT_FALSE(IsBackgroundOptimizationCandidate()); 714 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
714 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 715 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
715 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 716 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
716 717
717 // Duration is shorter than max video keyframe distance. 718 // Duration is shorter than max video keyframe distance.
718 SetDuration(base::TimeDelta::FromSeconds(5)); 719 SetDuration(base::TimeDelta::FromSeconds(5));
719 SetMetadata(true, true); 720 SetMetadata(true, true);
720 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 721 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
721 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 722 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
722 EXPECT_TRUE(ShouldDisableVideoWhenHidden()); 723 EXPECT_TRUE(ShouldDisableVideoWhenHidden());
723 724
724 // Average keyframe distance is too big. 725 // Average keyframe distance is too big.
725 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100)); 726 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
726 SetDuration(base::TimeDelta::FromSeconds(300)); 727 SetDuration(base::TimeDelta::FromSeconds(300));
727 EXPECT_FALSE(IsBackgroundOptimizationCandidate()); 728 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
728 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 729 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
729 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 730 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
730 } 731 }
731 732
732 TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureDisabled) { 733 TEST_F(WebMediaPlayerImplTest,
734 BackgroundOptimizationsFeatureDisabledSuspendEnabled) {
733 base::test::ScopedFeatureList scoped_feature_list; 735 base::test::ScopedFeatureList scoped_feature_list;
734 scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization); 736 scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization);
737 SetUpMediaSuspend(true);
735 738
736 InitializeWebMediaPlayerImpl(true); 739 InitializeWebMediaPlayerImpl(true);
737 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); 740 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
738 SetDuration(base::TimeDelta::FromSeconds(300)); 741 SetDuration(base::TimeDelta::FromSeconds(300));
739 742
740 // Audible video. 743 // Audible video.
741 SetMetadata(true, true); 744 SetMetadata(true, true);
742 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 745 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
743 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 746 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
744 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 747 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
745 748
746 // Video only (pausing is enabled on Android). 749 // Video only.
747 SetMetadata(false, true); 750 SetMetadata(false, true);
748 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 751 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
749 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 752 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
750 #if defined(OS_ANDROID)
751 EXPECT_TRUE(ShouldPauseVideoWhenHidden()); 753 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
752 754
755 #if defined(OS_ANDROID)
753 // On Android, the duration and keyframe distance don't matter for video-only. 756 // On Android, the duration and keyframe distance don't matter for video-only.
754 SetDuration(base::TimeDelta::FromSeconds(5)); 757 SetDuration(base::TimeDelta::FromSeconds(5));
755 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 758 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
756 EXPECT_TRUE(ShouldPauseVideoWhenHidden()); 759 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
757 760
758 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100)); 761 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
759 SetDuration(base::TimeDelta::FromSeconds(300)); 762 SetDuration(base::TimeDelta::FromSeconds(300));
760 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 763 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
761 EXPECT_TRUE(ShouldPauseVideoWhenHidden()); 764 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
762 765
763 // Restore average keyframe distance. 766 // Restore average keyframe distance.
764 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); 767 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
765 #else
766 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
767 #endif 768 #endif
768 769
769 // Audio only. 770 // Audio only.
771 SetMetadata(true, false);
772 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
773 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
774 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
775
776 // Duration is shorter than max video keyframe distance.
777 SetDuration(base::TimeDelta::FromSeconds(5));
778 SetMetadata(true, true);
779 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
780 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
781 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
782
783 // Average keyframe distance is too big.
784 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
785 SetDuration(base::TimeDelta::FromSeconds(300));
786 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
787 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
788 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
789 }
790
791 TEST_F(WebMediaPlayerImplTest,
792 BackgroundOptimizationsFeatureEnabledSuspendDisabled) {
793 base::test::ScopedFeatureList scoped_feature_list;
794 scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization);
795 SetUpMediaSuspend(false);
796
797 InitializeWebMediaPlayerImpl(true);
798 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
799 SetDuration(base::TimeDelta::FromSeconds(300));
800
801 // Audible video.
802 SetMetadata(true, true);
803 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
804 EXPECT_TRUE(ShouldDisableVideoWhenHidden());
805 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
806
807 // Video only.
808 SetMetadata(false, true);
809 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
810 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
811 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
812
813 // Audio only.
814 SetMetadata(true, false);
815 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
816 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
817 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
818
819 // Duration is shorter than max video keyframe distance.
820 SetDuration(base::TimeDelta::FromSeconds(5));
821 SetMetadata(true, true);
822 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
823 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
824 EXPECT_TRUE(ShouldDisableVideoWhenHidden());
825
826 // Average keyframe distance is too big.
827 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
828 SetDuration(base::TimeDelta::FromSeconds(300));
829 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
830 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
831 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
832 }
833
834 TEST_F(WebMediaPlayerImplTest,
835 BackgroundOptimizationsFeatureDisabledSuspendDisabled) {
836 base::test::ScopedFeatureList scoped_feature_list;
837 scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization);
838 SetUpMediaSuspend(false);
839
840 InitializeWebMediaPlayerImpl(true);
841 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
842 SetDuration(base::TimeDelta::FromSeconds(300));
843
844 // Audible video.
845 SetMetadata(true, true);
846 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
847 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
848 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
849
850 // Video only.
851 SetMetadata(false, true);
852 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
853 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
854 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
855
856 #if defined(OS_ANDROID)
857 // On Android, the duration and keyframe distance don't matter for video-only.
858 SetDuration(base::TimeDelta::FromSeconds(5));
859 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
860 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
861
862 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
863 SetDuration(base::TimeDelta::FromSeconds(300));
864 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
865 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
866
867 // Restore average keyframe distance.
868 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
869 #endif
870
871 // Audio only.
770 SetMetadata(true, false); 872 SetMetadata(true, false);
771 EXPECT_FALSE(IsBackgroundOptimizationCandidate()); 873 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
772 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 874 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
773 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 875 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
774 876
775 // Duration is shorter than max video keyframe distance. 877 // Duration is shorter than max video keyframe distance.
776 SetDuration(base::TimeDelta::FromSeconds(5)); 878 SetDuration(base::TimeDelta::FromSeconds(5));
777 SetMetadata(true, true); 879 SetMetadata(true, true);
778 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 880 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
779 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 881 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
780 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 882 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
781 883
782 // Average keyframe distance is too big. 884 // Average keyframe distance is too big.
783 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100)); 885 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
784 SetDuration(base::TimeDelta::FromSeconds(300)); 886 SetDuration(base::TimeDelta::FromSeconds(300));
785 EXPECT_FALSE(IsBackgroundOptimizationCandidate()); 887 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
786 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 888 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
787 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 889 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
788 } 890 }
789 891
790 } // namespace media 892 } // namespace media
OLDNEW
« media/blink/webmediaplayer_impl.cc ('K') | « media/blink/webmediaplayer_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698