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

Unified Diff: media/blink/webmediaplayer_impl_unittest.cc

Issue 2490783002: Refactor WebMediaPlayerDelegate interface. (Closed)
Patch Set: Update WMPA properly. Created 4 years 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 d7ef58e8525b61b96e94f1e8d190b290c12769e2..ea2582797f5c9b47622e45d6435a957da559608f 100644
--- a/media/blink/webmediaplayer_impl_unittest.cc
+++ b/media/blink/webmediaplayer_impl_unittest.cc
@@ -111,13 +111,75 @@ class MockWebMediaPlayerDelegate
~MockWebMediaPlayerDelegate() = default;
// WebMediaPlayerDelegate implementation.
- MOCK_METHOD1(AddObserver, int(Observer*));
- MOCK_METHOD1(RemoveObserver, void(int));
- MOCK_METHOD5(DidPlay, void(int, bool, bool, bool, MediaContentType));
- MOCK_METHOD2(DidPause, void(int, bool));
+ int AddObserver(Observer* observer) override {
+ DCHECK_EQ(nullptr, observer_);
+ observer_ = observer;
+ return player_id_;
+ }
+
+ void RemoveObserver(int player_id) override {
+ DCHECK_EQ(player_id_, player_id);
+ observer_ = nullptr;
+ }
+
+ MOCK_METHOD4(DidPlay, void(int, bool, bool, MediaContentType));
+ MOCK_METHOD1(DidPause, void(int));
MOCK_METHOD1(PlayerGone, void(int));
- MOCK_METHOD0(IsHidden, bool());
- MOCK_METHOD0(IsPlayingBackgroundVideo, bool());
+ MOCK_METHOD0(IsBackgroundVideoPlaybackAllowed, bool());
+
+ void SetIdle(int player_id, bool is_idle) override {
+ DCHECK_EQ(player_id_, player_id);
+ is_idle_ = is_idle;
+ is_stale_ &= is_idle;
+ }
+
+ bool IsIdle(int player_id) override {
+ DCHECK_EQ(player_id_, player_id);
+ return is_idle_;
+ }
+
+ void ClearStaleFlag(int player_id) override {
+ DCHECK_EQ(player_id_, player_id);
+ is_stale_ = false;
+ }
+
+ bool IsStale(int player_id) override {
+ DCHECK_EQ(player_id_, player_id);
+ return is_stale_;
+ }
+
+ // Currently |is_backgrounded| overrides this completely, so no explicit
+ // control is needed.
+ bool IsFrameHidden() override { return is_closed_; }
+
+ bool IsFrameClosed() override { return is_closed_; }
+
+ void SetIdleForTesting(bool is_idle) { is_idle_ = is_idle; }
+
+ void SetStaleForTesting(bool is_stale) {
+ is_idle_ |= is_stale;
+ is_stale_ = is_stale;
+ }
+
+ // Returns true if the player does in fact expire.
+ bool ExpireForTesting() {
+ if (is_idle_ && !is_stale_) {
+ if (observer_->OnIdleTimeout()) {
+ is_stale_ = true;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void SetFrameClosedForTesting(bool is_closed) { is_closed_ = is_closed; }
+
+ private:
+ Observer* observer_ = nullptr;
+ int player_id_ = 1234;
+ bool is_idle_ = false;
+ bool is_stale_ = false;
+ bool is_closed_ = false;
};
class WebMediaPlayerImplTest : public testing::Test {
@@ -189,51 +251,25 @@ class WebMediaPlayerImplTest : public testing::Test {
}
WebMediaPlayerImpl::PlayState ComputePlayState() {
- wmpi_->is_idle_ = false;
- wmpi_->must_suspend_ = false;
return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, false);
}
- WebMediaPlayerImpl::PlayState ComputePlayStateSuspended() {
- wmpi_->is_idle_ = false;
- wmpi_->must_suspend_ = false;
- return wmpi_->UpdatePlayState_ComputePlayState(false, false, true, false);
- }
-
- WebMediaPlayerImpl::PlayState ComputeBackgroundedPlayState() {
- wmpi_->is_idle_ = false;
- wmpi_->must_suspend_ = false;
+ WebMediaPlayerImpl::PlayState ComputePlayState_FrameHidden() {
return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, true);
}
- WebMediaPlayerImpl::PlayState ComputeIdlePlayState() {
- wmpi_->is_idle_ = true;
- wmpi_->must_suspend_ = false;
- return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, false);
- }
-
- WebMediaPlayerImpl::PlayState ComputeIdleSuspendedPlayState() {
- wmpi_->is_idle_ = true;
- wmpi_->must_suspend_ = false;
+ WebMediaPlayerImpl::PlayState ComputePlayState_Suspended() {
return wmpi_->UpdatePlayState_ComputePlayState(false, false, true, false);
}
- WebMediaPlayerImpl::PlayState ComputeMustSuspendPlayState() {
- wmpi_->is_idle_ = false;
- wmpi_->must_suspend_ = true;
- return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, false);
+ WebMediaPlayerImpl::PlayState ComputePlayState_Remote() {
+ return wmpi_->UpdatePlayState_ComputePlayState(true, false, false, false);
}
- WebMediaPlayerImpl::PlayState ComputeStreamingPlayState(bool must_suspend) {
- wmpi_->is_idle_ = true;
- wmpi_->must_suspend_ = must_suspend;
+ WebMediaPlayerImpl::PlayState ComputePlayState_BackgroundedStreaming() {
return wmpi_->UpdatePlayState_ComputePlayState(false, true, false, true);
}
- void SetDelegateState(WebMediaPlayerImpl::DelegateState state) {
- wmpi_->SetDelegateState(state);
- }
-
bool IsSuspended() { return wmpi_->pipeline_controller_.IsSuspended(); }
void AddBufferedRanges() {
@@ -249,6 +285,10 @@ class WebMediaPlayerImplTest : public testing::Test {
scoped_feature_list_.InitAndEnableFeature(kResumeBackgroundVideo);
}
+ void SetDelegateState(WebMediaPlayerImpl::DelegateState state) {
+ wmpi_->SetDelegateState(state, false);
+ }
+
// "Renderer" thread.
base::MessageLoop message_loop_;
@@ -284,11 +324,12 @@ class WebMediaPlayerImplTest : public testing::Test {
TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {
InitializeWebMediaPlayerImpl();
+ EXPECT_FALSE(IsSuspended());
}
TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledBeforeLoadingBegins) {
InitializeWebMediaPlayerImpl();
- wmpi_->OnSuspendRequested(false);
+ EXPECT_TRUE(delegate_.ExpireForTesting());
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(IsSuspended());
}
@@ -303,7 +344,7 @@ TEST_F(WebMediaPlayerImplTest,
wmpi_->didLoadingProgress();
// Advance less than the loading timeout.
clock->Advance(base::TimeDelta::FromSeconds(1));
- wmpi_->OnSuspendRequested(false);
+ EXPECT_FALSE(delegate_.ExpireForTesting());
base::RunLoop().RunUntilIdle();
EXPECT_FALSE(IsSuspended());
}
@@ -317,344 +358,273 @@ TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledIfLoadingHasStalled) {
wmpi_->didLoadingProgress();
// Advance more than the loading timeout.
clock->Advance(base::TimeDelta::FromSeconds(4));
- wmpi_->OnSuspendRequested(false);
+ EXPECT_TRUE(delegate_.ExpireForTesting());
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(IsSuspended());
}
TEST_F(WebMediaPlayerImplTest, DidLoadingProgressTriggersResume) {
+ // Same setup as IdleSuspendIsEnabledBeforeLoadingBegins.
InitializeWebMediaPlayerImpl();
- EXPECT_FALSE(IsSuspended());
- wmpi_->OnSuspendRequested(false);
+ EXPECT_TRUE(delegate_.ExpireForTesting());
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(IsSuspended());
+
+ // Like IdleSuspendIsDisabledIfLoadingProgressedRecently, the idle timeout
+ // should be rejected if it hasn't been long enough.
AddBufferedRanges();
wmpi_->didLoadingProgress();
+ EXPECT_FALSE(delegate_.ExpireForTesting());
base::RunLoop().RunUntilIdle();
EXPECT_FALSE(IsSuspended());
}
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) {
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_Constructed) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
-
- state = ComputePlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_FALSE(state.is_suspended);
-
- state = ComputeIdlePlayState();
+ WebMediaPlayerImpl::PlayState state = ComputePlayState();
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_TRUE(state.is_idle);
EXPECT_FALSE(state.is_suspended);
-
- state = ComputeMustSuspendPlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
}
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) {
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_HaveMetadata) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
SetMetadata(true, true);
-
- state = ComputePlayState();
+ WebMediaPlayerImpl::PlayState state = ComputePlayState();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
+ EXPECT_TRUE(state.is_idle);
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_TRUE(state.is_suspended);
-
- state = ComputeMustSuspendPlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
}
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) {
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_HaveFutureData) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
- SetMetadata(true, false);
-
- state = ComputePlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- 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);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_FALSE(state.is_suspended);
-
- state = ComputeMustSuspendPlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
-}
-
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) {
- InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
SetMetadata(true, true);
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
-
- state = ComputePlayState();
+ WebMediaPlayerImpl::PlayState state = ComputePlayState();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
+ EXPECT_TRUE(state.is_idle);
EXPECT_FALSE(state.is_suspended);
-
- state = ComputeBackgroundedPlayState();
-
- if (base::FeatureList::IsEnabled(kResumeBackgroundVideo))
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
- else
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
-
- // Idle suspension is possible after HaveFutureData.
- state = ComputeIdlePlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
-
- state = ComputeMustSuspendPlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
}
TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
SetMetadata(true, true);
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
SetPaused(false);
-
- state = ComputePlayState();
+ WebMediaPlayerImpl::PlayState state = ComputePlayState();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
- EXPECT_TRUE(state.is_memory_reporting_enabled);
+ EXPECT_FALSE(state.is_idle);
EXPECT_FALSE(state.is_suspended);
-
- state = ComputeBackgroundedPlayState();
- if (base::FeatureList::IsEnabled(kResumeBackgroundVideo))
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
- else
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
-
- state = ComputeMustSuspendPlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
+ EXPECT_TRUE(state.is_memory_reporting_enabled);
}
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) {
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_Underflow) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
SetMetadata(true, true);
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
SetPaused(false);
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveCurrentData);
-
- // Underflow should not trigger idle suspend. The user is still playing the
- // the video, just waiting on the network.
- state = ComputePlayState();
+ WebMediaPlayerImpl::PlayState state = ComputePlayState();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
- EXPECT_TRUE(state.is_memory_reporting_enabled);
+ EXPECT_FALSE(state.is_idle);
EXPECT_FALSE(state.is_suspended);
+ EXPECT_TRUE(state.is_memory_reporting_enabled);
+}
- // Background suspend should still be possible during underflow.
- state = ComputeBackgroundedPlayState();
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameHidden) {
+ InitializeWebMediaPlayerImpl();
+ SetMetadata(true, true);
+ SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
+ SetPaused(false);
+ WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
+ // TODO(sandersd): Make sure both variants are tested.
whywhat 2016/12/12 18:11:23 nit: the enabled version should be tested on Andro
sandersd (OOO until July 31) 2017/01/05 23:12:21 Done.
if (base::FeatureList::IsEnabled(kResumeBackgroundVideo))
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
else
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
+ EXPECT_TRUE(state.is_idle);
EXPECT_TRUE(state.is_suspended);
+ EXPECT_FALSE(state.is_memory_reporting_enabled);
+}
- // Forced suspend should still be possible during underflow.
- state = ComputeMustSuspendPlayState();
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameClosed) {
+ InitializeWebMediaPlayerImpl();
+ SetMetadata(true, true);
+ SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
+ SetPaused(false);
+ delegate_.SetFrameClosedForTesting(true);
+ WebMediaPlayerImpl::PlayState state = ComputePlayState();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
+ EXPECT_TRUE(state.is_idle);
EXPECT_TRUE(state.is_suspended);
+ EXPECT_FALSE(state.is_memory_reporting_enabled);
}
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) {
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_PausedSeek) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
- SetMetadata(true, false);
+ SetMetadata(true, true);
+ SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
+ SetSeeking(true);
+ WebMediaPlayerImpl::PlayState state = ComputePlayState();
+ EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
+ EXPECT_FALSE(state.is_idle);
+ EXPECT_FALSE(state.is_suspended);
+ EXPECT_TRUE(state.is_memory_reporting_enabled);
+}
+
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) {
+ InitializeWebMediaPlayerImpl();
+ SetMetadata(true, true);
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
SetPaused(false);
+ SetEnded(true);
+ // Before Blink pauses us (or seeks for looping content), the media session
+ // should be preserved.
+ WebMediaPlayerImpl::PlayState state;
state = ComputePlayState();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
- EXPECT_TRUE(state.is_memory_reporting_enabled);
+ EXPECT_FALSE(state.is_idle);
EXPECT_FALSE(state.is_suspended);
-
- // Audio-only stays playing in the background.
- state = ComputeBackgroundedPlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
EXPECT_TRUE(state.is_memory_reporting_enabled);
- EXPECT_FALSE(state.is_suspended);
- // Backgrounding a paused audio only player should suspend, but keep the
- // session alive for user interactions.
SetPaused(true);
- state = ComputeBackgroundedPlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
-
- state = ComputeMustSuspendPlayState();
+ state = ComputePlayState();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
+ EXPECT_TRUE(state.is_idle);
+ EXPECT_FALSE(state.is_suspended);
EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
}
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) {
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_StaysSuspended) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
SetMetadata(true, true);
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
- SetSeeking(true);
- state = ComputePlayState();
+ // Should stay suspended even though not stale or backgrounded.
+ WebMediaPlayerImpl::PlayState state = ComputePlayState_Suspended();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
+ EXPECT_TRUE(state.is_idle);
+ EXPECT_TRUE(state.is_suspended);
EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_FALSE(state.is_suspended);
}
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Fullscreen) {
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_Remote) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
SetMetadata(true, true);
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
- SetFullscreen(true);
- state = ComputePlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
+ // Remote media is always suspended.
+ // TODO(sandersd): Decide whether this should count as idle or not.
+ WebMediaPlayerImpl::PlayState state = ComputePlayState_Remote();
+ EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
+ EXPECT_TRUE(state.is_suspended);
EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_FALSE(state.is_suspended);
}
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) {
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_Fullscreen) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
SetMetadata(true, true);
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
- SetEnded(true);
+ SetFullscreen(true);
+ SetPaused(true);
+ delegate_.SetStaleForTesting(true);
- // The pipeline is not suspended immediately on ended.
- state = ComputePlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
+ // Fullscreen media is never suspended (Android only behavior).
+ WebMediaPlayerImpl::PlayState state = ComputePlayState();
+ EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
+ EXPECT_TRUE(state.is_idle);
EXPECT_FALSE(state.is_suspended);
-
- state = ComputeIdlePlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
}
TEST_F(WebMediaPlayerImplTest, ComputePlayState_Streaming) {
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
SetMetadata(true, true);
-
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
SetPaused(true);
+ delegate_.SetStaleForTesting(true);
- // Streaming media should not suspend, even if paused, idle, and backgrounded.
- state = ComputeStreamingPlayState(false);
+ // Streaming media should not suspend, even if paused, stale, and
+ // backgrounded.
+ WebMediaPlayerImpl::PlayState state;
+ state = ComputePlayState_BackgroundedStreaming();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
+ EXPECT_TRUE(state.is_idle);
EXPECT_FALSE(state.is_suspended);
+ EXPECT_FALSE(state.is_memory_reporting_enabled);
// Streaming media should suspend when the tab is closed, regardless.
- state = ComputeStreamingPlayState(true);
+ delegate_.SetFrameClosedForTesting(true);
+ state = ComputePlayState_BackgroundedStreaming();
EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
+ EXPECT_TRUE(state.is_idle);
EXPECT_TRUE(state.is_suspended);
+ EXPECT_FALSE(state.is_memory_reporting_enabled);
}
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) {
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingBackgroundedVideo) {
+ SetupForResumingBackgroundVideo();
+
InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
SetMetadata(true, true);
+ SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
+ SetPaused(false);
+ EXPECT_CALL(delegate_, IsBackgroundVideoPlaybackAllowed())
+ .WillRepeatedly(Return(true));
- // Suspended players should be resumed unless we have reached the appropriate
- // ready state and are not seeking.
- SetPaused(true);
- state = ComputePlayStateSuspended();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
+ WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
+ EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
+ EXPECT_FALSE(state.is_idle);
EXPECT_FALSE(state.is_suspended);
+ EXPECT_TRUE(state.is_memory_reporting_enabled);
+}
- // 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);
-
+TEST_F(WebMediaPlayerImplTest, ComputePlayState_AudioOnly) {
+ InitializeWebMediaPlayerImpl();
+ SetMetadata(true, false);
+ SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
SetPaused(false);
- state = ComputePlayStateSuspended();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
+
+ // Backgrounded audio-only playback stays playing.
+ WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
+ EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
+ EXPECT_FALSE(state.is_idle);
EXPECT_FALSE(state.is_suspended);
+ EXPECT_TRUE(state.is_memory_reporting_enabled);
+}
+TEST_F(WebMediaPlayerImplTest, AutoplayMuted_StartsAndStops) {
+ InitializeWebMediaPlayerImpl();
+ SetMetadata(true, true);
SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
-
- // Paused players should stay suspended.
- SetPaused(true);
- state = ComputePlayStateSuspended();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
-
- // Playing players should resume into the playing state.
SetPaused(false);
- state = ComputePlayStateSuspended();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
- EXPECT_TRUE(state.is_memory_reporting_enabled);
- EXPECT_FALSE(state.is_suspended);
+ client_.set_is_autoplaying_muted(true);
- // If seeking, the previously suspended state does not matter; the player
- // should always be resumed.
- SetSeeking(true);
+ EXPECT_CALL(delegate_, DidPlay(_, false, true, _));
+ SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
- SetPaused(true);
- state = ComputePlayStateSuspended();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_FALSE(state.is_suspended);
+ client_.set_is_autoplaying_muted(false);
+ EXPECT_CALL(delegate_, DidPlay(_, true, true, _));
+ SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
+}
+TEST_F(WebMediaPlayerImplTest, AutoplayMuted_SetVolume) {
+ InitializeWebMediaPlayerImpl();
+ SetMetadata(true, true);
+ SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
SetPaused(false);
- state = ComputePlayStateSuspended();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
- EXPECT_TRUE(state.is_memory_reporting_enabled);
- EXPECT_FALSE(state.is_suspended);
+ client_.set_is_autoplaying_muted(true);
+
+ EXPECT_CALL(delegate_, DidPlay(_, false, true, _));
+ SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
+
+ client_.set_is_autoplaying_muted(false);
+ EXPECT_CALL(delegate_, DidPlay(_, true, true, _));
+ wmpi_->setVolume(1.0);
}
TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) {
@@ -686,73 +656,4 @@ TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) {
ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize());
}
-// Audible backgrounded videos are not suspended if delegate_ allows it.
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) {
- InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
- SetMetadata(true, true);
- SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
-
- SetupForResumingBackgroundVideo();
-
- EXPECT_CALL(delegate_, IsPlayingBackgroundVideo())
- .WillRepeatedly(Return(true));
- EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true));
-
- SetPaused(false);
- state = ComputeBackgroundedPlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
- EXPECT_TRUE(state.is_memory_reporting_enabled);
- EXPECT_FALSE(state.is_suspended);
-}
-
-// Backgrounding audible videos should suspend them and report as paused, not
-// gone.
-TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPaused) {
- InitializeWebMediaPlayerImpl();
- WebMediaPlayerImpl::PlayState state;
- SetMetadata(true, true);
- SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
-
- SetupForResumingBackgroundVideo();
-
- EXPECT_CALL(delegate_, IsPlayingBackgroundVideo()).WillOnce(Return(false));
- EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true));
-
- state = ComputeBackgroundedPlayState();
- EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
- EXPECT_FALSE(state.is_memory_reporting_enabled);
- EXPECT_TRUE(state.is_suspended);
-}
-
-TEST_F(WebMediaPlayerImplTest, AutoplayMuted_StartsAndStops) {
- InitializeWebMediaPlayerImpl();
- SetMetadata(true, true);
- SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
- SetPaused(false);
-
- EXPECT_CALL(delegate_, DidPlay(_, true, false, false, _));
- client_.set_is_autoplaying_muted(true);
- SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
-
- EXPECT_CALL(delegate_, DidPlay(_, true, true, false, _));
- client_.set_is_autoplaying_muted(false);
- SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
-}
-
-TEST_F(WebMediaPlayerImplTest, AutoplayMuted_SetVolume) {
- InitializeWebMediaPlayerImpl();
- SetMetadata(true, true);
- SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
- SetPaused(false);
-
- EXPECT_CALL(delegate_, DidPlay(_, true, false, false, _));
- client_.set_is_autoplaying_muted(true);
- SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
-
- EXPECT_CALL(delegate_, DidPlay(_, true, true, false, _));
- client_.set_is_autoplaying_muted(false);
- wmpi_->setVolume(1.0);
-}
-
} // namespace media
« 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