summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/sessions/session_restore_uitest.cc9
-rw-r--r--content/browser/tab_contents/tab_contents.cc10
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());
+ }
}
}