From 0acebfa1194d1b1b7155137ef6ccdf48b3b58258 Mon Sep 17 00:00:00 2001 From: "ajwong@chromium.org" Date: Fri, 21 Aug 2009 22:45:40 +0000 Subject: Correct network state and ready state reporting. For network state, make it return "loading" for everything that's not a file source since our cache does not yet reliably support caching the full media w/o need for a network. For ready state, correctly handle seeks to drop from HaveEnoughData down to HaveMetaData until the seek completes. Also implement the seeking() function. BUG=18975 TEST=none Review URL: http://codereview.chromium.org/165432 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24036 0039d316-1c4b-4281-b951-d872f2087c98 --- webkit/glue/webmediaplayer_impl.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'webkit/glue/webmediaplayer_impl.cc') diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc index d3d3679..0438e54 100644 --- a/webkit/glue/webmediaplayer_impl.cc +++ b/webkit/glue/webmediaplayer_impl.cc @@ -272,6 +272,7 @@ void WebMediaPlayerImpl::seek(float seconds) { // Try to preserve as much accuracy as possible. float microseconds = seconds * base::Time::kMicrosecondsPerSecond; + SetReadyState(WebKit::WebMediaPlayer::HaveMetadata); pipeline_->Seek( base::TimeDelta::FromMicroseconds(static_cast(microseconds)), NewCallback(proxy_.get(), @@ -361,7 +362,10 @@ bool WebMediaPlayerImpl::paused() const { bool WebMediaPlayerImpl::seeking() const { DCHECK(MessageLoop::current() == main_loop_); - return false; + if (ready_state_ == WebKit::WebMediaPlayer::HaveNothing) + return false; + + return ready_state_ == WebKit::WebMediaPlayer::HaveMetadata; } float WebMediaPlayerImpl::duration() const { @@ -467,7 +471,11 @@ void WebMediaPlayerImpl::OnPipelineInitialize() { // TODO(hclam): change this to report the correct status. SetReadyState(WebKit::WebMediaPlayer::HaveMetadata); SetReadyState(WebKit::WebMediaPlayer::HaveEnoughData); - SetNetworkState(WebKit::WebMediaPlayer::Loaded); + if (pipeline_->IsLoaded()) { + SetNetworkState(WebKit::WebMediaPlayer::Loaded); + } else { + SetNetworkState(WebKit::WebMediaPlayer::Loading); + } } else { // TODO(hclam): should use pipeline_->GetError() to determine the state // properly and reports error using MediaError. @@ -484,6 +492,7 @@ void WebMediaPlayerImpl::OnPipelineInitialize() { void WebMediaPlayerImpl::OnPipelineSeek() { DCHECK(MessageLoop::current() == main_loop_); if (pipeline_->GetError() == media::PIPELINE_OK) { + SetReadyState(WebKit::WebMediaPlayer::HaveEnoughData); GetClient()->timeChanged(); } } -- cgit v1.1