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

Unified 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 side-by-side diff with in-line comments
Download patch
« media/blink/webmediaplayer_impl.cc ('K') | « media/blink/webmediaplayer_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/blink/webmediaplayer_impl_unittest.cc
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc
index ffca873997294d97f4c61458f2db085d3cc02774..f4675cc197987d53b6ad823fe38e798a751411c5 100644
--- a/media/blink/webmediaplayer_impl_unittest.cc
+++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -303,6 +303,20 @@ class WebMediaPlayerImplTest : public testing::Test {
wmpi_->SetPipelineMediaDurationForTest(value);
}
+ void SetUpMediaSuspend(bool enable) {
+#if defined(OS_ANDROID)
+ if (!enable) {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kDisableMediaSuspend);
+ }
+#else
+ if (enable) {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kEnableMediaSuspend);
+ }
+#endif
+ }
+
// "Renderer" thread.
base::MessageLoop message_loop_;
@@ -689,9 +703,12 @@ TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) {
ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize());
}
-TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureEnabled) {
+TEST_F(WebMediaPlayerImplTest,
+ BackgroundOptimizationsFeatureEnabledSuspendEnabled) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization);
+ SetUpMediaSuspend(true);
+
InitializeWebMediaPlayerImpl(true);
SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
SetDuration(base::TimeDelta::FromSeconds(300));
@@ -700,7 +717,7 @@ TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureEnabled) {
SetMetadata(true, true);
EXPECT_TRUE(IsBackgroundOptimizationCandidate());
EXPECT_TRUE(ShouldDisableVideoWhenHidden());
- EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden());
// Video only.
SetMetadata(false, true);
@@ -718,20 +735,22 @@ TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureEnabled) {
SetDuration(base::TimeDelta::FromSeconds(5));
SetMetadata(true, true);
EXPECT_TRUE(IsBackgroundOptimizationCandidate());
- EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden());
EXPECT_TRUE(ShouldDisableVideoWhenHidden());
// Average keyframe distance is too big.
SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
SetDuration(base::TimeDelta::FromSeconds(300));
EXPECT_FALSE(IsBackgroundOptimizationCandidate());
- EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden());
EXPECT_FALSE(ShouldDisableVideoWhenHidden());
}
-TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureDisabled) {
+TEST_F(WebMediaPlayerImplTest,
+ BackgroundOptimizationsFeatureDisabledSuspendEnabled) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization);
+ SetUpMediaSuspend(true);
InitializeWebMediaPlayerImpl(true);
SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
@@ -741,15 +760,15 @@ TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureDisabled) {
SetMetadata(true, true);
EXPECT_TRUE(IsBackgroundOptimizationCandidate());
EXPECT_FALSE(ShouldDisableVideoWhenHidden());
- EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden());
- // Video only (pausing is enabled on Android).
+ // Video only.
SetMetadata(false, true);
EXPECT_TRUE(IsBackgroundOptimizationCandidate());
EXPECT_FALSE(ShouldDisableVideoWhenHidden());
-#if defined(OS_ANDROID)
EXPECT_TRUE(ShouldPauseVideoWhenHidden());
+#if defined(OS_ANDROID)
// On Android, the duration and keyframe distance don't matter for video-only.
SetDuration(base::TimeDelta::FromSeconds(5));
EXPECT_TRUE(IsBackgroundOptimizationCandidate());
@@ -762,8 +781,107 @@ TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureDisabled) {
// Restore average keyframe distance.
SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
-#else
+#endif
+
+ // Audio only.
+ SetMetadata(true, false);
+ EXPECT_FALSE(IsBackgroundOptimizationCandidate());
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden());
+
+ // Duration is shorter than max video keyframe distance.
+ SetDuration(base::TimeDelta::FromSeconds(5));
+ SetMetadata(true, true);
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate());
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden());
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden());
+
+ // Average keyframe distance is too big.
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
+ SetDuration(base::TimeDelta::FromSeconds(300));
+ EXPECT_FALSE(IsBackgroundOptimizationCandidate());
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden());
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden());
+}
+
+TEST_F(WebMediaPlayerImplTest,
+ BackgroundOptimizationsFeatureEnabledSuspendDisabled) {
+ base::test::ScopedFeatureList scoped_feature_list;
+ scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization);
+ SetUpMediaSuspend(false);
+
+ InitializeWebMediaPlayerImpl(true);
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
+ SetDuration(base::TimeDelta::FromSeconds(300));
+
+ // Audible video.
+ SetMetadata(true, true);
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate());
+ EXPECT_TRUE(ShouldDisableVideoWhenHidden());
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+
+ // Video only.
+ SetMetadata(false, true);
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate());
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden());
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden());
+
+ // Audio only.
+ SetMetadata(true, false);
+ EXPECT_FALSE(IsBackgroundOptimizationCandidate());
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden());
+
+ // Duration is shorter than max video keyframe distance.
+ SetDuration(base::TimeDelta::FromSeconds(5));
+ SetMetadata(true, true);
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate());
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+ EXPECT_TRUE(ShouldDisableVideoWhenHidden());
+
+ // Average keyframe distance is too big.
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
+ SetDuration(base::TimeDelta::FromSeconds(300));
+ EXPECT_FALSE(IsBackgroundOptimizationCandidate());
EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden());
+}
+
+TEST_F(WebMediaPlayerImplTest,
+ BackgroundOptimizationsFeatureDisabledSuspendDisabled) {
+ base::test::ScopedFeatureList scoped_feature_list;
+ scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization);
+ SetUpMediaSuspend(false);
+
+ InitializeWebMediaPlayerImpl(true);
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
+ SetDuration(base::TimeDelta::FromSeconds(300));
+
+ // Audible video.
+ SetMetadata(true, true);
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate());
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden());
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+
+ // Video only.
+ SetMetadata(false, true);
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate());
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden());
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+
+#if defined(OS_ANDROID)
+ // On Android, the duration and keyframe distance don't matter for video-only.
+ SetDuration(base::TimeDelta::FromSeconds(5));
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate());
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
+ SetDuration(base::TimeDelta::FromSeconds(300));
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate());
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden());
+
+ // Restore average keyframe distance.
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
#endif
// Audio only.
« 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