Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index 75efccf7d53fba8b0573c36250d4e895e62306c6..db1583cb6a9962b885bf9e0ecdf593ce8025ca1e 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -436,6 +436,9 @@ double WebMediaPlayerImpl::duration() const { |
if (ready_state_ == WebMediaPlayer::ReadyStateHaveNothing) |
return std::numeric_limits<double>::quiet_NaN(); |
+ if (ended_) |
+ return currentTime(); |
+ |
return GetPipelineDuration(); |
} |
@@ -452,11 +455,6 @@ 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(); |
} |
@@ -718,7 +716,11 @@ void WebMediaPlayerImpl::OnPipelineEnded() { |
return; |
ended_ = true; |
- client_->timeChanged(); |
+ |
+ // If the duration in the metadata is not correct, then actual duration should |
+ // be updated in blink. |
+ client_->durationChanged(); |
+ client_->mediaEnded(); |
} |
void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) { |