Index: chrome/browser/sessions/session_restore_browsertest.cc |
diff --git a/chrome/browser/sessions/session_restore_browsertest.cc b/chrome/browser/sessions/session_restore_browsertest.cc |
index ed7044033254e521ea30c144fc05b7ac6f4349b5..b3a9864f3f441a243ccf1146b8df052d6a417dde 100644 |
--- a/chrome/browser/sessions/session_restore_browsertest.cc |
+++ b/chrome/browser/sessions/session_restore_browsertest.cc |
@@ -23,6 +23,7 @@ |
#include "chrome/browser/ui/browser_list.h" |
#include "chrome/browser/ui/browser_tabstrip.h" |
#include "chrome/browser/ui/browser_window.h" |
+#include "chrome/browser/ui/tab_contents/tab_contents.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/common/chrome_notification_types.h" |
#include "chrome/common/chrome_switches.h" |
@@ -852,3 +853,43 @@ IN_PROC_BROWSER_TEST_F(SessionRestoreTest, SessionStorage) { |
EXPECT_EQ(session_storage_persistent_id, |
restored_session_storage_persistent_id); |
} |
+ |
+IN_PROC_BROWSER_TEST_F(SessionRestoreTest, SessionStorageAfterTabReplace) { |
+ // Simulate what prerendering does: create a new TabContents with the same |
+ // SessionStorageNamespace as an existing tab, then replace the tab with it. |
+ { |
+ content::NavigationController* controller = |
+ &chrome::GetActiveWebContents(browser())->GetController(); |
+ ASSERT_TRUE(controller->GetDefaultSessionStorageNamespace()); |
+ |
+ content::SessionStorageNamespaceMap session_storage_namespace_map; |
+ session_storage_namespace_map[""] = |
+ controller->GetDefaultSessionStorageNamespace(); |
+ scoped_ptr<content::WebContents> web_contents( |
+ content::WebContents::CreateWithSessionStorage( |
+ browser()->profile(), NULL, MSG_ROUTING_NONE, NULL, |
+ session_storage_namespace_map)); |
+ |
+ TabStripModel* tab_strip_model = browser()->tab_strip_model(); |
+ // We only need to create a TabContents because ReplaceTabContentsAt wants |
+ // one. We don't need any of the helpers TabContents provides. |
+ scoped_ptr<TabContents> old_tab_contents( |
+ tab_strip_model->ReplaceTabContentsAt( |
+ tab_strip_model->active_index(), |
+ TabContents::Factory::CreateTabContents(web_contents.release()))); |
+ // Navigate with the new tab. |
+ ui_test_utils::NavigateToURL(browser(), url2_); |
+ // old_tab_contents goes out of scope. |
+ } |
+ |
+ // Check that the sessionStorage data is going to be persisted. |
+ content::NavigationController* controller = |
+ &chrome::GetActiveWebContents(browser())->GetController(); |
+ EXPECT_TRUE( |
+ controller->GetDefaultSessionStorageNamespace()->should_persist()); |
+ |
+ // Quit and restore. Check that no extra tabs were created. |
+ Browser* new_browser = QuitBrowserAndRestore(browser(), 1); |
+ ASSERT_EQ(1u, BrowserList::size()); |
+ EXPECT_EQ(1, new_browser->tab_strip_model()->count()); |
+} |