| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index d45cdaae73337a466a57500d384aa5f935f24aee..ff52fb7d07d9514ef2a137df1dd82a5a4c385429 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -150,6 +150,7 @@
|
| #include "net/base/net_errors.h"
|
| #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
|
| #include "net/http/http_util.h"
|
| +#include "storage/common/data_element.h"
|
| #include "third_party/WebKit/public/platform/URLConversion.h"
|
| #include "third_party/WebKit/public/platform/WebCachePolicy.h"
|
| #include "third_party/WebKit/public/platform/WebData.h"
|
| @@ -759,6 +760,36 @@ bool IsContentWithCertificateErrorsRelevantToUI(
|
| ssl_status.connection_status);
|
| }
|
|
|
| +WebHTTPBody CreateWebHttpBodyFromResourceRequestBody(
|
| + const scoped_refptr<ResourceRequestBody> body) {
|
| + WebHTTPBody result;
|
| + result.initialize();
|
| + for (const ResourceRequestBody::Element& elem : *body->elements()) {
|
| + switch (elem.type()) {
|
| + case ResourceRequestBody::Element::TYPE_BYTES:
|
| + result.appendData(WebData(elem.bytes(), elem.length()));
|
| + break;
|
| + case ResourceRequestBody::Element::TYPE_FILE:
|
| + result.appendFileRange(WebString::fromUTF8(elem.path().AsUTF8Unsafe()),
|
| + elem.offset(), elem.length(),
|
| + elem.expected_modification_time().ToDoubleT());
|
| + break;
|
| + case ResourceRequestBody::Element::TYPE_FILE_FILESYSTEM:
|
| + result.appendFileSystemURLRange(
|
| + elem.filesystem_url(), elem.offset(), elem.length(),
|
| + elem.expected_modification_time().ToDoubleT());
|
| + break;
|
| + case ResourceRequestBody::Element::TYPE_BLOB:
|
| + result.appendBlob(WebString::fromUTF8(elem.blob_uuid()));
|
| + break;
|
| + default:
|
| + NOTIMPLEMENTED();
|
| + break;
|
| + }
|
| + }
|
| + return result;
|
| +}
|
| +
|
| #if defined(OS_ANDROID)
|
| // Returns true if WMPI should be used for playback, false otherwise.
|
| //
|
| @@ -5399,16 +5430,8 @@ void RenderFrameImpl::NavigateInternal(
|
|
|
| if (common_params.method == "POST" && !browser_side_navigation) {
|
| // Set post data.
|
| - WebHTTPBody http_body;
|
| - http_body.initialize();
|
| - const char* data = nullptr;
|
| - if (start_params.browser_initiated_post_data.size()) {
|
| - data = reinterpret_cast<const char*>(
|
| - &start_params.browser_initiated_post_data.front());
|
| - }
|
| - http_body.appendData(
|
| - WebData(data, start_params.browser_initiated_post_data.size()));
|
| - request.setHTTPBody(http_body);
|
| + request.setHTTPBody(
|
| + CreateWebHttpBodyFromResourceRequestBody(start_params.post_data));
|
| }
|
|
|
| // A session history navigation should have been accompanied by state.
|
|
|