diff options
author | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-15 06:36:15 +0000 |
---|---|---|
committer | hashimoto@chromium.org <hashimoto@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-15 06:36:15 +0000 |
commit | 2ea255706cb9ecf5297adf3c7f01bf56aa42f5ab (patch) | |
tree | 6da8cd6d713718da0f723b55167fd2249d24295b /webkit | |
parent | 40c4f41f0f173502716a09799c97e1fe00e2e602 (diff) | |
download | chromium_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')
-rw-r--r-- | webkit/glue/resource_request_body.cc | 15 | ||||
-rw-r--r-- | webkit/glue/resource_request_body.h | 13 | ||||
-rw-r--r-- | webkit/glue/resource_request_body_unittest.cc | 16 | ||||
-rw-r--r-- | webkit/tools/test_shell/simple_resource_loader_bridge.cc | 2 |
4 files changed, 31 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)); diff --git a/webkit/tools/test_shell/simple_resource_loader_bridge.cc b/webkit/tools/test_shell/simple_resource_loader_bridge.cc index 88a02a3..02aaf80 100644 --- a/webkit/tools/test_shell/simple_resource_loader_bridge.cc +++ b/webkit/tools/test_shell/simple_resource_loader_bridge.cc @@ -466,6 +466,8 @@ class RequestProxy params->request_body->ResolveElementsAndCreateUploadDataStream( static_cast<TestShellRequestContext*>(g_request_context)-> blob_storage_controller(), + static_cast<TestShellRequestContext*>(g_request_context)-> + file_system_context(), base::MessageLoopProxy::current()))); } SimpleAppCacheSystem::SetExtraRequestInfo( |