| 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());
|
| +}
|
|
|