Index: webkit/glue/webmediaplayer_impl.cc |
diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc |
index b30e013ba45e4076b05352f11bece97748310659..b6f41d9ab095b4567c3af0b9e3f8b9a3ff3436e8 100644 |
--- a/webkit/glue/webmediaplayer_impl.cc |
+++ b/webkit/glue/webmediaplayer_impl.cc |
@@ -99,6 +99,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
paused_(true), |
seeking_(false), |
playback_rate_(0.0f), |
+ pending_seek_(false), |
client_(client), |
proxy_(NULL), |
media_stream_client_(media_stream_client), |
@@ -295,6 +296,12 @@ void WebMediaPlayerImpl::seek(float seconds) { |
return; |
} |
+ if (seeking_) { |
+ pending_seek_ = true; |
+ pending_seek_seconds_ = seconds; |
+ return; |
+ } |
+ |
media_log_->AddEvent(media_log_->CreateSeekEvent(seconds)); |
base::TimeDelta seek_time = ConvertSecondsToTimestamp(seconds); |
@@ -694,6 +701,13 @@ void WebMediaPlayerImpl::OnPipelineInitialize(PipelineStatus status) { |
void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) { |
DCHECK(MessageLoop::current() == main_loop_); |
+ seeking_ = false; |
+ if (pending_seek_) { |
+ pending_seek_ = false; |
+ seek(pending_seek_seconds_); |
+ return; |
+ } |
+ |
if (status == media::PIPELINE_OK) { |
// Update our paused time. |
if (paused_) { |
@@ -701,7 +715,6 @@ void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) { |
} |
SetReadyState(WebKit::WebMediaPlayer::HaveEnoughData); |
- seeking_ = false; |
GetClient()->timeChanged(); |
} |
} |