| Index: media/blink/webmediaplayer_impl.cc
|
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
|
| index 4b67c9d6ff347ca5db6484867903734d545be079..79324432bda15791083204260aee8fed5adc3c73 100644
|
| --- a/media/blink/webmediaplayer_impl.cc
|
| +++ b/media/blink/webmediaplayer_impl.cc
|
| @@ -273,7 +273,7 @@ void WebMediaPlayerImpl::pause() {
|
| pipeline_.SetPlaybackRate(0.0f);
|
| if (data_source_)
|
| data_source_->MediaIsPaused();
|
| - paused_time_ = pipeline_.GetMediaTime();
|
| + UpdatePausedTime();
|
|
|
| media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PAUSE));
|
|
|
| @@ -713,7 +713,7 @@ void WebMediaPlayerImpl::OnPipelineSeeked(bool time_changed,
|
|
|
| // Update our paused time.
|
| if (paused_)
|
| - paused_time_ = pipeline_.GetMediaTime();
|
| + UpdatePausedTime();
|
|
|
| should_notify_time_changed_ = time_changed;
|
| }
|
| @@ -993,4 +993,15 @@ WebMediaPlayerImpl::GetCurrentFrameFromCompositor() {
|
| return video_frame;
|
| }
|
|
|
| +void WebMediaPlayerImpl::UpdatePausedTime() {
|
| + DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| +
|
| + // pause() may be called after playback has ended and the HTMLMediaElement
|
| + // requires that currentTime() == duration() after ending. We want to ensure
|
| + // |paused_time_| matches currentTime() in this case or a future seek() may
|
| + // incorrectly discard what it thinks is a seek to the existing time.
|
| + paused_time_ =
|
| + ended_ ? pipeline_.GetMediaDuration() : pipeline_.GetMediaTime();
|
| +}
|
| +
|
| } // namespace media
|
|
|