Chromium Code Reviews| 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)); |