| Index: content/browser/frame_host/navigation_request.cc
|
| diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
|
| index 1139604533b8c68a1d9239703294f9edc0664e5f..8f75d4a0ec46e5585ac335e3b309bcab4bf2df53 100644
|
| --- a/content/browser/frame_host/navigation_request.cc
|
| +++ b/content/browser/frame_host/navigation_request.cc
|
| @@ -80,20 +80,23 @@ std::unique_ptr<NavigationRequest> NavigationRequest::CreateBrowserInitiated(
|
| headers.SetHeaderIfMissing(net::HttpRequestHeaders::kUserAgent,
|
| GetContentClient()->GetUserAgent());
|
|
|
| - // Fill POST data from the browser in the request body.
|
| + // Fill POST data in the request body.
|
| scoped_refptr<ResourceRequestBody> request_body;
|
| - if (entry.GetHasPostData()) {
|
| - request_body = new ResourceRequestBody();
|
| - request_body->AppendBytes(
|
| - reinterpret_cast<const char *>(
|
| - entry.GetBrowserInitiatedPostData()->front()),
|
| - entry.GetBrowserInitiatedPostData()->size());
|
| + if (frame_entry.method() == "POST") {
|
| + request_body = frame_entry.GetPostData();
|
| + if (!request_body && entry.GetBrowserInitiatedPostData()) {
|
| + request_body = new ResourceRequestBody();
|
| + request_body->AppendBytes(
|
| + reinterpret_cast<const char*>(
|
| + entry.GetBrowserInitiatedPostData()->front()),
|
| + entry.GetBrowserInitiatedPostData()->size());
|
| + }
|
| }
|
|
|
| std::unique_ptr<NavigationRequest> navigation_request(new NavigationRequest(
|
| frame_tree_node, entry.ConstructCommonNavigationParams(
|
| - dest_url, dest_referrer, navigation_type, lofi_state,
|
| - navigation_start),
|
| + frame_entry, dest_url, dest_referrer,
|
| + navigation_type, lofi_state, navigation_start),
|
| BeginNavigationParams(headers.ToString(),
|
| LoadFlagFromNavigationType(navigation_type),
|
| false, // has_user_gestures
|
| @@ -194,6 +197,9 @@ NavigationRequest::NavigationRequest(
|
| common_params, begin_params, first_party_for_cookies,
|
| frame_tree_node->current_origin(), frame_tree_node->IsMainFrame(),
|
| parent_is_main_frame, frame_tree_node->frame_tree_node_id(), body));
|
| +
|
| + if (body)
|
| + post_data_ = body->MakeCopy();
|
| }
|
|
|
| NavigationRequest::~NavigationRequest() {
|
| @@ -226,7 +232,7 @@ void NavigationRequest::BeginNavigation() {
|
|
|
| // Select an appropriate RenderFrameHost.
|
| RenderFrameHostImpl* render_frame_host =
|
| - frame_tree_node_->render_manager()->GetFrameHostForNavigation(*this);
|
| + frame_tree_node_->render_manager()->GetFrameHostForNavigation(this, true);
|
| NavigatorImpl::CheckWebUIRendererDoesNotDisplayNormalURL(render_frame_host,
|
| common_params_.url);
|
|
|
| @@ -251,6 +257,10 @@ void NavigationRequest::TransferNavigationHandleOwnership(
|
| render_frame_host->SetNavigationHandle(std::move(navigation_handle_));
|
| }
|
|
|
| +void NavigationRequest::ResetPostData() {
|
| + post_data_ = nullptr;
|
| +}
|
| +
|
| void NavigationRequest::OnRequestRedirected(
|
| const net::RedirectInfo& redirect_info,
|
| const scoped_refptr<ResourceResponse>& response) {
|
| @@ -305,7 +315,7 @@ void NavigationRequest::OnResponseStarted(
|
|
|
| // Select an appropriate renderer to commit the navigation.
|
| RenderFrameHostImpl* render_frame_host =
|
| - frame_tree_node_->render_manager()->GetFrameHostForNavigation(*this);
|
| + frame_tree_node_->render_manager()->GetFrameHostForNavigation(this, true);
|
| NavigatorImpl::CheckWebUIRendererDoesNotDisplayNormalURL(render_frame_host,
|
| common_params_.url);
|
|
|
| @@ -419,7 +429,7 @@ void NavigationRequest::CommitNavigation() {
|
| TransferNavigationHandleOwnership(render_frame_host);
|
| render_frame_host->CommitNavigation(response_.get(), std::move(body_),
|
| common_params_, request_params_,
|
| - is_view_source_);
|
| + is_view_source_, post_data_);
|
|
|
| // When navigating to a Javascript url, the NavigationRequest is not stored
|
| // in the FrameTreeNode. Therefore do not reset it, as this could cancel an
|
|
|