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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 1956383003: Forwarding POST body into renderer after a cross-site transfer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months 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
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.

Powered by Google App Engine
This is Rietveld 408576698