summaryrefslogtreecommitdiffstats
path: root/webkit/blob
diff options
context:
space:
mode:
authorkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-21 08:20:57 +0000
committerkinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-21 08:20:57 +0000
commit611a071344e691fdc368593ae0deaf15ab1ce34c (patch)
tree2f82ac7e9b295db2983f28d891caa94954416415 /webkit/blob
parent2c03980fa0873647293a0e8fade9b6d0adc1193c (diff)
downloadchromium_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.cc29
-rw-r--r--webkit/blob/blob_storage_controller.h13
-rw-r--r--webkit/blob/blob_storage_controller_unittest.cc163
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