| Index: content/browser/frame_host/navigator_impl.cc
|
| diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
|
| index 72f9f8702c8fa0509b62e2bbdbf6a67661c0bf9e..2f6328478cefc7fae6cc7cc061fd83eab5053205 100644
|
| --- a/content/browser/frame_host/navigator_impl.cc
|
| +++ b/content/browser/frame_host/navigator_impl.cc
|
| @@ -77,6 +77,26 @@ RenderFrameHostManager* GetRenderManager(RenderFrameHostImpl* rfh) {
|
| return rfh->frame_tree_node()->frame_tree()->root()->render_manager();
|
| }
|
|
|
| +HistoryNavigationParams MakeHistoryParams(
|
| + const NavigationEntryImpl& entry,
|
| + NavigationControllerImpl* controller) {
|
| + int pending_history_list_offset = controller->GetIndexOfEntry(&entry);
|
| + int current_history_list_offset = controller->GetLastCommittedEntryIndex();
|
| + int current_history_list_length = controller->GetEntryCount();
|
| + if (entry.should_clear_history_list()) {
|
| + // Set the history list related parameters to the same values a
|
| + // NavigationController would return before its first navigation. This will
|
| + // fully clear the RenderView's view of the session history.
|
| + pending_history_list_offset = -1;
|
| + current_history_list_offset = -1;
|
| + current_history_list_length = 0;
|
| + }
|
| + return HistoryNavigationParams(
|
| + entry.GetPageState(), entry.GetPageID(), pending_history_list_offset,
|
| + current_history_list_offset, current_history_list_length,
|
| + entry.should_clear_history_list());
|
| +}
|
| +
|
| void MakeNavigateParams(const NavigationEntryImpl& entry,
|
| NavigationControllerImpl* controller,
|
| NavigationController::ReloadType reload_type,
|
| @@ -97,7 +117,9 @@ void MakeNavigateParams(const NavigationEntryImpl& entry,
|
| !entry.IsViewSourceMode(), ui_timestamp, report_type,
|
| entry.GetBaseURLForDataURL(), entry.GetHistoryURLForDataURL());
|
| params->commit_params = CommitNavigationParams(
|
| - entry.GetPageState(), entry.GetIsOverridingUserAgent(), navigation_start);
|
| + entry.GetIsOverridingUserAgent(), navigation_start);
|
| + params->history_params = MakeHistoryParams(entry, controller);
|
| +
|
| params->is_post = entry.GetHasPostData();
|
| params->extra_headers = entry.extra_headers();
|
| if (entry.GetBrowserInitiatedPostData()) {
|
| @@ -117,21 +139,6 @@ void MakeNavigateParams(const NavigationEntryImpl& entry,
|
| params->transferred_request_request_id =
|
| entry.transferred_global_request_id().request_id;
|
|
|
| - params->page_id = entry.GetPageID();
|
| - params->should_clear_history_list = entry.should_clear_history_list();
|
| - if (entry.should_clear_history_list()) {
|
| - // Set the history list related parameters to the same values a
|
| - // NavigationController would return before its first navigation. This will
|
| - // fully clear the RenderView's view of the session history.
|
| - params->pending_history_list_offset = -1;
|
| - params->current_history_list_offset = -1;
|
| - params->current_history_list_length = 0;
|
| - } else {
|
| - params->pending_history_list_offset = controller->GetIndexOfEntry(&entry);
|
| - params->current_history_list_offset =
|
| - controller->GetLastCommittedEntryIndex();
|
| - params->current_history_list_length = controller->GetEntryCount();
|
| - }
|
| // Set the redirect chain to the navigation's redirects, unless we are
|
| // returning to a completed navigation (whose previous redirects don't apply).
|
| if (ui::PageTransitionIsNewNavigation(params->common_params.transition)) {
|
| @@ -713,7 +720,9 @@ void NavigatorImpl::OnBeginNavigation(
|
| // happens when the existing request map entry is replaced and destroyed.
|
| scoped_ptr<NavigationRequest> navigation_request =
|
| NavigationRequest::CreateRendererInitiated(
|
| - frame_tree_node, common_params, begin_params, body);
|
| + frame_tree_node, common_params, begin_params, body,
|
| + controller_->GetLastCommittedEntryIndex(),
|
| + controller_->GetEntryCount());
|
| navigation_request_map_.set(
|
| frame_tree_node->frame_tree_node_id(), navigation_request.Pass());
|
|
|
| @@ -755,7 +764,8 @@ void NavigatorImpl::CommitNavigation(FrameTreeNode* frame_tree_node,
|
|
|
| render_frame_host->CommitNavigation(response, body.Pass(),
|
| navigation_request->common_params(),
|
| - navigation_request->commit_params());
|
| + navigation_request->commit_params(),
|
| + navigation_request->history_params());
|
| }
|
|
|
| // PlzNavigate
|
| @@ -839,7 +849,8 @@ void NavigatorImpl::RequestNavigation(
|
| GetNavigationType(controller_->GetBrowserContext(), entry, reload_type);
|
| scoped_ptr<NavigationRequest> navigation_request =
|
| NavigationRequest::CreateBrowserInitiated(
|
| - frame_tree_node, entry, navigation_type, navigation_start);
|
| + frame_tree_node, entry, navigation_type, navigation_start,
|
| + MakeHistoryParams(entry, controller_));
|
| // TODO(clamy): Check if navigations are blocked and if so store the
|
| // parameters.
|
|
|
|
|