diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-21 08:20:57 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-21 08:20:57 +0000 |
commit | 611a071344e691fdc368593ae0deaf15ab1ce34c (patch) | |
tree | 2f82ac7e9b295db2983f28d891caa94954416415 /webkit/blob | |
parent | 2c03980fa0873647293a0e8fade9b6d0adc1193c (diff) | |
download | chromium_src-611a071344e691fdc368593ae0deaf15ab1ce34c.zip chromium_src-611a071344e691fdc368593ae0deaf15ab1ce34c.tar.gz chromium_src-611a071344e691fdc368593ae0deaf15ab1ce34c.tar.bz2 |
Revert 152528 - Split net::UploadData into two: for resource request IPC and for upload handling
Introducing webkit_glue::ResourceRequestBody as a content-level abstraction corresponding to WebHTTPBody and as an alternative of net::UploadData in ResourceRequest.
This interface can contain content-level objects like Blob (or FileSystem URL in later patches) while net::UploadData should NOT.
This patch also removes Blob support in net::UploadData.
BUG=110119
TEST=existing tests
Review URL: https://chromiumcodereview.appspot.com/10834289
TBR=kinuko@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10831402
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152529 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/blob')
-rw-r--r-- | webkit/blob/blob_storage_controller.cc | 29 | ||||
-rw-r--r-- | webkit/blob/blob_storage_controller.h | 13 | ||||
-rw-r--r-- | webkit/blob/blob_storage_controller_unittest.cc | 163 |
3 files changed, 98 insertions, 107 deletions
diff --git a/webkit/blob/blob_storage_controller.cc b/webkit/blob/blob_storage_controller.cc index 4c3c3bb..6a10811 100644 --- a/webkit/blob/blob_storage_controller.cc +++ b/webkit/blob/blob_storage_controller.cc @@ -6,10 +6,8 @@ #include "base/logging.h" #include "googleurl/src/gurl.h" +#include "net/base/upload_data.h" #include "webkit/blob/blob_data.h" -#include "webkit/glue/resource_request_body.h" - -using webkit_glue::ResourceRequestBody; namespace webkit_blob { @@ -171,15 +169,15 @@ BlobData* BlobStorageController::GetBlobDataFromUrl(const GURL& url) { return (found != blob_map_.end()) ? found->second : NULL; } -void BlobStorageController::ResolveBlobReferencesInRequestBody( - ResourceRequestBody* request_body) { - DCHECK(request_body); +void BlobStorageController::ResolveBlobReferencesInUploadData( + net::UploadData* upload_data) { + DCHECK(upload_data); - std::vector<ResourceRequestBody::Element>* uploads = - request_body->elements_mutable(); - std::vector<ResourceRequestBody::Element>::iterator iter; + std::vector<net::UploadElement>* uploads = + upload_data->elements_mutable(); + std::vector<net::UploadElement>::iterator iter; for (iter = uploads->begin(); iter != uploads->end();) { - if (iter->type() != ResourceRequestBody::TYPE_BLOB) { + if (iter->type() != net::UploadElement::TYPE_BLOB) { iter++; continue; } @@ -204,19 +202,22 @@ void BlobStorageController::ResolveBlobReferencesInRequestBody( // Ensure the blob and any attached shareable files survive until // upload completion. - request_body->SetUserData( - blob_data, new base::UserDataAdapter<BlobData>(blob_data)); + upload_data->SetUserData(blob_data, + new base::UserDataAdapter<BlobData>(blob_data)); // Insert the elements in the referred blob data. // Note that we traverse from the bottom so that the elements can be // inserted in the original order. for (size_t i = blob_data->items().size(); i > 0; --i) { - iter = uploads->insert(iter, ResourceRequestBody::Element()); + iter = uploads->insert(iter, net::UploadElement()); const BlobData::Item& item = blob_data->items().at(i - 1); switch (item.type) { case BlobData::TYPE_DATA: - iter->SetToSharedBytes( + // TODO(jianli): Figure out how to avoid copying the data. + // TODO(michaeln): Now that blob_data surives for the duration, + // maybe UploadData could take a raw ptr without having to copy. + iter->SetToBytes( &item.data.at(0) + static_cast<int>(item.offset), static_cast<int>(item.length)); break; diff --git a/webkit/blob/blob_storage_controller.h b/webkit/blob/blob_storage_controller.h index fddd6ff..a32fab3 100644 --- a/webkit/blob/blob_storage_controller.h +++ b/webkit/blob/blob_storage_controller.h @@ -13,7 +13,6 @@ #include "base/process.h" #include "webkit/blob/blob_data.h" #include "webkit/blob/blob_export.h" -#include "webkit/glue/resource_request_body.h" class GURL; class FilePath; @@ -21,9 +20,8 @@ class FilePath; namespace base { class Time; } - -namespace webkit_glue { -class ResourceRequestBody; +namespace net { +class UploadData; } namespace webkit_blob { @@ -42,10 +40,9 @@ class BLOB_EXPORT BlobStorageController { void RemoveBlob(const GURL& url); BlobData* GetBlobDataFromUrl(const GURL& url); - // If there is any blob reference in the resource request body, it will get - // resolved and updated in place. - void ResolveBlobReferencesInRequestBody( - webkit_glue::ResourceRequestBody* request_body); + // If there is any blob reference in the upload data, it will get resolved + // and updated in place. + void ResolveBlobReferencesInUploadData(net::UploadData* upload_data); private: friend class ViewBlobInternalsJob; diff --git a/webkit/blob/blob_storage_controller_unittest.cc b/webkit/blob/blob_storage_controller_unittest.cc index 48699a4..ff98e22 100644 --- a/webkit/blob/blob_storage_controller_unittest.cc +++ b/webkit/blob/blob_storage_controller_unittest.cc @@ -6,12 +6,12 @@ #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "base/time.h" +#include "net/base/upload_data.h" #include "testing/gtest/include/gtest/gtest.h" #include "webkit/blob/blob_data.h" #include "webkit/blob/blob_storage_controller.h" -#include "webkit/glue/resource_request_body.h" -using webkit_glue::ResourceRequestBody; +using net::UploadData; namespace webkit_blob { @@ -76,7 +76,7 @@ TEST(BlobStorageControllerTest, RegisterBlobUrl) { EXPECT_TRUE(!blob_data_found); } -TEST(BlobStorageControllerTest, ResolveBlobReferencesInRequestBody) { +TEST(BlobStorageControllerTest, ResolveBlobReferencesInUploadData) { // Setup blob data for testing. base::Time time1, time2; base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); @@ -102,7 +102,7 @@ TEST(BlobStorageControllerTest, ResolveBlobReferencesInRequestBody) { blob_storage_controller.CloneBlob(blob_url3, blob_url2); // Setup upload data elements for comparison. - ResourceRequestBody::Element blob_element1, blob_element2; + net::UploadElement blob_element1, blob_element2; blob_element1.SetToBytes( blob_data->items().at(0).data.c_str() + static_cast<int>(blob_data->items().at(0).offset), @@ -113,131 +113,124 @@ TEST(BlobStorageControllerTest, ResolveBlobReferencesInRequestBody) { blob_data->items().at(1).length, blob_data->items().at(1).expected_modification_time); - ResourceRequestBody::Element upload_element1, upload_element2; + net::UploadElement upload_element1, upload_element2; upload_element1.SetToBytes("Hello", 5); upload_element2.SetToFilePathRange( FilePath(FILE_PATH_LITERAL("foo1.txt")), 0, 20, time2); // Test no blob reference. - scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody()); - request_body->AppendBytes( - upload_element1.bytes(), - upload_element1.bytes_length()); - request_body->AppendFileRange( + scoped_refptr<UploadData> upload_data(new UploadData()); + upload_data->AppendBytes( + &upload_element1.bytes().at(0), + upload_element1.bytes().size()); + upload_data->AppendFileRange( upload_element2.file_path(), upload_element2.file_range_offset(), upload_element2.file_range_length(), upload_element2.expected_file_modification_time()); - blob_storage_controller.ResolveBlobReferencesInRequestBody( - request_body.get()); - ASSERT_EQ(request_body->elements()->size(), 2U); - EXPECT_TRUE(request_body->elements()->at(0) == upload_element1); - EXPECT_TRUE(request_body->elements()->at(1) == upload_element2); + blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get()); + ASSERT_EQ(upload_data->elements()->size(), 2U); + EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1); + EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2); // Test having only one blob reference that refers to empty blob data. - request_body = new ResourceRequestBody(); - request_body->AppendBlob(blob_url0); + upload_data = new UploadData(); + upload_data->AppendBlob(blob_url0); - blob_storage_controller.ResolveBlobReferencesInRequestBody( - request_body.get()); - ASSERT_EQ(request_body->elements()->size(), 0U); + blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get()); + ASSERT_EQ(upload_data->elements()->size(), 0U); // Test having only one blob reference. - request_body = new ResourceRequestBody(); - request_body->AppendBlob(blob_url1); + upload_data = new UploadData(); + upload_data->AppendBlob(blob_url1); - blob_storage_controller.ResolveBlobReferencesInRequestBody( - request_body.get()); - ASSERT_EQ(request_body->elements()->size(), 2U); - EXPECT_TRUE(request_body->elements()->at(0) == blob_element1); - EXPECT_TRUE(request_body->elements()->at(1) == blob_element2); + blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get()); + ASSERT_EQ(upload_data->elements()->size(), 2U); + EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1); + EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2); // Test having one blob reference at the beginning. - request_body = new ResourceRequestBody(); - request_body->AppendBlob(blob_url1); - request_body->AppendBytes( - upload_element1.bytes(), - upload_element1.bytes_length()); - request_body->AppendFileRange( + upload_data = new UploadData(); + upload_data->AppendBlob(blob_url1); + upload_data->AppendBytes( + &upload_element1.bytes().at(0), + upload_element1.bytes().size()); + upload_data->AppendFileRange( upload_element2.file_path(), upload_element2.file_range_offset(), upload_element2.file_range_length(), upload_element2.expected_file_modification_time()); - blob_storage_controller.ResolveBlobReferencesInRequestBody( - request_body.get()); - ASSERT_EQ(request_body->elements()->size(), 4U); - EXPECT_TRUE(request_body->elements()->at(0) == blob_element1); - EXPECT_TRUE(request_body->elements()->at(1) == blob_element2); - EXPECT_TRUE(request_body->elements()->at(2) == upload_element1); - EXPECT_TRUE(request_body->elements()->at(3) == upload_element2); + blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get()); + ASSERT_EQ(upload_data->elements()->size(), 4U); + EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1); + EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2); + EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1); + EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2); // Test having one blob reference at the end. - request_body = new ResourceRequestBody(); - request_body->AppendBytes( - upload_element1.bytes(), - upload_element1.bytes_length()); - request_body->AppendFileRange( + upload_data = new UploadData(); + upload_data->AppendBytes( + &upload_element1.bytes().at(0), + upload_element1.bytes().size()); + upload_data->AppendFileRange( upload_element2.file_path(), upload_element2.file_range_offset(), upload_element2.file_range_length(), upload_element2.expected_file_modification_time()); - request_body->AppendBlob(blob_url1); + upload_data->AppendBlob(blob_url1); - blob_storage_controller.ResolveBlobReferencesInRequestBody( - request_body.get()); - ASSERT_EQ(request_body->elements()->size(), 4U); - EXPECT_TRUE(request_body->elements()->at(0) == upload_element1); - EXPECT_TRUE(request_body->elements()->at(1) == upload_element2); - EXPECT_TRUE(request_body->elements()->at(2) == blob_element1); - EXPECT_TRUE(request_body->elements()->at(3) == blob_element2); + blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get()); + ASSERT_EQ(upload_data->elements()->size(), 4U); + EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1); + EXPECT_TRUE(upload_data->elements()->at(1) == upload_element2); + EXPECT_TRUE(upload_data->elements()->at(2) == blob_element1); + EXPECT_TRUE(upload_data->elements()->at(3) == blob_element2); // Test having one blob reference in the middle. - request_body = new ResourceRequestBody(); - request_body->AppendBytes( - upload_element1.bytes(), - upload_element1.bytes_length()); - request_body->AppendBlob(blob_url1); - request_body->AppendFileRange( + upload_data = new UploadData(); + upload_data->AppendBytes( + &upload_element1.bytes().at(0), + upload_element1.bytes().size()); + upload_data->AppendBlob(blob_url1); + upload_data->AppendFileRange( upload_element2.file_path(), upload_element2.file_range_offset(), upload_element2.file_range_length(), upload_element2.expected_file_modification_time()); - blob_storage_controller.ResolveBlobReferencesInRequestBody( - request_body.get()); - ASSERT_EQ(request_body->elements()->size(), 4U); - EXPECT_TRUE(request_body->elements()->at(0) == upload_element1); - EXPECT_TRUE(request_body->elements()->at(1) == blob_element1); - EXPECT_TRUE(request_body->elements()->at(2) == blob_element2); - EXPECT_TRUE(request_body->elements()->at(3) == upload_element2); + blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get()); + ASSERT_EQ(upload_data->elements()->size(), 4U); + EXPECT_TRUE(upload_data->elements()->at(0) == upload_element1); + EXPECT_TRUE(upload_data->elements()->at(1) == blob_element1); + EXPECT_TRUE(upload_data->elements()->at(2) == blob_element2); + EXPECT_TRUE(upload_data->elements()->at(3) == upload_element2); // Test having multiple blob references. - request_body = new ResourceRequestBody(); - request_body->AppendBlob(blob_url1); - request_body->AppendBytes( - upload_element1.bytes(), - upload_element1.bytes_length()); - request_body->AppendBlob(blob_url2); - request_body->AppendBlob(blob_url3); - request_body->AppendFileRange( + upload_data = new UploadData(); + upload_data->AppendBlob(blob_url1); + upload_data->AppendBytes( + &upload_element1.bytes().at(0), + upload_element1.bytes().size()); + upload_data->AppendBlob(blob_url2); + upload_data->AppendBlob(blob_url3); + upload_data->AppendFileRange( upload_element2.file_path(), upload_element2.file_range_offset(), upload_element2.file_range_length(), upload_element2.expected_file_modification_time()); - blob_storage_controller.ResolveBlobReferencesInRequestBody( - request_body.get()); - ASSERT_EQ(request_body->elements()->size(), 8U); - EXPECT_TRUE(request_body->elements()->at(0) == blob_element1); - EXPECT_TRUE(request_body->elements()->at(1) == blob_element2); - EXPECT_TRUE(request_body->elements()->at(2) == upload_element1); - EXPECT_TRUE(request_body->elements()->at(3) == blob_element1); - EXPECT_TRUE(request_body->elements()->at(4) == blob_element2); - EXPECT_TRUE(request_body->elements()->at(5) == blob_element1); - EXPECT_TRUE(request_body->elements()->at(6) == blob_element2); - EXPECT_TRUE(request_body->elements()->at(7) == upload_element2); + blob_storage_controller.ResolveBlobReferencesInUploadData(upload_data.get()); + ASSERT_EQ(upload_data->elements()->size(), 8U); + EXPECT_TRUE(upload_data->elements()->at(0) == blob_element1); + EXPECT_TRUE(upload_data->elements()->at(1) == blob_element2); + EXPECT_TRUE(upload_data->elements()->at(2) == upload_element1); + EXPECT_TRUE(upload_data->elements()->at(3) == blob_element1); + EXPECT_TRUE(upload_data->elements()->at(4) == blob_element2); + EXPECT_TRUE(upload_data->elements()->at(5) == blob_element1); + EXPECT_TRUE(upload_data->elements()->at(6) == blob_element2); + EXPECT_TRUE(upload_data->elements()->at(7) == upload_element2); } } // namespace webkit_blob |