Index: content/renderer/media/webmediaplayer_impl.cc |
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc |
index 5b1cf2bdeb3e7ebb26dce33351f2ec07533c498c..6db95e7277843ced8655598b7027666a203721ab 100644 |
--- a/content/renderer/media/webmediaplayer_impl.cc |
+++ b/content/renderer/media/webmediaplayer_impl.cc |
@@ -155,6 +155,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), |
@@ -312,6 +313,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); |
@@ -445,6 +448,12 @@ double WebMediaPlayerImpl::timelineOffset() const { |
double WebMediaPlayerImpl::currentTime() const { |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
+ |
acolwell GONE FROM CHROMIUM
2014/08/30 01:00:28
nit: Add a DCHECK here to make sure you are never
scherkus (not reviewing)
2014/09/02 20:58:25
Sadly Blink does call this when we HAVE_NOTHING du
|
+ // 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(); |
} |
@@ -700,6 +709,7 @@ void WebMediaPlayerImpl::OnPipelineSeeked(bool time_changed, |
void WebMediaPlayerImpl::OnPipelineEnded() { |
DVLOG(1) << __FUNCTION__; |
DCHECK(main_task_runner_->BelongsToCurrentThread()); |
+ ended_ = true; |
acolwell GONE FROM CHROMIUM
2014/08/30 01:00:28
I don't think you can blindly update it here. At a
scherkus (not reviewing)
2014/09/02 20:58:25
Good catch -- done. We have a similar check in OnB
|
client_->timeChanged(); |
} |