Index: content/browser/loader/upload_data_stream_builder.cc |
diff --git a/content/browser/loader/upload_data_stream_builder.cc b/content/browser/loader/upload_data_stream_builder.cc |
index ba7cca77d25000bfc3786cd2de08ac3189f2cfa5..2985f5453928453770a3b556e7354ef735b3cbb3 100644 |
--- a/content/browser/loader/upload_data_stream_builder.cc |
+++ b/content/browser/loader/upload_data_stream_builder.cc |
@@ -13,6 +13,10 @@ |
#include "webkit/browser/fileapi/upload_file_system_file_element_reader.h" |
#include "webkit/common/resource_request_body.h" |
+#if defined(OS_ANDROID) |
+#include "net/base/upload_content_url_element_reader_android.h" |
+#endif |
+ |
using webkit_blob::BlobData; |
using webkit_blob::BlobDataHandle; |
using webkit_blob::BlobStorageContext; |
@@ -64,6 +68,33 @@ class FileElementReader : public net::UploadFileElementReader { |
DISALLOW_COPY_AND_ASSIGN(FileElementReader); |
}; |
+#if defined(OS_ANDROID) |
+// A subclass of net::UploadContentUrlElementReader which owns |
+// ResourceRequestBody. |
+class ContentUrlFileElementReader : public net::UploadContentUrlElementReader { |
+ public: |
+ ContentUrlFileElementReader(ResourceRequestBody* resource_request_body, |
+ base::TaskRunner* task_runner, |
+ const ResourceRequestBody::Element& element) |
+ : net::UploadContentUrlElementReader( |
+ task_runner, |
kinuko
2013/10/29 02:52:31
nit: usually we indent not from ':' but from where
qinmin
2013/10/29 19:14:21
Done.
|
+ element.content_url(), |
+ element.offset(), |
+ element.length(), |
+ element.expected_modification_time()), |
+ resource_request_body_(resource_request_body) { |
+ DCHECK_EQ(ResourceRequestBody::Element::TYPE_CONTENT_URL, element.type()); |
+ } |
+ |
+ virtual ~ContentUrlFileElementReader() {} |
+ |
+ private: |
+ scoped_refptr<ResourceRequestBody> resource_request_body_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ContentUrlFileElementReader); |
+}; |
+#endif |
+ |
void ResolveBlobReference( |
ResourceRequestBody* body, |
webkit_blob::BlobStorageContext* blob_context, |
@@ -130,6 +161,12 @@ scoped_ptr<net::UploadDataStream> UploadDataStreamBuilder::Build( |
element.length(), |
element.expected_modification_time())); |
break; |
+#if defined(OS_ANDROID) |
+ case ResourceRequestBody::Element::TYPE_CONTENT_URL: |
+ element_readers.push_back( |
+ new ContentUrlFileElementReader(body, file_task_runner, element)); |
+ break; |
+#endif |
case ResourceRequestBody::Element::TYPE_BLOB: |
// Blob elements should be resolved beforehand. |
NOTREACHED(); |