diff options
Diffstat (limited to 'chrome/renderer/media')
-rw-r--r-- | chrome/renderer/media/buffered_data_source.cc | 61 | ||||
-rw-r--r-- | chrome/renderer/media/buffered_data_source.h | 46 |
2 files changed, 47 insertions, 60 deletions
diff --git a/chrome/renderer/media/buffered_data_source.cc b/chrome/renderer/media/buffered_data_source.cc index f0aa456..ef92ce1 100644 --- a/chrome/renderer/media/buffered_data_source.cc +++ b/chrome/renderer/media/buffered_data_source.cc @@ -62,11 +62,12 @@ bool IsSchemeSupported(const GURL& url) { ///////////////////////////////////////////////////////////////////////////// // BufferedResourceLoader -BufferedResourceLoader::BufferedResourceLoader(MessageLoop* message_loop, - int32 routing_id, - const GURL& url, - int64 first_byte_position, - int64 last_byte_position) +BufferedResourceLoader::BufferedResourceLoader( + MessageLoop* message_loop, + webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory, + const GURL& url, + int64 first_byte_position, + int64 last_byte_position) : start_callback_(NULL), bridge_(NULL), offset_(0), @@ -78,7 +79,7 @@ BufferedResourceLoader::BufferedResourceLoader(MessageLoop* message_loop, completed_(false), range_requested_(false), async_start_(false), - routing_id_(routing_id), + bridge_factory_(bridge_factory), url_(url), first_byte_position_(first_byte_position), last_byte_position_(last_byte_position), @@ -450,41 +451,19 @@ void BufferedResourceLoader::OnStart() { if (stopped_) return; - // Construct the range header. - std::string header; - if (first_byte_position_ != kPositionNotSpecified && - last_byte_position_ != kPositionNotSpecified) { - header = StringPrintf("Range: bytes=%lld-%lld", - first_byte_position_, - last_byte_position_); + if (first_byte_position_ != kPositionNotSpecified) { range_requested_ = true; + // TODO(hclam): server may not support range request so |offset_| may not + // equal to |first_byte_position_|. offset_ = first_byte_position_; - } else if (first_byte_position_ != kPositionNotSpecified) { - header = StringPrintf("Range: bytes=%lld-", first_byte_position_); - range_requested_ = true; - offset_ = first_byte_position_; - } else if (last_byte_position_ != kPositionNotSpecified) { - NOTIMPLEMENTED() << "Suffix length range request not implemented."; } // Creates the bridge on render thread since we can only access // ResourceDispatcher on this thread. - bridge_.reset(webkit_glue::ResourceLoaderBridge::Create( - "GET", - GURL(url_), - GURL(url_), - GURL(), // TODO(hclam): provide referer here. - "null", // TODO(abarth): provide frame_origin - "null", // TODO(abarth): provide main_frame_origin - header, - net::LOAD_BYPASS_CACHE, - base::GetCurrentProcId(), - ResourceType::MEDIA, - // TODO(michaeln): delegate->mediaplayer->frame-> - // app_cache_context()->context_id() - // For now don't service media resource requests from the appcache. - WebAppCacheContext::kNoAppCacheContextId, - routing_id_)); + bridge_.reset(bridge_factory_->CreateBridge(url_, + net::LOAD_BYPASS_CACHE, + first_byte_position_, + last_byte_position_)); // And start the resource loading. bridge_->Start(this); @@ -523,11 +502,13 @@ void BufferedResourceLoader::InvokeAndResetStartCallback(int error) { ////////////////////////////////////////////////////////////////////////////// // BufferedDataSource -BufferedDataSource::BufferedDataSource(MessageLoop* render_loop, int routing_id) - : routing_id_(routing_id), - stopped_(false), +BufferedDataSource::BufferedDataSource( + MessageLoop* render_loop, + webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory) + : stopped_(false), position_(0), total_bytes_(kPositionNotSpecified), + bridge_factory_(bridge_factory), buffered_resource_loader_(NULL), render_loop_(render_loop), pipeline_loop_(MessageLoop::current()) { @@ -572,7 +553,7 @@ bool BufferedDataSource::Initialize(const std::string& url) { if (!stopped_) { buffered_resource_loader_ = new BufferedResourceLoader( render_loop_, - routing_id_, + bridge_factory_.get(), url_, kPositionNotSpecified, kPositionNotSpecified); @@ -636,7 +617,7 @@ size_t BufferedDataSource::Read(uint8* data, size_t size) { // Create a new resource loader. buffered_resource_loader_ = new BufferedResourceLoader(render_loop_, - routing_id_, + bridge_factory_.get(), url_, position_, kPositionNotSpecified); diff --git a/chrome/renderer/media/buffered_data_source.h b/chrome/renderer/media/buffered_data_source.h index 0111629..d676142 100644 --- a/chrome/renderer/media/buffered_data_source.h +++ b/chrome/renderer/media/buffered_data_source.h @@ -10,6 +10,7 @@ #include "base/lock.h" #include "base/scoped_ptr.h" #include "base/condition_variable.h" +#include "googleurl/src/gurl.h" #include "media/base/factory.h" #include "media/base/filters.h" #include "media/base/media_format.h" @@ -17,8 +18,7 @@ #include "media/base/seekable_buffer.h" #include "net/base/completion_callback.h" #include "net/base/file_stream.h" -#include "webkit/glue/resource_loader_bridge.h" -#include "googleurl/src/gurl.h" +#include "webkit/glue/media/media_resource_loader_bridge_factory.h" ///////////////////////////////////////////////////////////////////////////// // BufferedResourceLoader @@ -31,16 +31,17 @@ class BufferedResourceLoader : public webkit_glue::ResourceLoaderBridge::Peer { public: // |message_loop| - The message loop this resource loader should run on. - // |routing_id| - Routing id to this view. + // |bridge_factory| - Factory to create a ResourceLoaderBridge. // |url| - URL for the resource to be loaded. // |first_byte_position| - First byte to start loading from, -1 for not // specified. // |last_byte_position| - Last byte to be loaded, -1 for not specified. - BufferedResourceLoader(MessageLoop* message_loop, - int32 routing_id, - const GURL& url, - int64 first_byte_position, - int64 last_byte_position); + BufferedResourceLoader( + MessageLoop* message_loop, + webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory, + const GURL& url, + int64 first_byte_position, + int64 last_byte_position); virtual ~BufferedResourceLoader(); // Start the resource loading with the specified URL and range. @@ -173,7 +174,7 @@ class BufferedResourceLoader : bool range_requested_; bool async_start_; - int32 routing_id_; + webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory_; GURL url_; int64 first_byte_position_; int64 last_byte_position_; @@ -194,11 +195,14 @@ class BufferedDataSource : public media::DataSource { public: // Methods called from pipeline thread // Static methods for creating this class. - static media::FilterFactory* CreateFactory(MessageLoop* message_loop, - int32 routing_id) { - return new media::FilterFactoryImpl2<BufferedDataSource, - MessageLoop*, - int32>(message_loop, routing_id); + static media::FilterFactory* CreateFactory( + MessageLoop* message_loop, + webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory) { + return new media::FilterFactoryImpl2< + BufferedDataSource, + MessageLoop*, + webkit_glue::MediaResourceLoaderBridgeFactory*>( + message_loop, bridge_factory); } virtual bool Initialize(const std::string& url); @@ -216,9 +220,10 @@ class BufferedDataSource : public media::DataSource { const media::MediaFormat& media_format(); private: - friend class media::FilterFactoryImpl2<BufferedDataSource, - MessageLoop*, - int32>; + friend class media::FilterFactoryImpl2< + BufferedDataSource, + MessageLoop*, + webkit_glue::MediaResourceLoaderBridgeFactory*>; // Call to filter host to trigger an error, be sure not to call this method // while the lock is acquired. void HandleError(media::PipelineError error); @@ -229,14 +234,14 @@ class BufferedDataSource : public media::DataSource { void InitialRequestStarted(int error); void OnInitialRequestStarted(int error); - explicit BufferedDataSource(MessageLoop* render_loop, int32 routing_id); + explicit BufferedDataSource( + MessageLoop* render_loop, + webkit_glue::MediaResourceLoaderBridgeFactory* bridge_factory); virtual ~BufferedDataSource(); media::MediaFormat media_format_; GURL url_; - int32 routing_id_; - // A common lock for protecting members accessed by multiple threads. Lock lock_; bool stopped_; @@ -247,6 +252,7 @@ class BufferedDataSource : public media::DataSource { int64 total_bytes_; // Members related to resource loading with RenderView. + scoped_ptr<webkit_glue::MediaResourceLoaderBridgeFactory> bridge_factory_; scoped_refptr<BufferedResourceLoader> buffered_resource_loader_; // The message loop of the render thread. |