summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/media
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/media')
-rw-r--r--chrome/renderer/media/buffered_data_source.cc61
-rw-r--r--chrome/renderer/media/buffered_data_source.h46
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.