Send session history offset and length parameters in the Navigate message to
keep the renderer's notion of those values properly synchronized with the
NavigationController.

R=brettw
BUG=18062
TEST=see session_history_uitest.cc

Review URL: http://codereview.chromium.org/1090002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42022 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/tab_contents/tab_contents.cc b/chrome/browser/tab_contents/tab_contents.cc
index 97e49b3..aa2bc97 100644
--- a/chrome/browser/tab_contents/tab_contents.cc
+++ b/chrome/browser/tab_contents/tab_contents.cc
@@ -204,15 +204,20 @@
   return ViewMsg_Navigate_Params::NORMAL;
 }
 
-void MakeNavigateParams(Profile* profile, const NavigationEntry& entry,
+void MakeNavigateParams(const NavigationController& controller,
                         NavigationController::ReloadType reload_type,
                         ViewMsg_Navigate_Params* params) {
+  const NavigationEntry& entry = *controller.pending_entry();
   params->page_id = entry.page_id();
+  params->pending_history_list_offset = controller.pending_entry_index();
+  params->current_history_list_offset = controller.last_committed_entry_index();
+  params->current_history_list_length = controller.entry_count();
   params->url = entry.url();
   params->referrer = entry.referrer();
   params->transition = entry.transition_type();
   params->state = entry.content_state();
-  params->navigation_type = GetNavigationType(profile, entry, reload_type);
+  params->navigation_type =
+      GetNavigationType(controller.profile(), entry, reload_type);
   params->request_time = base::Time::Now();
 }
 
@@ -739,10 +744,9 @@
   // Tell DevTools agent that it is attached prior to the navigation.
   DevToolsManager* devtools_manager = DevToolsManager::GetInstance();
   if (devtools_manager) {  // NULL in unit tests.
-    devtools_manager->OnNavigatingToPendingEntry(
-        render_view_host(),
-        dest_render_view_host,
-        controller_.pending_entry()->url());
+    devtools_manager->OnNavigatingToPendingEntry(render_view_host(),
+                                                 dest_render_view_host,
+                                                 entry.url());
   }
 
   // Used for page load time metrics.
@@ -750,7 +754,7 @@
 
   // Navigate in the desired RenderViewHost.
   ViewMsg_Navigate_Params navigate_params;
-  MakeNavigateParams(profile(), entry, reload_type, &navigate_params);
+  MakeNavigateParams(controller_, reload_type, &navigate_params);
   dest_render_view_host->Navigate(navigate_params);
 
   if (entry.page_id() == -1) {
@@ -1807,13 +1811,6 @@
     controller_.GoToOffset(offset);
 }
 
-void TabContents::GetHistoryListCount(int* back_list_count,
-                                      int* forward_list_count) {
-  int current_index = controller_.last_committed_entry_index();
-  *back_list_count = current_index;
-  *forward_list_count = controller_.entry_count() - current_index - 1;
-}
-
 void TabContents::OnMissingPluginStatus(int status) {
 #if defined(OS_WIN)
 // TODO(PORT): pull in when plug-ins work