| Index: content/browser/frame_host/navigation_controller_impl.cc
|
| diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
|
| index 9b3fd5e5e71d07b53a7e392405c6d1a49d36b913..a687f7f295057aba5ff8656ed3f92e9bf0a47943 100644
|
| --- a/content/browser/frame_host/navigation_controller_impl.cc
|
| +++ b/content/browser/frame_host/navigation_controller_impl.cc
|
| @@ -737,7 +737,8 @@ void NavigationControllerImpl::LoadURLWithParams(const LoadURLParams& params) {
|
| entry = GetLastCommittedEntry()->Clone();
|
| entry->SetPageID(-1);
|
| entry->AddOrUpdateFrameEntry(node, "", -1, -1, nullptr, params.url,
|
| - params.referrer, PageState(), "GET", -1);
|
| + params.referrer, PageState(), "GET", -1,
|
| + nullptr);
|
| }
|
| }
|
| }
|
| @@ -805,7 +806,8 @@ bool NavigationControllerImpl::PendingEntryMatchesHandle(
|
| bool NavigationControllerImpl::RendererDidNavigate(
|
| RenderFrameHostImpl* rfh,
|
| const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| - LoadCommittedDetails* details) {
|
| + LoadCommittedDetails* details,
|
| + scoped_refptr<ResourceRequestBody> post_data) {
|
| is_initial_navigation_ = false;
|
|
|
| // Save the previous state before we clobber it.
|
| @@ -838,20 +840,22 @@ bool NavigationControllerImpl::RendererDidNavigate(
|
|
|
| switch (details->type) {
|
| case NAVIGATION_TYPE_NEW_PAGE:
|
| - RendererDidNavigateToNewPage(rfh, params, details->did_replace_entry);
|
| + RendererDidNavigateToNewPage(rfh, params, details->did_replace_entry,
|
| + post_data);
|
| break;
|
| case NAVIGATION_TYPE_EXISTING_PAGE:
|
| details->did_replace_entry = details->is_in_page;
|
| - RendererDidNavigateToExistingPage(rfh, params);
|
| + RendererDidNavigateToExistingPage(rfh, params, post_data);
|
| break;
|
| case NAVIGATION_TYPE_SAME_PAGE:
|
| - RendererDidNavigateToSamePage(rfh, params);
|
| + RendererDidNavigateToSamePage(rfh, params, post_data);
|
| break;
|
| case NAVIGATION_TYPE_NEW_SUBFRAME:
|
| - RendererDidNavigateNewSubframe(rfh, params, details->did_replace_entry);
|
| + RendererDidNavigateNewSubframe(rfh, params, details->did_replace_entry,
|
| + post_data);
|
| break;
|
| case NAVIGATION_TYPE_AUTO_SUBFRAME:
|
| - if (!RendererDidNavigateAutoSubframe(rfh, params))
|
| + if (!RendererDidNavigateAutoSubframe(rfh, params, post_data))
|
| return false;
|
| break;
|
| case NAVIGATION_TYPE_NAV_IGNORE:
|
| @@ -1067,7 +1071,8 @@ NavigationType NavigationControllerImpl::ClassifyNavigation(
|
| void NavigationControllerImpl::RendererDidNavigateToNewPage(
|
| RenderFrameHostImpl* rfh,
|
| const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| - bool replace_entry) {
|
| + bool replace_entry,
|
| + scoped_refptr<ResourceRequestBody> post_data) {
|
| std::unique_ptr<NavigationEntryImpl> new_entry;
|
| bool update_virtual_url;
|
| // Only make a copy of the pending entry if it is appropriate for the new page
|
| @@ -1131,6 +1136,7 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage(
|
| frame_entry->set_document_sequence_number(params.document_sequence_number);
|
| frame_entry->set_method(params.method);
|
| frame_entry->set_post_id(params.post_id);
|
| + frame_entry->set_post_data(post_data);
|
|
|
| // history.pushState() is classified as a navigation to a new page, but
|
| // sets was_within_same_page to true. In this case, we already have the
|
| @@ -1155,7 +1161,8 @@ void NavigationControllerImpl::RendererDidNavigateToNewPage(
|
|
|
| void NavigationControllerImpl::RendererDidNavigateToExistingPage(
|
| RenderFrameHostImpl* rfh,
|
| - const FrameHostMsg_DidCommitProvisionalLoad_Params& params) {
|
| + const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| + scoped_refptr<ResourceRequestBody> post_data) {
|
| // We should only get here for main frame navigations.
|
| DCHECK(!rfh->GetParent());
|
|
|
| @@ -1189,6 +1196,7 @@ void NavigationControllerImpl::RendererDidNavigateToExistingPage(
|
| entry->GetFrameEntry(rfh->frame_tree_node());
|
| frame_entry->set_method(params.method);
|
| frame_entry->set_post_id(params.post_id);
|
| + frame_entry->set_post_data(post_data);
|
|
|
| // The redirected to page should not inherit the favicon from the previous
|
| // page.
|
| @@ -1220,7 +1228,8 @@ void NavigationControllerImpl::RendererDidNavigateToExistingPage(
|
|
|
| void NavigationControllerImpl::RendererDidNavigateToSamePage(
|
| RenderFrameHostImpl* rfh,
|
| - const FrameHostMsg_DidCommitProvisionalLoad_Params& params) {
|
| + const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| + scoped_refptr<ResourceRequestBody> post_data) {
|
| // This classification says that we have a pending entry that's the same as
|
| // the last committed entry. This entry is guaranteed to exist by
|
| // ClassifyNavigation. All we need to do is update the existing entry.
|
| @@ -1248,6 +1257,7 @@ void NavigationControllerImpl::RendererDidNavigateToSamePage(
|
| existing_entry->GetFrameEntry(rfh->frame_tree_node());
|
| frame_entry->set_method(params.method);
|
| frame_entry->set_post_id(params.post_id);
|
| + frame_entry->set_post_data(post_data);
|
|
|
| DiscardNonCommittedEntries();
|
| }
|
| @@ -1255,7 +1265,8 @@ void NavigationControllerImpl::RendererDidNavigateToSamePage(
|
| void NavigationControllerImpl::RendererDidNavigateNewSubframe(
|
| RenderFrameHostImpl* rfh,
|
| const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| - bool replace_entry) {
|
| + bool replace_entry,
|
| + scoped_refptr<ResourceRequestBody> post_data) {
|
| DCHECK(ui::PageTransitionCoreTypeIs(params.transition,
|
| ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
|
|
|
| @@ -1273,7 +1284,7 @@ void NavigationControllerImpl::RendererDidNavigateNewSubframe(
|
| rfh->frame_tree_node()->frame_tree_node_id(), params.frame_unique_name,
|
| params.item_sequence_number, params.document_sequence_number,
|
| rfh->GetSiteInstance(), params.url, params.referrer, params.method,
|
| - params.post_id);
|
| + params.post_id, post_data);
|
| new_entry = GetLastCommittedEntry()->CloneAndReplace(rfh->frame_tree_node(),
|
| frame_entry);
|
|
|
| @@ -1291,7 +1302,8 @@ void NavigationControllerImpl::RendererDidNavigateNewSubframe(
|
|
|
| bool NavigationControllerImpl::RendererDidNavigateAutoSubframe(
|
| RenderFrameHostImpl* rfh,
|
| - const FrameHostMsg_DidCommitProvisionalLoad_Params& params) {
|
| + const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
|
| + scoped_refptr<ResourceRequestBody> post_data) {
|
| DCHECK(ui::PageTransitionCoreTypeIs(params.transition,
|
| ui::PAGE_TRANSITION_AUTO_SUBFRAME));
|
|
|
| @@ -1335,7 +1347,7 @@ bool NavigationControllerImpl::RendererDidNavigateAutoSubframe(
|
| rfh->frame_tree_node(), params.frame_unique_name,
|
| params.item_sequence_number, params.document_sequence_number,
|
| rfh->GetSiteInstance(), params.url, params.referrer, params.page_state,
|
| - params.method, params.post_id);
|
| + params.method, params.post_id, post_data);
|
|
|
| // Cross-process subframe navigations may leave a pending entry around.
|
| // Clear it if it's actually for the subframe.
|
|
|