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 |