Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 8efe23409d1ca806efc04c843690c20bda6c1624..60145c2b47d981608ae9c0ab29df9447077b1875 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -808,10 +808,6 @@ |
ssl_status.connection_status); |
} |
-bool IsHttpPost(const blink::WebURLRequest& request) { |
- return request.httpMethod().utf8() == "POST"; |
-} |
- |
#if defined(OS_ANDROID) |
// Returns true if WMPI should be used for playback, false otherwise. |
// |
@@ -2991,9 +2987,8 @@ |
request.url(), referrer, |
suggested_name)); |
} else { |
- OpenURL(request.url(), IsHttpPost(request), |
- GetRequestBodyForWebURLRequest(request), referrer, policy, |
- should_replace_current_entry, false); |
+ OpenURL(request.url(), referrer, policy, should_replace_current_entry, |
+ false); |
} |
} |
@@ -4893,9 +4888,8 @@ |
if (is_content_initiated && IsTopLevelNavigation(frame_) && |
render_view_->renderer_preferences_ |
.browser_handles_all_top_level_requests) { |
- OpenURL(url, IsHttpPost(info.urlRequest), |
- GetRequestBodyForWebURLRequest(info.urlRequest), referrer, |
- info.defaultPolicy, info.replacesCurrentHistoryItem, false); |
+ OpenURL(url, referrer, info.defaultPolicy, info.replacesCurrentHistoryItem, |
+ false); |
return blink::WebNavigationPolicyIgnore; // Suppress the load here. |
} |
@@ -4904,9 +4898,8 @@ |
// FrameNavigationEntry. If none is found, fall back to the default url. |
if (SiteIsolationPolicy::UseSubframeNavigationEntries() && |
info.isHistoryNavigationInNewChildFrame && is_content_initiated) { |
- OpenURL(url, IsHttpPost(info.urlRequest), |
- GetRequestBodyForWebURLRequest(info.urlRequest), referrer, |
- info.defaultPolicy, info.replacesCurrentHistoryItem, true); |
+ OpenURL(url, referrer, info.defaultPolicy, info.replacesCurrentHistoryItem, |
+ true); |
// Suppress the load in Blink but mark the frame as loading. |
return blink::WebNavigationPolicyHandledByClient; |
} |
@@ -4921,6 +4914,15 @@ |
// an extension or app origin, leaving a WebUI page, etc). We only care about |
// top-level navigations (not iframes). But we sometimes navigate to |
// about:blank to clear a tab, and we want to still allow that. |
+ // |
+ // Note: this is known to break POST submissions when crossing process |
+ // boundaries until http://crbug.com/101395 is fixed. This is better for |
+ // security than loading a WebUI, extension or app page in the wrong process. |
+ // POST requests don't work because this mechanism does not preserve form |
+ // POST data. We will need to send the request's httpBody data up to the |
+ // browser process, and issue a special POST navigation in WebKit (via |
+ // FrameLoader::loadFrameRequest). See ResourceDispatcher and WebURLLoaderImpl |
+ // for examples of how to send the httpBody data. |
if (!frame_->parent() && is_content_initiated && |
!url.SchemeIs(url::kAboutScheme)) { |
bool send_referrer = false; |
@@ -4960,9 +4962,7 @@ |
} |
if (should_fork) { |
- OpenURL(url, IsHttpPost(info.urlRequest), |
- GetRequestBodyForWebURLRequest(info.urlRequest), |
- send_referrer ? referrer : Referrer(), info.defaultPolicy, |
+ OpenURL(url, send_referrer ? referrer : Referrer(), info.defaultPolicy, |
info.replacesCurrentHistoryItem, false); |
return blink::WebNavigationPolicyIgnore; // Suppress the load here. |
} |
@@ -5002,9 +5002,8 @@ |
if (is_fork) { |
// Open the URL via the browser, not via WebKit. |
- OpenURL(url, IsHttpPost(info.urlRequest), |
- GetRequestBodyForWebURLRequest(info.urlRequest), Referrer(), |
- info.defaultPolicy, info.replacesCurrentHistoryItem, false); |
+ OpenURL(url, Referrer(), info.defaultPolicy, |
+ info.replacesCurrentHistoryItem, false); |
return blink::WebNavigationPolicyIgnore; |
} |
@@ -5334,18 +5333,13 @@ |
#endif |
#endif |
-void RenderFrameImpl::OpenURL( |
- const GURL& url, |
- bool uses_post, |
- const scoped_refptr<ResourceRequestBodyImpl>& resource_request_body, |
- const Referrer& referrer, |
- WebNavigationPolicy policy, |
- bool should_replace_current_entry, |
- bool is_history_navigation_in_new_child) { |
+void RenderFrameImpl::OpenURL(const GURL& url, |
+ const Referrer& referrer, |
+ WebNavigationPolicy policy, |
+ bool should_replace_current_entry, |
+ bool is_history_navigation_in_new_child) { |
FrameHostMsg_OpenURL_Params params; |
params.url = url; |
- params.uses_post = uses_post; |
- params.resource_request_body = resource_request_body; |
params.referrer = referrer; |
params.disposition = RenderViewImpl::NavigationPolicyToDisposition(policy); |