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

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

Issue 2681863005: [Video] MediaSession API event handlers can resume background video. (Closed)
Patch Set: Restore permanent 5s pause. 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 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
682 metadata.video_rotation = VIDEO_ROTATION_90; 696 metadata.video_rotation = VIDEO_ROTATION_90;
683 697
684 OnMetadata(metadata); 698 OnMetadata(metadata);
685 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize()); 699 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize());
686 700
687 // For 90/270deg rotations, the natural size should be transposed. 701 // For 90/270deg rotations, the natural size should be transposed.
688 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); 702 OnVideoNaturalSizeChange(gfx::Size(1920, 1080));
689 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize()); 703 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize());
690 } 704 }
691 705
692 TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureEnabled) { 706 TEST_F(WebMediaPlayerImplTest,
707 BackgroundOptimizationsFeatureEnabledSuspendEnabled) {
693 base::test::ScopedFeatureList scoped_feature_list; 708 base::test::ScopedFeatureList scoped_feature_list;
694 scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization); 709 scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization);
710 SetUpMediaSuspend(true);
711
695 InitializeWebMediaPlayerImpl(true); 712 InitializeWebMediaPlayerImpl(true);
696 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); 713 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
697 SetDuration(base::TimeDelta::FromSeconds(300)); 714 SetDuration(base::TimeDelta::FromSeconds(300));
698 715
699 // Audible video. 716 // Audible video.
700 SetMetadata(true, true); 717 SetMetadata(true, true);
701 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 718 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
702 EXPECT_TRUE(ShouldDisableVideoWhenHidden()); 719 EXPECT_TRUE(ShouldDisableVideoWhenHidden());
703 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 720 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
704 721
705 // Video only. 722 // Video only.
706 SetMetadata(false, true); 723 SetMetadata(false, true);
707 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 724 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
708 EXPECT_TRUE(ShouldPauseVideoWhenHidden()); 725 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
709 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 726 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
710 727
711 // Audio only. 728 // Audio only.
712 SetMetadata(true, false); 729 SetMetadata(true, false);
713 EXPECT_FALSE(IsBackgroundOptimizationCandidate()); 730 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
714 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 731 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
715 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 732 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
716 733
717 // Duration is shorter than max video keyframe distance. 734 // Duration is shorter than max video keyframe distance.
718 SetDuration(base::TimeDelta::FromSeconds(5)); 735 SetDuration(base::TimeDelta::FromSeconds(5));
719 SetMetadata(true, true); 736 SetMetadata(true, true);
720 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 737 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
721 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 738 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
722 EXPECT_TRUE(ShouldDisableVideoWhenHidden()); 739 EXPECT_TRUE(ShouldDisableVideoWhenHidden());
723 740
724 // Average keyframe distance is too big. 741 // Average keyframe distance is too big.
725 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100)); 742 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
726 SetDuration(base::TimeDelta::FromSeconds(300)); 743 SetDuration(base::TimeDelta::FromSeconds(300));
727 EXPECT_FALSE(IsBackgroundOptimizationCandidate()); 744 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
728 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 745 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
729 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 746 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
730 } 747 }
731 748
732 TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureDisabled) { 749 TEST_F(WebMediaPlayerImplTest,
750 BackgroundOptimizationsFeatureDisabledSuspendEnabled) {
733 base::test::ScopedFeatureList scoped_feature_list; 751 base::test::ScopedFeatureList scoped_feature_list;
734 scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization); 752 scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization);
753 SetUpMediaSuspend(true);
735 754
736 InitializeWebMediaPlayerImpl(true); 755 InitializeWebMediaPlayerImpl(true);
737 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); 756 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
738 SetDuration(base::TimeDelta::FromSeconds(300)); 757 SetDuration(base::TimeDelta::FromSeconds(300));
739 758
740 // Audible video. 759 // Audible video.
741 SetMetadata(true, true); 760 SetMetadata(true, true);
742 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 761 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
743 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 762 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
744 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 763 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
745 764
746 // Video only (pausing is enabled on Android). 765 // Video only.
747 SetMetadata(false, true); 766 SetMetadata(false, true);
748 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 767 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
749 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 768 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
750 #if defined(OS_ANDROID)
751 EXPECT_TRUE(ShouldPauseVideoWhenHidden()); 769 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
752 770
771 #if defined(OS_ANDROID)
753 // On Android, the duration and keyframe distance don't matter for video-only. 772 // On Android, the duration and keyframe distance don't matter for video-only.
754 SetDuration(base::TimeDelta::FromSeconds(5)); 773 SetDuration(base::TimeDelta::FromSeconds(5));
755 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 774 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
756 EXPECT_TRUE(ShouldPauseVideoWhenHidden()); 775 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
757 776
758 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100)); 777 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
759 SetDuration(base::TimeDelta::FromSeconds(300)); 778 SetDuration(base::TimeDelta::FromSeconds(300));
760 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 779 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
761 EXPECT_TRUE(ShouldPauseVideoWhenHidden()); 780 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
762 781
763 // Restore average keyframe distance. 782 // Restore average keyframe distance.
764 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); 783 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
765 #else
766 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
767 #endif 784 #endif
768 785
769 // Audio only. 786 // Audio only.
787 SetMetadata(true, false);
788 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
789 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
790 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
791
792 // Duration is shorter than max video keyframe distance.
793 SetDuration(base::TimeDelta::FromSeconds(5));
794 SetMetadata(true, true);
795 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
796 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
797 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
798
799 // Average keyframe distance is too big.
800 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
801 SetDuration(base::TimeDelta::FromSeconds(300));
802 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
803 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
804 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
805 }
806
807 TEST_F(WebMediaPlayerImplTest,
808 BackgroundOptimizationsFeatureEnabledSuspendDisabled) {
809 base::test::ScopedFeatureList scoped_feature_list;
810 scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization);
811 SetUpMediaSuspend(false);
812
813 InitializeWebMediaPlayerImpl(true);
814 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
815 SetDuration(base::TimeDelta::FromSeconds(300));
816
817 // Audible video.
818 SetMetadata(true, true);
819 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
820 EXPECT_TRUE(ShouldDisableVideoWhenHidden());
821 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
822
823 // Video only.
824 SetMetadata(false, true);
825 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
826 EXPECT_TRUE(ShouldPauseVideoWhenHidden());
827 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
828
829 // Audio only.
830 SetMetadata(true, false);
831 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
832 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
833 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
834
835 // Duration is shorter than max video keyframe distance.
836 SetDuration(base::TimeDelta::FromSeconds(5));
837 SetMetadata(true, true);
838 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
839 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
840 EXPECT_TRUE(ShouldDisableVideoWhenHidden());
841
842 // Average keyframe distance is too big.
843 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
844 SetDuration(base::TimeDelta::FromSeconds(300));
845 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
846 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
847 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
848 }
849
850 TEST_F(WebMediaPlayerImplTest,
851 BackgroundOptimizationsFeatureDisabledSuspendDisabled) {
852 base::test::ScopedFeatureList scoped_feature_list;
853 scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization);
854 SetUpMediaSuspend(false);
855
856 InitializeWebMediaPlayerImpl(true);
857 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
858 SetDuration(base::TimeDelta::FromSeconds(300));
859
860 // Audible video.
861 SetMetadata(true, true);
862 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
863 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
864 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
865
866 // Video only.
867 SetMetadata(false, true);
868 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
869 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
870 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
871
872 #if defined(OS_ANDROID)
873 // On Android, the duration and keyframe distance don't matter for video-only.
874 SetDuration(base::TimeDelta::FromSeconds(5));
875 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
876 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
877
878 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
879 SetDuration(base::TimeDelta::FromSeconds(300));
880 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
881 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
882
883 // Restore average keyframe distance.
884 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
885 #endif
886
887 // Audio only.
770 SetMetadata(true, false); 888 SetMetadata(true, false);
771 EXPECT_FALSE(IsBackgroundOptimizationCandidate()); 889 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
772 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 890 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
773 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 891 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
774 892
775 // Duration is shorter than max video keyframe distance. 893 // Duration is shorter than max video keyframe distance.
776 SetDuration(base::TimeDelta::FromSeconds(5)); 894 SetDuration(base::TimeDelta::FromSeconds(5));
777 SetMetadata(true, true); 895 SetMetadata(true, true);
778 EXPECT_TRUE(IsBackgroundOptimizationCandidate()); 896 EXPECT_TRUE(IsBackgroundOptimizationCandidate());
779 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 897 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
780 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 898 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
781 899
782 // Average keyframe distance is too big. 900 // Average keyframe distance is too big.
783 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100)); 901 SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
784 SetDuration(base::TimeDelta::FromSeconds(300)); 902 SetDuration(base::TimeDelta::FromSeconds(300));
785 EXPECT_FALSE(IsBackgroundOptimizationCandidate()); 903 EXPECT_FALSE(IsBackgroundOptimizationCandidate());
786 EXPECT_FALSE(ShouldPauseVideoWhenHidden()); 904 EXPECT_FALSE(ShouldPauseVideoWhenHidden());
787 EXPECT_FALSE(ShouldDisableVideoWhenHidden()); 905 EXPECT_FALSE(ShouldDisableVideoWhenHidden());
788 } 906 }
789 907
790 } // namespace media 908 } // 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