Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index 887c99eba4c968c1746105295a0f9c856fd38265..c0fad2da254ec7e0044b6d8570aba6fad1b40705 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -533,6 +533,10 @@ void WebMediaPlayerImpl::setVolume(double volume) { |
pipeline_.SetVolume(volume_ * volume_multiplier_); |
if (watch_time_reporter_) |
watch_time_reporter_->OnVolumeChange(volume); |
+ |
+ // The play state is updated because the player might have left the autoplay |
+ // muted state. |
+ UpdatePlayState(); |
} |
void WebMediaPlayerImpl::setSinkId( |
@@ -1621,20 +1625,30 @@ void WebMediaPlayerImpl::UpdatePlayState() { |
} |
void WebMediaPlayerImpl::SetDelegateState(DelegateState new_state) { |
- if (!delegate_ || delegate_state_ == new_state) |
+ if (!delegate_) |
return; |
+ if (delegate_state_ == new_state) { |
+ if (delegate_state_ != DelegateState::PLAYING || |
+ autoplay_muted_ == client_->isAutoplayingMuted()) { |
+ return; |
+ } |
+ } |
+ |
delegate_state_ = new_state; |
switch (delegate_state_) { |
case DelegateState::GONE: |
delegate_->PlayerGone(delegate_id_); |
break; |
- case DelegateState::PLAYING: |
+ case DelegateState::PLAYING: { |
+ autoplay_muted_ = client_->isAutoplayingMuted(); |
+ bool has_audio = autoplay_muted_ ? false : hasAudio(); |
delegate_->DidPlay( |
- delegate_id_, hasVideo(), hasAudio(), false, |
+ delegate_id_, hasVideo(), has_audio, false, |
media::DurationToMediaContentType(pipeline_.GetMediaDuration())); |
break; |
+ } |
case DelegateState::PAUSED: |
delegate_->DidPause(delegate_id_, false); |
break; |