Index: media/blink/webmediaplayer_impl_unittest.cc |
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc |
index abb0803d69fa9650dd3211458ae86d77365a23d6..bcbb1500be30f4d51fb3fd016b59bd56fe493fed 100644 |
--- a/media/blink/webmediaplayer_impl_unittest.cc |
+++ b/media/blink/webmediaplayer_impl_unittest.cc |
@@ -16,6 +16,7 @@ |
#include "base/memory/weak_ptr.h" |
#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
+#include "base/test/simple_test_tick_clock.h" |
#include "base/threading/thread.h" |
#include "base/threading/thread_task_runner_handle.h" |
#include "media/base/media_log.h" |
@@ -127,14 +128,9 @@ class WebMediaPlayerImplTest : public testing::Test { |
media_thread_.StartAndWaitForTesting(); |
} |
- void InitializeDefaultWebMediaPlayerImpl() { |
- InitializeWebMediaPlayerImpl(delegate_.AsWeakPtr()); |
- } |
- |
- void InitializeWebMediaPlayerImpl( |
- base::WeakPtr<MockWebMediaPlayerDelegate> delegate) { |
+ void InitializeWebMediaPlayerImpl() { |
wmpi_.reset(new WebMediaPlayerImpl( |
- web_local_frame_, &client_, nullptr, delegate, |
+ web_local_frame_, &client_, nullptr, delegate_.AsWeakPtr(), |
base::MakeUnique<DefaultRendererFactory>( |
media_log_, nullptr, DefaultRendererFactory::GetGpuFactoriesCB()), |
url_index_, |
@@ -166,6 +162,7 @@ class WebMediaPlayerImplTest : public testing::Test { |
void SetPaused(bool is_paused) { wmpi_->paused_ = is_paused; } |
void SetSeeking(bool is_seeking) { wmpi_->seeking_ = is_seeking; } |
void SetEnded(bool is_ended) { wmpi_->ended_ = is_ended; } |
+ void SetTickClock(base::TickClock* clock) { wmpi_->tick_clock_.reset(clock); } |
void SetFullscreen(bool is_fullscreen) { |
wmpi_->overlay_enabled_ = is_fullscreen; |
@@ -274,14 +271,47 @@ class WebMediaPlayerImplTest : public testing::Test { |
}; |
TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
} |
-TEST_F(WebMediaPlayerImplTest, DidLoadingProgressClearsIdle) { |
- testing::StrictMock<MockWebMediaPlayerDelegate> strict_delegate; |
- EXPECT_CALL(strict_delegate, AddObserver(_)); |
- EXPECT_CALL(strict_delegate, IsPlayingBackgroundVideo()).Times(AnyNumber()); |
- InitializeWebMediaPlayerImpl(strict_delegate.AsWeakPtr()); |
+TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledBeforeLoadingBegins) { |
+ InitializeWebMediaPlayerImpl(); |
+ wmpi_->OnSuspendRequested(false); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_TRUE(IsSuspended()); |
+} |
+ |
+TEST_F(WebMediaPlayerImplTest, |
+ IdleSuspendIsDisabledIfLoadingProgressedRecently) { |
+ InitializeWebMediaPlayerImpl(); |
+ base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); |
+ clock->Advance(base::TimeDelta::FromSeconds(1)); |
+ SetTickClock(clock); |
+ AddBufferedRanges(); |
+ wmpi_->didLoadingProgress(); |
+ // Advance less than the loading timeout. |
+ clock->Advance(base::TimeDelta::FromSeconds(1)); |
+ wmpi_->OnSuspendRequested(false); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_FALSE(IsSuspended()); |
+} |
+ |
+TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledIfLoadingHasStalled) { |
+ InitializeWebMediaPlayerImpl(); |
+ base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); |
+ clock->Advance(base::TimeDelta::FromSeconds(1)); |
+ SetTickClock(clock); |
+ AddBufferedRanges(); |
+ wmpi_->didLoadingProgress(); |
+ // Advance more than the loading timeout. |
+ clock->Advance(base::TimeDelta::FromSeconds(4)); |
+ wmpi_->OnSuspendRequested(false); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_TRUE(IsSuspended()); |
+} |
+ |
+TEST_F(WebMediaPlayerImplTest, DidLoadingProgressTriggersResume) { |
+ InitializeWebMediaPlayerImpl(); |
EXPECT_FALSE(IsSuspended()); |
wmpi_->OnSuspendRequested(false); |
base::RunLoop().RunUntilIdle(); |
@@ -293,7 +323,7 @@ TEST_F(WebMediaPlayerImplTest, DidLoadingProgressClearsIdle) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
state = ComputePlayState(); |
@@ -318,7 +348,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
@@ -344,7 +374,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, false); |
@@ -371,7 +401,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
@@ -403,7 +433,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
@@ -429,7 +459,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
@@ -460,7 +490,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, false); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
@@ -492,7 +522,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
@@ -505,7 +535,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Fullscreen) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
@@ -518,7 +548,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Fullscreen) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
@@ -537,7 +567,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) { |
} |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
@@ -595,7 +625,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) { |
} |
TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
PipelineMetadata metadata; |
metadata.has_video = true; |
metadata.natural_size = gfx::Size(320, 240); |
@@ -609,7 +639,7 @@ TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) { |
} |
TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
PipelineMetadata metadata; |
metadata.has_video = true; |
metadata.natural_size = gfx::Size(320, 240); |
@@ -625,7 +655,7 @@ TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) { |
// Audible backgrounded videos are not suspended if delegate_ allows it. |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
@@ -646,7 +676,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) { |
// Backgrounding audible videos should suspend them and report as paused, not |
// gone. |
TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPaused) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
WebMediaPlayerImpl::PlayState state; |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
@@ -663,7 +693,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPaused) { |
} |
TEST_F(WebMediaPlayerImplTest, AutoplayMuted_StartsAndStops) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
SetPaused(false); |
@@ -678,7 +708,7 @@ TEST_F(WebMediaPlayerImplTest, AutoplayMuted_StartsAndStops) { |
} |
TEST_F(WebMediaPlayerImplTest, AutoplayMuted_SetVolume) { |
- InitializeDefaultWebMediaPlayerImpl(); |
+ InitializeWebMediaPlayerImpl(); |
SetMetadata(true, true); |
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
SetPaused(false); |