| Index: content/renderer/media/webmediaplayer_impl.cc
|
| diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
|
| index 10f2ece3f9bea14dd036ecbad09e267e0213dcb5..83e620267aef10d15275c5b6bbbe34c546c8ad91 100644
|
| --- a/content/renderer/media/webmediaplayer_impl.cc
|
| +++ b/content/renderer/media/webmediaplayer_impl.cc
|
| @@ -151,6 +151,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| paused_(true),
|
| seeking_(false),
|
| playback_rate_(0.0f),
|
| + ended_(false),
|
| pending_seek_(false),
|
| pending_seek_seconds_(0.0f),
|
| should_notify_time_changed_(false),
|
| @@ -310,6 +311,8 @@ void WebMediaPlayerImpl::seek(double seconds) {
|
| DVLOG(1) << __FUNCTION__ << "(" << seconds << ")";
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
|
|
| + ended_ = false;
|
| +
|
| if (ready_state_ > WebMediaPlayer::ReadyStateHaveMetadata)
|
| SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
|
|
|
| @@ -443,6 +446,13 @@ double WebMediaPlayerImpl::timelineOffset() const {
|
|
|
| double WebMediaPlayerImpl::currentTime() const {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| + DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing);
|
| +
|
| + // TODO(scherkus): Replace with an explicit ended signal to HTMLMediaElement,
|
| + // see http://crbug.com/409280
|
| + if (ended_)
|
| + return duration();
|
| +
|
| return (paused_ ? paused_time_ : pipeline_.GetMediaTime()).InSecondsF();
|
| }
|
|
|
| @@ -698,6 +708,12 @@ void WebMediaPlayerImpl::OnPipelineSeeked(bool time_changed,
|
| void WebMediaPlayerImpl::OnPipelineEnded() {
|
| DVLOG(1) << __FUNCTION__;
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| +
|
| + // Ignore state changes until we've completed all outstanding seeks.
|
| + if (seeking_ || pending_seek_)
|
| + return;
|
| +
|
| + ended_ = true;
|
| client_->timeChanged();
|
| }
|
|
|
|
|