summaryrefslogtreecommitdiffstats
path: root/webkit/glue
diff options
context:
space:
mode:
authorserya@chromium.org <serya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-15 00:06:06 +0000
committerserya@chromium.org <serya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-15 00:06:06 +0000
commit5d11eff456ebdd84b7af0f9144d0c83abd69004c (patch)
treee6cca03b70f1e3ade400d7547a608f6b9234c513 /webkit/glue
parentf820d267a8d402bb3f4139e396c98a61c5c6f2d7 (diff)
downloadchromium_src-5d11eff456ebdd84b7af0f9144d0c83abd69004c.zip
chromium_src-5d11eff456ebdd84b7af0f9144d0c83abd69004c.tar.gz
chromium_src-5d11eff456ebdd84b7af0f9144d0c83abd69004c.tar.bz2
Fixing dropped seeks.
BUG=92251,chromium-os:19888 TEST=None Review URL: http://codereview.chromium.org/7890012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101197 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r--webkit/glue/webmediaplayer_impl.cc15
-rw-r--r--webkit/glue/webmediaplayer_impl.h5
2 files changed, 19 insertions, 1 deletions
diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc
index b30e013..b6f41d9a 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();
}
}
diff --git a/webkit/glue/webmediaplayer_impl.h b/webkit/glue/webmediaplayer_impl.h
index 8d9bd80..1b2d8be 100644
--- a/webkit/glue/webmediaplayer_impl.h
+++ b/webkit/glue/webmediaplayer_impl.h
@@ -243,6 +243,11 @@ class WebMediaPlayerImpl
float playback_rate_;
base::TimeDelta paused_time_;
+ // Seek gets pending if another seek is in progress. Only last pending seek
+ // will have effect.
+ bool pending_seek_;
+ float pending_seek_seconds_;
+
WebKit::WebMediaPlayerClient* client_;
scoped_refptr<WebMediaPlayerProxy> proxy_;