| Index: media/blink/webmediaplayer_impl_unittest.cc
|
| diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc
|
| index b71141d6a085156e4fad24cca3201d7743d9e68e..e34ba76745f83c79df69a1da31ecf5339819abd8 100644
|
| --- a/media/blink/webmediaplayer_impl_unittest.cc
|
| +++ b/media/blink/webmediaplayer_impl_unittest.cc
|
| @@ -35,6 +35,7 @@
|
| #include "third_party/WebKit/public/web/WebView.h"
|
| #include "url/gurl.h"
|
|
|
| +using ::testing::AnyNumber;
|
| using ::testing::InSequence;
|
| using ::testing::Return;
|
| using ::testing::_;
|
| @@ -120,9 +121,16 @@ class WebMediaPlayerImplTest : public testing::Test {
|
| audio_parameters_(TestAudioParameters::Normal()) {
|
| web_view_->setMainFrame(web_local_frame_);
|
| media_thread_.StartAndWaitForTesting();
|
| + }
|
| +
|
| + void InitializeDefaultWebMediaPlayerImpl() {
|
| + InitializeWebMediaPlayerImpl(delegate_.AsWeakPtr());
|
| + }
|
|
|
| + void InitializeWebMediaPlayerImpl(
|
| + base::WeakPtr<MockWebMediaPlayerDelegate> delegate) {
|
| wmpi_.reset(new WebMediaPlayerImpl(
|
| - web_local_frame_, &client_, nullptr, delegate_.AsWeakPtr(),
|
| + web_local_frame_, &client_, nullptr, delegate,
|
| base::MakeUnique<DefaultRendererFactory>(
|
| media_log_, nullptr, DefaultRendererFactory::GetGpuFactoriesCB()),
|
| url_index_,
|
| @@ -197,12 +205,24 @@ class WebMediaPlayerImplTest : public testing::Test {
|
| return wmpi_->UpdatePlayState_ComputePlayState(false, false, false);
|
| }
|
|
|
| + WebMediaPlayerImpl::PlayState ComputeIdleSuspendedPlayState() {
|
| + wmpi_->is_idle_ = true;
|
| + wmpi_->must_suspend_ = false;
|
| + return wmpi_->UpdatePlayState_ComputePlayState(false, true, false);
|
| + }
|
| +
|
| WebMediaPlayerImpl::PlayState ComputeMustSuspendPlayState() {
|
| wmpi_->is_idle_ = false;
|
| wmpi_->must_suspend_ = true;
|
| return wmpi_->UpdatePlayState_ComputePlayState(false, false, false);
|
| }
|
|
|
| + bool IsSuspended() { return wmpi_->pipeline_controller_.IsSuspended(); }
|
| +
|
| + void AddBufferedRanges() {
|
| + wmpi_->buffered_data_source_host_.AddBufferedByteRange(0, 1);
|
| + }
|
| +
|
| void SetupForResumingBackgroundVideo() {
|
| #if !defined(OS_ANDROID)
|
| // Need to enable media suspend to test resuming background videos.
|
| @@ -237,7 +257,7 @@ class WebMediaPlayerImplTest : public testing::Test {
|
| // may want a mock or intelligent fake.
|
| DummyWebMediaPlayerClient client_;
|
|
|
| - MockWebMediaPlayerDelegate delegate_;
|
| + testing::NiceMock<MockWebMediaPlayerDelegate> delegate_;
|
|
|
| // The WebMediaPlayerImpl instance under test.
|
| std::unique_ptr<WebMediaPlayerImpl> wmpi_;
|
| @@ -246,9 +266,29 @@ class WebMediaPlayerImplTest : public testing::Test {
|
| DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest);
|
| };
|
|
|
| -TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {}
|
| +TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| +}
|
| +
|
| +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());
|
| + EXPECT_FALSE(IsSuspended());
|
| + EXPECT_CALL(strict_delegate, PlayerGone(0));
|
| + wmpi_->OnSuspendRequested(false);
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(IsSuspended());
|
| + AddBufferedRanges();
|
| + EXPECT_CALL(strict_delegate, PlayerGone(0));
|
| + wmpi_->didLoadingProgress();
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_FALSE(IsSuspended());
|
| +}
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
|
|
| state = ComputePlayState();
|
| @@ -256,10 +296,15 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) {
|
| EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| EXPECT_FALSE(state.is_suspended);
|
|
|
| + state = ComputeIdlePlayState();
|
| + EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
|
| + EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| + EXPECT_TRUE(state.is_suspended);
|
| +
|
| state = ComputeBackgroundedPlayState();
|
| EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
|
| EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| - EXPECT_FALSE(state.is_suspended);
|
| + EXPECT_TRUE(state.is_suspended);
|
|
|
| state = ComputeMustSuspendPlayState();
|
| EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
|
| @@ -268,6 +313,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
|
|
| @@ -276,6 +322,11 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) {
|
| EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| EXPECT_FALSE(state.is_suspended);
|
|
|
| + state = ComputeIdlePlayState();
|
| + EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
|
| + EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| + EXPECT_TRUE(state.is_suspended);
|
| +
|
| state = ComputeBackgroundedPlayState();
|
| EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
|
| EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| @@ -288,6 +339,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, false);
|
|
|
| @@ -296,6 +348,11 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) {
|
| EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| EXPECT_FALSE(state.is_suspended);
|
|
|
| + state = ComputeIdlePlayState();
|
| + EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
|
| + EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| + EXPECT_TRUE(state.is_suspended);
|
| +
|
| SetPaused(false);
|
| state = ComputeBackgroundedPlayState();
|
| EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
|
| @@ -309,6 +366,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
| SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
|
| @@ -340,6 +398,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
| SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
|
| @@ -365,6 +424,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
| SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
|
| @@ -395,6 +455,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, false);
|
| SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
|
| @@ -426,32 +487,33 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
| SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
|
| SetSeeking(true);
|
|
|
| state = ComputePlayState();
|
| - EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED_BUT_NOT_IDLE,
|
| - state.delegate_state);
|
| + EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
|
| EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| EXPECT_FALSE(state.is_suspended);
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Fullscreen) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
| SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
|
| SetFullscreen(true);
|
|
|
| state = ComputePlayState();
|
| - EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED_BUT_NOT_IDLE,
|
| - state.delegate_state);
|
| + EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
|
| EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| EXPECT_FALSE(state.is_suspended);
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
| SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
|
| @@ -470,6 +532,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
|
|
| @@ -481,6 +544,12 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) {
|
| EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| EXPECT_FALSE(state.is_suspended);
|
|
|
| + // Paused players in the idle state are allowed to remain suspended.
|
| + state = ComputeIdleSuspendedPlayState();
|
| + EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
|
| + EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| + EXPECT_TRUE(state.is_suspended);
|
| +
|
| SetPaused(false);
|
| state = ComputePlayStateSuspended();
|
| EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
|
| @@ -509,8 +578,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) {
|
|
|
| SetPaused(true);
|
| state = ComputePlayStateSuspended();
|
| - EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED_BUT_NOT_IDLE,
|
| - state.delegate_state);
|
| + EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
|
| EXPECT_FALSE(state.is_memory_reporting_enabled);
|
| EXPECT_FALSE(state.is_suspended);
|
|
|
| @@ -522,6 +590,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| PipelineMetadata metadata;
|
| metadata.has_video = true;
|
| metadata.natural_size = gfx::Size(320, 240);
|
| @@ -535,6 +604,7 @@ TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) {
|
| }
|
|
|
| TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| PipelineMetadata metadata;
|
| metadata.has_video = true;
|
| metadata.natural_size = gfx::Size(320, 240);
|
| @@ -550,6 +620,7 @@ TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) {
|
|
|
| // Audible backgrounded videos are not suspended if delegate_ allows it.
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
| SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
|
| @@ -570,6 +641,7 @@ TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) {
|
| // Backgrounding audible videos should suspend them and report as paused, not
|
| // gone.
|
| TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPaused) {
|
| + InitializeDefaultWebMediaPlayerImpl();
|
| WebMediaPlayerImpl::PlayState state;
|
| SetMetadata(true, true);
|
| SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
|
|
|