diff options
-rw-r--r-- | chrome/browser/sessions/session_restore_uitest.cc | 9 | ||||
-rw-r--r-- | content/browser/tab_contents/tab_contents.cc | 10 |
2 files changed, 17 insertions, 2 deletions
diff --git a/chrome/browser/sessions/session_restore_uitest.cc b/chrome/browser/sessions/session_restore_uitest.cc index 324e65a..2daba5c 100644 --- a/chrome/browser/sessions/session_restore_uitest.cc +++ b/chrome/browser/sessions/session_restore_uitest.cc @@ -142,7 +142,10 @@ TEST_F(SessionRestoreUITest, RestoresForwardAndBackwardNavs) { ASSERT_TRUE(GetActiveTabURL() == url3_); ASSERT_TRUE(tab_proxy->GoBack()); ASSERT_TRUE(GetActiveTabURL() == url2_); - ASSERT_TRUE(tab_proxy->GoBack()); + + // Test renderer-initiated back/forward as well. + GURL go_back_url("javascript:history.back();"); + ASSERT_TRUE(tab_proxy->NavigateToURL(go_back_url)); ASSERT_TRUE(GetActiveTabURL() == url1_); } @@ -195,7 +198,9 @@ TEST_F(SessionRestoreUITest, RestoresCrossSiteForwardAndBackwardNavs) { ASSERT_TRUE(tab_proxy->GetCurrentURL(&url)); ASSERT_EQ(cross_site_url, url); - ASSERT_TRUE(tab_proxy->GoForward()); + // Test renderer-initiated back/forward as well. + GURL go_forward_url("javascript:history.forward();"); + ASSERT_TRUE(tab_proxy->NavigateToURL(go_forward_url)); ASSERT_TRUE(tab_proxy->GetCurrentURL(&url)); ASSERT_EQ(url2_, url); } diff --git a/content/browser/tab_contents/tab_contents.cc b/content/browser/tab_contents/tab_contents.cc index fe1abaf..04a1198 100644 --- a/content/browser/tab_contents/tab_contents.cc +++ b/content/browser/tab_contents/tab_contents.cc @@ -1031,6 +1031,16 @@ void TabContents::OnGoToEntryAtOffset(int offset) { entry->set_transition_type(entry->transition_type() | PageTransition::FORWARD_BACK); NavigateToEntry(*entry, NavigationController::NO_RELOAD); + + // If the entry is being restored and doesn't have a SiteInstance yet, fill + // it in now that we know. This allows us to find the entry when it commits. + if (!entry->site_instance() && + entry->restore_type() != NavigationEntry::RESTORE_NONE) { + RenderViewHost* dest_rvh = render_manager_.pending_render_view_host() ? + render_manager_.pending_render_view_host() : + render_manager_.current_host(); + entry->set_site_instance(dest_rvh->site_instance()); + } } } |