| Index: content/renderer/media/webmediaplayer_ms.cc
|
| diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc
|
| index 9f59a76476916dc88314563f6044930ba13c5e11..82dac94ed9c67986c54ed537a980a238623bff92 100644
|
| --- a/content/renderer/media/webmediaplayer_ms.cc
|
| +++ b/content/renderer/media/webmediaplayer_ms.cc
|
| @@ -67,7 +67,7 @@ WebMediaPlayerMS::WebMediaPlayerMS(
|
| : url::Origin(security_origin)),
|
| volume_(1.0),
|
| volume_multiplier_(1.0),
|
| - paused_on_hidden_(false) {
|
| + should_play_upon_shown_(false) {
|
| DVLOG(1) << __FUNCTION__;
|
| DCHECK(client);
|
| if (delegate_)
|
| @@ -164,7 +164,7 @@ void WebMediaPlayerMS::play() {
|
| // Don't allow rendering to start while hidden; for either video or audio
|
| // since this may steal focus from a foreground player.
|
| if (delegate_ && delegate_->IsHidden()) {
|
| - paused_on_hidden_ = true;
|
| + should_play_upon_shown_ = true;
|
| return;
|
| }
|
| #endif
|
| @@ -182,7 +182,7 @@ void WebMediaPlayerMS::play() {
|
| media::kInfiniteDuration());
|
| }
|
|
|
| - paused_on_hidden_ = false;
|
| + should_play_upon_shown_ = false;
|
| paused_ = false;
|
| }
|
|
|
| @@ -190,9 +190,7 @@ void WebMediaPlayerMS::pause() {
|
| DVLOG(1) << __FUNCTION__;
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - // Always clear |paused_on_hidden_| since manual pause() should clear it and
|
| - // an OnHidden() pause will set it appropriately after this call.
|
| - paused_on_hidden_ = false;
|
| + should_play_upon_shown_ = false;
|
| media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE));
|
| if (paused_)
|
| return;
|
| @@ -380,7 +378,7 @@ size_t WebMediaPlayerMS::videoDecodedByteCount() const {
|
| return 0;
|
| }
|
|
|
| -void WebMediaPlayerMS::OnHidden(bool must_suspend) {
|
| +void WebMediaPlayerMS::OnHidden() {
|
| #if defined(OS_ANDROID)
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| @@ -392,18 +390,8 @@ void WebMediaPlayerMS::OnHidden(bool must_suspend) {
|
| // can't rely on |render_frame_suspended_| being false here.
|
|
|
| render_frame_suspended_ = true;
|
| - if (must_suspend) {
|
| - if (!paused_) {
|
| - pause();
|
| - paused_on_hidden_ = true;
|
| - }
|
| -
|
| - if (delegate_)
|
| - delegate_->PlayerGone(delegate_id_);
|
| - } else if (!paused_) {
|
| - // pause() will make its own copy in the block above otherwise.
|
| + if (!paused_)
|
| compositor_->ReplaceCurrentFrameWithACopy();
|
| - }
|
| #endif // defined(OS_ANDROID)
|
| }
|
|
|
| @@ -413,19 +401,36 @@ void WebMediaPlayerMS::OnShown() {
|
|
|
| render_frame_suspended_ = false;
|
|
|
| - // Resume playback on visibility. play() clears |paused_on_hidden_|.
|
| - if (paused_on_hidden_)
|
| + // Resume playback on visibility. play() clears |should_play_upon_shown_|.
|
| + if (should_play_upon_shown_)
|
| play();
|
| #endif // defined(OS_ANDROID)
|
| }
|
|
|
| +void WebMediaPlayerMS::OnSuspendRequested(bool must_suspend) {
|
| +#if defined(OS_ANDROID)
|
| + if (!must_suspend)
|
| + return;
|
| +
|
| + if (!paused_) {
|
| + pause();
|
| + should_play_upon_shown_ = true;
|
| + }
|
| +
|
| + if (delegate_)
|
| + delegate_->PlayerGone(delegate_id_);
|
| +
|
| + render_frame_suspended_ = true;
|
| +#endif
|
| +}
|
| +
|
| void WebMediaPlayerMS::OnPlay() {
|
| play();
|
| client_->playbackStateChanged();
|
| }
|
|
|
| void WebMediaPlayerMS::OnPause() {
|
| - const bool was_playing = !paused_ || paused_on_hidden_;
|
| + const bool was_playing = !paused_ || should_play_upon_shown_;
|
| pause();
|
| client_->playbackStateChanged();
|
|
|
| @@ -433,7 +438,7 @@ void WebMediaPlayerMS::OnPause() {
|
| // starts playing audio, in this case we want to track this so that when
|
| // OnShown() is called, we resume into the right state.
|
| if (was_playing && delegate_ && delegate_->IsHidden())
|
| - paused_on_hidden_ = true;
|
| + should_play_upon_shown_ = true;
|
| }
|
|
|
| void WebMediaPlayerMS::OnVolumeMultiplierUpdate(double multiplier) {
|
|
|