Chromium Code Reviews| Index: media/blink/webmediaplayer_impl.cc |
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
| index b6a56c2cd26dce38c4fc4676e610e77460f315e6..1ab167461b5da4ef94aef05f80e29134822cbfcb 100644 |
| --- a/media/blink/webmediaplayer_impl.cc |
| +++ b/media/blink/webmediaplayer_impl.cc |
| @@ -205,6 +205,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
| opaque_(false), |
| playback_rate_(0.0), |
| paused_(true), |
| + paused_when_hidden_(false), |
| seeking_(false), |
| pending_suspend_resume_cycle_(false), |
| ended_(false), |
| @@ -448,6 +449,9 @@ void WebMediaPlayerImpl::pause() { |
| // paused state. |
| paused_ = true; |
| + // No longer paused because it was hidden. |
| + paused_when_hidden_ = false; |
| + |
| #if defined(OS_ANDROID) // WMPI_CAST |
| if (isRemote()) { |
| cast_impl_.pause(); |
| @@ -1336,12 +1340,19 @@ void WebMediaPlayerImpl::OnVideoOpacityChange(bool opaque) { |
| void WebMediaPlayerImpl::OnHidden() { |
| DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| - if (IsBackgroundVideoTrackOptimizationEnabled()) |
| - selectedVideoTrackChanged(nullptr); |
| - |
| if (watch_time_reporter_) |
| watch_time_reporter_->OnHidden(); |
| + if (IsBackgroundVideoTrackOptimizationEnabled()) { |
| + if (ShouldPauseWhenHidden()) { |
| + OnPause(); |
| + paused_when_hidden_ = true; |
|
sandersd (OOO until July 31)
2017/01/06 01:44:15
Probably needs a comment to explain that the order
whywhat
2017/01/06 16:59:31
Done. Alternatively I could perhaps take the most
|
| + return; |
| + } |
| + |
| + selectedVideoTrackChanged(nullptr); |
| + } |
| + |
| UpdatePlayState(); |
| // Schedule suspended playing media to be paused if the user doesn't come back |
| @@ -1354,10 +1365,17 @@ void WebMediaPlayerImpl::OnShown() { |
| if (watch_time_reporter_) |
| watch_time_reporter_->OnShown(); |
| - if (IsBackgroundVideoTrackOptimizationEnabled() && |
| - client_->hasSelectedVideoTrack()) { |
| - WebMediaPlayer::TrackId trackId = client_->getSelectedVideoTrackId(); |
| - selectedVideoTrackChanged(&trackId); |
| + if (IsBackgroundVideoTrackOptimizationEnabled()) { |
| + if (paused_when_hidden_) { |
| + paused_when_hidden_ = false; |
| + OnPlay(); |
| + return; |
| + } |
| + |
| + if (client_->hasSelectedVideoTrack()) { |
| + WebMediaPlayer::TrackId trackId = client_->getSelectedVideoTrackId(); |
| + selectedVideoTrackChanged(&trackId); |
| + } |
| } |
| must_suspend_ = false; |
| @@ -2040,4 +2058,13 @@ void WebMediaPlayerImpl::ActivateViewportIntersectionMonitoring(bool activate) { |
| client_->activateViewportIntersectionMonitoring(activate); |
| } |
| +bool WebMediaPlayerImpl::ShouldPauseWhenHidden() const { |
| +#if defined(OS_ANDROID) // WMPI_CAST |
| + if (isRemote()) |
| + return false; |
| +#endif // defined(OS_ANDROID) // WMPI_CAST |
| + |
| + return hasVideo() && !hasAudio(); |
| +} |
| + |
| } // namespace media |