summaryrefslogtreecommitdiffstats
path: root/webkit/glue
diff options
context:
space:
mode:
authorhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-15 06:36:15 +0000
committerhashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-15 06:36:15 +0000
commit2ea255706cb9ecf5297adf3c7f01bf56aa42f5ab (patch)
tree6da8cd6d713718da0f723b55167fd2249d24295b /webkit/glue
parent40c4f41f0f173502716a09799c97e1fe00e2e602 (diff)
downloadchromium_src-2ea255706cb9ecf5297adf3c7f01bf56aa42f5ab.zip
chromium_src-2ea255706cb9ecf5297adf3c7f01bf56aa42f5ab.tar.gz
chromium_src-2ea255706cb9ecf5297adf3c7f01bf56aa42f5ab.tar.bz2
Support uploading filesystem files
Add file_system_context to content::ResourceMessageFilter as a member. Use FileSystemContext to instantiate readers for filesystem files in ResourceRequestBody. BUG=141834 Review URL: https://chromiumcodereview.appspot.com/11794024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@176809 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r--webkit/glue/resource_request_body.cc15
-rw-r--r--webkit/glue/resource_request_body.h13
-rw-r--r--webkit/glue/resource_request_body_unittest.cc16
3 files changed, 29 insertions, 15 deletions
diff --git a/webkit/glue/resource_request_body.cc b/webkit/glue/resource_request_body.cc
index ace0772..eb820fc 100644
--- a/webkit/glue/resource_request_body.cc
+++ b/webkit/glue/resource_request_body.cc
@@ -9,6 +9,7 @@
#include "net/base/upload_data_stream.h"
#include "net/base/upload_file_element_reader.h"
#include "webkit/blob/blob_storage_controller.h"
+#include "webkit/fileapi/upload_file_system_file_element_reader.h"
using webkit_blob::BlobData;
using webkit_blob::BlobStorageController;
@@ -96,7 +97,8 @@ void ResourceRequestBody::AppendFileSystemFileRange(
net::UploadDataStream*
ResourceRequestBody::ResolveElementsAndCreateUploadDataStream(
BlobStorageController* blob_controller,
- base::TaskRunner* task_runner) {
+ fileapi::FileSystemContext* file_system_context,
+ base::TaskRunner* file_task_runner) {
// Resolve all blob elements.
std::vector<const Element*> resolved_elements;
for (size_t i = 0; i < elements_.size(); ++i) {
@@ -118,11 +120,16 @@ ResourceRequestBody::ResolveElementsAndCreateUploadDataStream(
break;
case Element::TYPE_FILE:
element_readers.push_back(
- new FileElementReader(this, task_runner, element));
+ new FileElementReader(this, file_task_runner, element));
break;
case Element::TYPE_FILE_FILESYSTEM:
- // TODO(kinuko): Resolve FileSystemURL before creating UploadData.
- NOTREACHED();
+ element_readers.push_back(
+ new fileapi::UploadFileSystemFileElementReader(
+ file_system_context,
+ element.url(),
+ element.offset(),
+ element.length(),
+ element.expected_modification_time()));
break;
case Element::TYPE_BLOB:
// Blob elements should be resolved beforehand.
diff --git a/webkit/glue/resource_request_body.h b/webkit/glue/resource_request_body.h
index 2b830d2..8331bdf 100644
--- a/webkit/glue/resource_request_body.h
+++ b/webkit/glue/resource_request_body.h
@@ -17,6 +17,10 @@ namespace base {
class TaskRunner;
}
+namespace fileapi {
+class FileSystemContext;
+}
+
namespace net {
class UploadDataStream;
}
@@ -46,11 +50,14 @@ class WEBKIT_GLUE_EXPORT ResourceRequestBody
const base::Time& expected_modification_time);
// Creates a new UploadDataStream from this request body. This also resolves
- // any blob references using given |blob_controller|. |task_runner| is used to
- // perform file operations when the data gets uploaded.
+ // any blob references using given |blob_controller|. |file_system_context| is
+ // used to create FileStreamReader for files with filesystem URLs.
+ // |file_task_runner| is used to perform file operations when the data gets
+ // uploaded.
net::UploadDataStream* ResolveElementsAndCreateUploadDataStream(
webkit_blob::BlobStorageController* blob_controller,
- base::TaskRunner* task_runner);
+ fileapi::FileSystemContext* file_system_context,
+ base::TaskRunner* file_task_runner);
const std::vector<Element>* elements() const { return &elements_; }
std::vector<Element>* elements_mutable() { return &elements_; }
diff --git a/webkit/glue/resource_request_body_unittest.cc b/webkit/glue/resource_request_body_unittest.cc
index 636b56d..fe0c136 100644
--- a/webkit/glue/resource_request_body_unittest.cc
+++ b/webkit/glue/resource_request_body_unittest.cc
@@ -70,7 +70,7 @@ TEST(ResourceRequestBodyTest, CreateUploadDataStreamWithoutBlob) {
scoped_ptr<net::UploadDataStream> upload(
request_body->ResolveElementsAndCreateUploadDataStream(
- NULL, base::MessageLoopProxy::current()));
+ NULL, NULL, base::MessageLoopProxy::current()));
EXPECT_EQ(kIdentifier, upload->identifier());
ASSERT_EQ(request_body->elements()->size(), upload->element_readers().size());
@@ -141,7 +141,7 @@ TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) {
scoped_ptr<net::UploadDataStream> upload(
request_body->ResolveElementsAndCreateUploadDataStream(
- &blob_storage_controller, base::MessageLoopProxy::current()));
+ &blob_storage_controller, NULL, base::MessageLoopProxy::current()));
ASSERT_EQ(2U, upload->element_readers().size());
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
@@ -152,7 +152,7 @@ TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) {
request_body->AppendBlob(blob_url0);
upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
- &blob_storage_controller, base::MessageLoopProxy::current()));
+ &blob_storage_controller, NULL, base::MessageLoopProxy::current()));
ASSERT_EQ(0U, upload->element_readers().size());
// Test having only one blob reference.
@@ -160,7 +160,7 @@ TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) {
request_body->AppendBlob(blob_url1);
upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
- &blob_storage_controller, base::MessageLoopProxy::current()));
+ &blob_storage_controller, NULL, base::MessageLoopProxy::current()));
ASSERT_EQ(2U, upload->element_readers().size());
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
@@ -175,7 +175,7 @@ TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) {
upload_element2.expected_modification_time());
upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
- &blob_storage_controller, base::MessageLoopProxy::current()));
+ &blob_storage_controller, NULL, base::MessageLoopProxy::current()));
ASSERT_EQ(4U, upload->element_readers().size());
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));
@@ -192,7 +192,7 @@ TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) {
request_body->AppendBlob(blob_url1);
upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
- &blob_storage_controller, base::MessageLoopProxy::current()));
+ &blob_storage_controller, NULL, base::MessageLoopProxy::current()));
ASSERT_EQ(4U, upload->element_readers().size());
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2));
@@ -209,7 +209,7 @@ TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) {
upload_element2.expected_modification_time());
upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
- &blob_storage_controller, base::MessageLoopProxy::current()));
+ &blob_storage_controller, NULL, base::MessageLoopProxy::current()));
ASSERT_EQ(4U, upload->element_readers().size());
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1));
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element1));
@@ -228,7 +228,7 @@ TEST(ResourceRequestBodyTest, ResolveBlobAndCreateUploadDataStream) {
upload_element2.expected_modification_time());
upload.reset(request_body->ResolveElementsAndCreateUploadDataStream(
- &blob_storage_controller, base::MessageLoopProxy::current()));
+ &blob_storage_controller, NULL, base::MessageLoopProxy::current()));
ASSERT_EQ(8U, upload->element_readers().size());
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1));
EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2));