| Index: content/browser/loader/cross_site_resource_handler.cc
|
| diff --git a/content/browser/loader/cross_site_resource_handler.cc b/content/browser/loader/cross_site_resource_handler.cc
|
| index 67d364a0ec0c40fabbbaf2e63e7c8cc1f9033eb1..92262af23dcee59c4a499492e50ae00cb7e45bf4 100644
|
| --- a/content/browser/loader/cross_site_resource_handler.cc
|
| +++ b/content/browser/loader/cross_site_resource_handler.cc
|
| @@ -18,6 +18,7 @@
|
| #include "content/browser/loader/resource_request_info_impl.h"
|
| #include "content/browser/site_instance_impl.h"
|
| #include "content/browser/web_contents/web_contents_impl.h"
|
| +#include "content/common/resource_request_body.h"
|
| #include "content/common/site_isolation_policy.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/content_browser_client.h"
|
| @@ -45,14 +46,15 @@ struct CrossSiteResponseParams {
|
| const std::vector<GURL>& transfer_url_chain,
|
| const Referrer& referrer,
|
| ui::PageTransition page_transition,
|
| - bool should_replace_current_entry)
|
| + bool should_replace_current_entry,
|
| + const scoped_refptr<ResourceRequestBody> resource_request_body)
|
| : render_frame_id(render_frame_id),
|
| global_request_id(global_request_id),
|
| transfer_url_chain(transfer_url_chain),
|
| referrer(referrer),
|
| page_transition(page_transition),
|
| - should_replace_current_entry(should_replace_current_entry) {
|
| - }
|
| + should_replace_current_entry(should_replace_current_entry),
|
| + resource_request_body(resource_request_body) {}
|
|
|
| int render_frame_id;
|
| GlobalRequestID global_request_id;
|
| @@ -60,6 +62,7 @@ struct CrossSiteResponseParams {
|
| Referrer referrer;
|
| ui::PageTransition page_transition;
|
| bool should_replace_current_entry;
|
| + scoped_refptr<ResourceRequestBody> resource_request_body;
|
| };
|
|
|
| void OnCrossSiteResponseHelper(const CrossSiteResponseParams& params) {
|
| @@ -76,10 +79,15 @@ void OnCrossSiteResponseHelper(const CrossSiteResponseParams& params) {
|
| // default Chrome.
|
| CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible());
|
| }
|
| +
|
| + // TODO(lukasza): DO NOT SUBMIT: Double-check that post body is cleared
|
| + // upon redirect - otherwise we would leak post body to a cross-site
|
| + // renderer (violating site isolation goals).
|
| +
|
| rfh->OnCrossSiteResponse(
|
| params.global_request_id, std::move(cross_site_transferring_request),
|
| params.transfer_url_chain, params.referrer, params.page_transition,
|
| - params.should_replace_current_entry);
|
| + params.should_replace_current_entry, params.resource_request_body);
|
| } else if (leak_requests_for_testing_) {
|
| // Some unit tests expect requests to be leaked in this case, so they can
|
| // pass them along manually.
|
| @@ -331,16 +339,12 @@ void CrossSiteResourceHandler::StartCrossSiteTransition(
|
| response_);
|
|
|
| BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(
|
| - &OnCrossSiteResponseHelper,
|
| - CrossSiteResponseParams(render_frame_id,
|
| - global_id,
|
| - transfer_url_chain,
|
| - referrer,
|
| - info->GetPageTransition(),
|
| - info->should_replace_current_entry())));
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&OnCrossSiteResponseHelper,
|
| + CrossSiteResponseParams(
|
| + render_frame_id, global_id, transfer_url_chain, referrer,
|
| + info->GetPageTransition(),
|
| + info->should_replace_current_entry(), info->body())));
|
| }
|
|
|
| bool CrossSiteResourceHandler::DeferForNavigationPolicyCheck(
|
|
|