Index: content/common/resource_request_body.cc |
diff --git a/content/common/resource_request_body.cc b/content/common/resource_request_body.cc |
index b2b0c5fd96dc41254a5ba15aca33fd8db3163174..74276c8aaa06544f4144428390347327bf180c53 100644 |
--- a/content/common/resource_request_body.cc |
+++ b/content/common/resource_request_body.cc |
@@ -14,6 +14,50 @@ |
ResourceRequestBody::ResourceRequestBody() |
: identifier_(0) { |
+} |
+ |
+void ResourceRequestBody::AppendExplodedHTTPBodyElement( |
+ const ExplodedHttpBodyElement& element) { |
+ // Note: this code is based on GetRequestBodyForWebURLRequest (in |
+ // web_url_request_util.cc). The other function transforms a |
+ // blink::WebHTTPBody into a ResourceRequestBody. This function is used to |
+ // transform an ExplodedHttpBody into a ResourceRequestBody. |
+ switch (element.type) { |
+ case WebHTTPBody::Element::TypeData: |
+ if (!element.data.empty()) { |
+ // Blink sometimes gives empty data to append. These aren't |
+ // necessary so they are just optimized out here. |
+ AppendBytes(element.data.data(), static_cast<int>(element.data.size())); |
+ } |
+ break; |
+ case WebHTTPBody::Element::TypeFile: |
+ if (element.file_length == -1) { |
+ AppendFileRange( |
+ base::FilePath::FromUTF16Unsafe(element.file_path.string()), 0, |
+ std::numeric_limits<uint64_t>::max(), base::Time()); |
+ } else { |
+ AppendFileRange( |
+ base::FilePath::FromUTF16Unsafe(element.file_path.string()), |
+ static_cast<uint64_t>(element.file_start), |
+ static_cast<uint64_t>(element.file_length), |
+ base::Time::FromDoubleT(element.file_modification_time)); |
+ } |
+ break; |
+ case WebHTTPBody::Element::TypeFileSystemURL: { |
+ GURL file_system_url = element.filesystem_url; |
+ DCHECK(file_system_url.SchemeIsFileSystem()); |
+ AppendFileSystemFileRange( |
+ file_system_url, static_cast<uint64_t>(element.file_start), |
+ static_cast<uint64_t>(element.file_length), |
+ base::Time::FromDoubleT(element.file_modification_time)); |
+ break; |
+ } |
+ case WebHTTPBody::Element::TypeBlob: |
+ AppendBlob(element.blob_uuid); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
} |
void ResourceRequestBody::AppendBytes(const char* bytes, int bytes_len) { |