Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Unified Diff: webkit/glue/resource_request_body.cc

Issue 11439008: net: Change argument of URLRequest::set_upload from UploadData to UploadDataStream (Closed) Base URL: http://git.chromium.org/chromium/src.git@chunk
Patch Set: Fix android Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/glue/resource_request_body.h ('k') | webkit/glue/resource_request_body_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/resource_request_body.cc
diff --git a/webkit/glue/resource_request_body.cc b/webkit/glue/resource_request_body.cc
index 215dbde08f02a851899228704aecaf2ae2a869e1..b75666f55afe045e2249124ef1e752dd4730dc1e 100644
--- a/webkit/glue/resource_request_body.cc
+++ b/webkit/glue/resource_request_body.cc
@@ -5,7 +5,9 @@
#include "webkit/glue/resource_request_body.h"
#include "base/logging.h"
-#include "net/base/upload_data.h"
+#include "net/base/upload_bytes_element_reader.h"
+#include "net/base/upload_data_stream.h"
+#include "net/base/upload_file_element_reader.h"
#include "webkit/blob/blob_storage_controller.h"
using webkit_blob::BlobData;
@@ -13,6 +15,51 @@ using webkit_blob::BlobStorageController;
namespace webkit_glue {
+namespace {
+
+// A subclass of net::UploadBytesElementReader which owns ResourceRequestBody.
+class BytesElementReader : public net::UploadBytesElementReader {
+ public:
+ BytesElementReader(ResourceRequestBody* resource_request_body,
+ const ResourceRequestBody::Element& element)
+ : net::UploadBytesElementReader(element.bytes(), element.length()),
+ resource_request_body_(resource_request_body) {
+ DCHECK_EQ(ResourceRequestBody::Element::TYPE_BYTES, element.type());
+ }
+
+ virtual ~BytesElementReader() {}
+
+ private:
+ scoped_refptr<ResourceRequestBody> resource_request_body_;
+
+ DISALLOW_COPY_AND_ASSIGN(BytesElementReader);
+};
+
+// A subclass of net::UploadFileElementReader which owns ResourceRequestBody.
+// This class is necessary to ensure the BlobData and any attached shareable
+// files survive until upload completion.
+class FileElementReader : public net::UploadFileElementReader {
+ public:
+ FileElementReader(ResourceRequestBody* resource_request_body,
+ const ResourceRequestBody::Element& element)
+ : net::UploadFileElementReader(element.path(),
+ element.offset(),
+ element.length(),
+ element.expected_modification_time()),
+ resource_request_body_(resource_request_body) {
+ DCHECK_EQ(ResourceRequestBody::Element::TYPE_FILE, element.type());
+ }
+
+ virtual ~FileElementReader() {}
+
+ private:
+ scoped_refptr<ResourceRequestBody> resource_request_body_;
+
+ DISALLOW_COPY_AND_ASSIGN(FileElementReader);
+};
+
+} // namespace
+
ResourceRequestBody::ResourceRequestBody() : identifier_(0) {}
void ResourceRequestBody::AppendBytes(const char* bytes, int bytes_len) {
@@ -44,7 +91,8 @@ void ResourceRequestBody::AppendFileSystemFileRange(
expected_modification_time);
}
-net::UploadData* ResourceRequestBody::ResolveElementsAndCreateUploadData(
+net::UploadDataStream*
+ResourceRequestBody::ResolveElementsAndCreateUploadDataStream(
BlobStorageController* blob_controller) {
// Resolve all blob elements.
std::vector<const Element*> resolved_elements;
@@ -58,27 +106,15 @@ net::UploadData* ResourceRequestBody::ResolveElementsAndCreateUploadData(
}
}
- net::UploadData* upload_data = new net::UploadData;
- // We attach 'this' to UploadData so that we do not need to copy
- // bytes for TYPE_BYTES.
- upload_data->SetUserData(
- this, new base::UserDataAdapter<ResourceRequestBody>(this));
- ScopedVector<net::UploadElement>* elements =
- upload_data->elements_mutable();
+ ScopedVector<net::UploadElementReader> element_readers;
for (size_t i = 0; i < resolved_elements.size(); ++i) {
const Element& element = *resolved_elements[i];
switch (element.type()) {
case Element::TYPE_BYTES:
- elements->push_back(new net::UploadElement());
- elements->back()->SetToSharedBytes(element.bytes(), element.length());
+ element_readers.push_back(new BytesElementReader(this, element));
break;
case Element::TYPE_FILE:
- elements->push_back(new net::UploadElement());
- elements->back()->SetToFilePathRange(
- element.path(),
- element.offset(),
- element.length(),
- element.expected_modification_time());
+ element_readers.push_back(new FileElementReader(this, element));
break;
case Element::TYPE_FILE_FILESYSTEM:
// TODO(kinuko): Resolve FileSystemURL before creating UploadData.
@@ -93,8 +129,7 @@ net::UploadData* ResourceRequestBody::ResolveElementsAndCreateUploadData(
break;
}
}
- upload_data->set_identifier(identifier_);
- return upload_data;
+ return new net::UploadDataStream(&element_readers, identifier_);
}
ResourceRequestBody::~ResourceRequestBody() {}
« no previous file with comments | « webkit/glue/resource_request_body.h ('k') | webkit/glue/resource_request_body_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698