Index: content/renderer/media/renderer_webmediaplayer_delegate.cc |
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.cc b/content/renderer/media/renderer_webmediaplayer_delegate.cc |
index 92d1140e8a6c52c2500f4daa21383717f482f37d..a20a72e43311cef9b291579286d64c5bbced51b4 100644 |
--- a/content/renderer/media/renderer_webmediaplayer_delegate.cc |
+++ b/content/renderer/media/renderer_webmediaplayer_delegate.cc |
@@ -13,7 +13,9 @@ |
#include "content/common/media/media_player_delegate_messages.h" |
#include "content/public/renderer/render_frame.h" |
#include "content/public/renderer/render_thread.h" |
+#include "media/base/media_switches.h" |
#include "third_party/WebKit/public/platform/WebMediaPlayer.h" |
+#include "third_party/WebKit/public/web/WebUserGestureIndicator.h" |
#if defined(OS_ANDROID) |
#include "base/android/build_info.h" |
@@ -62,8 +64,9 @@ bool RendererWebMediaPlayerDelegate::IsFrameClosed() { |
} |
bool RendererWebMediaPlayerDelegate::IsBackgroundVideoPlaybackUnlocked() { |
- // TODO(sandersd): Include a check for kResumeBackgroundVideo? |
- return background_video_allowed_; |
+ return base::FeatureList::IsEnabled(kResumeBackgroundVideo) && |
+ (background_video_allowed_ || |
+ blink::WebUserGestureIndicator::isProcessingUserGesture()); |
} |
int RendererWebMediaPlayerDelegate::AddObserver(Observer* observer) { |
@@ -98,6 +101,8 @@ void RendererWebMediaPlayerDelegate::DidPlay( |
playing_videos_.insert(player_id); |
has_played_video_ = true; |
} |
+ if (IsFrameHidden() && !IsFrameClosed()) |
+ background_video_allowed_ = true; |
} else { |
playing_videos_.erase(player_id); |
} |
@@ -112,6 +117,14 @@ void RendererWebMediaPlayerDelegate::DidPlay( |
void RendererWebMediaPlayerDelegate::DidPause(int player_id) { |
DVLOG(2) << __func__ << "(" << player_id << ")"; |
DCHECK(id_map_.Lookup(player_id)); |
+ |
+ // If user explicitly paused the video playing in the background, don't allow |
+ // the page to resume background playback without user's intent. |
+ if (blink::WebUserGestureIndicator::isProcessingUserGesture() && |
+ playing_videos_.count(player_id) && IsFrameHidden() && !IsFrameClosed()) { |
DaleCurtis
2017/02/16 02:47:38
Is playing_videos_.count() what you want? If the p
whywhat
2017/02/16 13:19:31
If the page is paused, the user shouldn't be able
|
+ background_video_allowed_ = false; |
+ } |
+ |
playing_videos_.erase(player_id); |
Send(new MediaPlayerDelegateHostMsg_OnMediaPaused(routing_id(), player_id, |
false)); |