diff options
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/media/buffered_data_source.cc | 36 | ||||
-rw-r--r-- | chrome/renderer/media/buffered_data_source.h | 6 |
2 files changed, 28 insertions, 14 deletions
diff --git a/chrome/renderer/media/buffered_data_source.cc b/chrome/renderer/media/buffered_data_source.cc index ef987a5..edec5c1 100644 --- a/chrome/renderer/media/buffered_data_source.cc +++ b/chrome/renderer/media/buffered_data_source.cc @@ -532,14 +532,20 @@ void BufferedDataSource::Stop() { resource_loader->Stop(); } -bool BufferedDataSource::Initialize(const std::string& url) { +void BufferedDataSource::Initialize(const std::string& url, + media::FilterCallback* callback) { + DCHECK(callback); + initialize_callback_.reset(callback); + // Save the url. url_ = GURL(url); // Make sure we support the scheme of the URL. if (!IsSchemeSupported(url_)) { host()->Error(media::PIPELINE_ERROR_NETWORK); - return false; + initialize_callback_->Run(); + initialize_callback_.reset(); + return; } media_format_.SetAsString(media::MediaFormat::kMimeType, @@ -562,16 +568,19 @@ bool BufferedDataSource::Initialize(const std::string& url) { } // Use the local reference to start the request. - if (resource_loader) { - if (net::ERR_IO_PENDING != resource_loader->Start( - NewCallback(this, &BufferedDataSource::InitialRequestStarted))) { - host()->Error(media::PIPELINE_ERROR_NETWORK); - return false; - } - return true; + if (!resource_loader) { + host()->Error(media::PIPELINE_ERROR_NETWORK); + initialize_callback_->Run(); + initialize_callback_.reset(); + return; + } + + if (net::ERR_IO_PENDING != resource_loader->Start( + NewCallback(this, &BufferedDataSource::InitialRequestStarted))) { + host()->Error(media::PIPELINE_ERROR_NETWORK); + initialize_callback_->Run(); + initialize_callback_.reset(); } - host()->Error(media::PIPELINE_ERROR_NETWORK); - return false; } size_t BufferedDataSource::Read(uint8* data, size_t size) { @@ -688,7 +697,7 @@ void BufferedDataSource::InitialRequestStarted(int error) { } void BufferedDataSource::OnInitialRequestStarted(int error) { - // Acquiring a lock should not be needed because stopped_ is only written + // Acquiring a lock should not be needed because |stopped_| is only written // on pipeline thread and we are on pipeline thread but just to be safe. AutoLock auto_lock(lock_); if (!stopped_) { @@ -699,11 +708,12 @@ void BufferedDataSource::OnInitialRequestStarted(int error) { // TODO(hclam): report the amount of bytes buffered accurately. host()->SetBufferedBytes(total_bytes_); } - host()->InitializationComplete(); } else { host()->Error(media::PIPELINE_ERROR_NETWORK); } } + initialize_callback_->Run(); + initialize_callback_.reset(); } const media::MediaFormat& BufferedDataSource::media_format() { diff --git a/chrome/renderer/media/buffered_data_source.h b/chrome/renderer/media/buffered_data_source.h index d676142..d7fa080 100644 --- a/chrome/renderer/media/buffered_data_source.h +++ b/chrome/renderer/media/buffered_data_source.h @@ -204,7 +204,8 @@ class BufferedDataSource : public media::DataSource { webkit_glue::MediaResourceLoaderBridgeFactory*>( message_loop, bridge_factory); } - virtual bool Initialize(const std::string& url); + virtual void Initialize(const std::string& url, + media::FilterCallback* callback); // media::MediaFilter implementation. virtual void Stop(); @@ -261,6 +262,9 @@ class BufferedDataSource : public media::DataSource { // The message loop of the pipeline thread. MessageLoop* pipeline_loop_; + // Filter callbacks. + scoped_ptr<media::FilterCallback> initialize_callback_; + DISALLOW_COPY_AND_ASSIGN(BufferedDataSource); }; |