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

Unified Diff: media/blink/webmediaplayer_impl.cc

Issue 2567833002: [Video] Pause videos with no audio when in the background. (Closed)
Patch Set: Rebase Created 3 years, 11 months 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
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('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.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
« no previous file with comments | « media/blink/webmediaplayer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698