Chromium Code Reviews| Index: media/blink/webmediaplayer_impl.cc |
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
| index c9b8f8a465bd5590c4dca4fb7af1538961b429bd..ec215ef93e1feae85c65a9af80ed6a887a200d43 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,21 @@ 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() will set |paused_when_hidden_| to false and call |
| + // UpdatePlayState(), so set the flag to true after and then return. |
| + OnPause(); |
| + paused_when_hidden_ = true; |
| + return; |
| + } |
| + |
| + selectedVideoTrackChanged(nullptr); |
| + } |
| + |
| UpdatePlayState(); |
| // Schedule suspended playing media to be paused if the user doesn't come back |
| @@ -1359,10 +1372,17 @@ void WebMediaPlayerImpl::OnShown() { |
| base::Bind(&VideoFrameCompositor::SetForegroundTime, |
| base::Unretained(compositor_), base::TimeTicks::Now())); |
| - if (IsBackgroundVideoTrackOptimizationEnabled() && |
| - client_->hasSelectedVideoTrack()) { |
| - WebMediaPlayer::TrackId trackId = client_->getSelectedVideoTrackId(); |
| - selectedVideoTrackChanged(&trackId); |
| + if (IsBackgroundVideoTrackOptimizationEnabled()) { |
| + if (paused_when_hidden_) { |
| + paused_when_hidden_ = false; |
| + OnPlay(); // Calls UpdatePlayState() so return afterwards. |
| + return; |
| + } |
| + |
| + if (client_->hasSelectedVideoTrack()) { |
| + WebMediaPlayer::TrackId trackId = client_->getSelectedVideoTrackId(); |
| + selectedVideoTrackChanged(&trackId); |
| + } |
| } |
| must_suspend_ = false; |
| @@ -2045,4 +2065,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(); |
|
whywhat
2017/01/06 22:23:48
Mounir - should we add autoplay_muted() for this m
|
| +} |
| + |
| } // namespace media |