tab_restore_browsertest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_timeouts.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/find_bar/find_notification_details.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_controller.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h" 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebFindOptions.h" 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TabRestoreTest : public InProcessBrowserTest { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TabRestoreTest() : active_browser_list_(NULL) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url1_ = ui_test_utils::GetTestUrl( 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII("session_history"), 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII("bot1.html")); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url2_ = ui_test_utils::GetTestUrl( 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII("session_history"), 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII("bot2.html")); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void SetUpOnMainThread() OVERRIDE { 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch active_browser_list_ = BrowserList::GetInstance(chrome::GetActiveDesktop()); 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch InProcessBrowserTest::SetUpOnMainThread(); 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* GetBrowser(int index) { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CHECK(static_cast<int>(active_browser_list_->size()) > index); 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return active_browser_list_->get(index); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds tabs to the given browser, all navigated to url1_. Returns 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the final number of tabs. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int AddSomeTabs(Browser* browser, int how_many) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int starting_tab_count = browser->tab_strip_model()->count(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < how_many; ++i) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser, url1_, NEW_FOREGROUND_TAB, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int tab_count = browser->tab_strip_model()->count(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(starting_tab_count + how_many, tab_count); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tab_count; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CloseTab(int index) { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver tab_close_observer( 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->CloseWebContentsAt( 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) index, TabStripModel::CLOSE_CREATE_HISTORICAL_TAB); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_close_observer.Wait(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Uses the undo-close-tab accelerator to undo a close-tab or close-window 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // operation. The newly restored tab is expected to appear in the 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window at index |expected_window_index|, at the |expected_tabstrip_index|, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and to be active. If |expected_window_index| is equal to the number of 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // current windows, the restored tab is expected to be created in a new 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window (since the index is 0-based). 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RestoreTab(int expected_window_index, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_tabstrip_index) { 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int window_count = static_cast<int>(active_browser_list_->size()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GT(window_count, 0); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool expect_new_window = (expected_window_index == window_count); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expect_new_window) { 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch browser = active_browser_list_->get(0); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser = GetBrowser(expected_window_index); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int tab_count = browser->tab_strip_model()->count(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GT(tab_count, 0); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the tab. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver tab_added_observer( 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_TAB_PARENTED, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver tab_loaded_observer( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::RestoreTab(browser); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_added_observer.Wait(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_loaded_observer.Wait(); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (expect_new_window) { 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int new_window_count = static_cast<int>(active_browser_list_->size()); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(++window_count, new_window_count); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser = GetBrowser(expected_window_index); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(++tab_count, browser->tab_strip_model()->count()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get a handle to the restored tab. 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_GT(browser->tab_strip_model()->count(), expected_tabstrip_index); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure that the tab and window are active. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tabstrip_index, 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->active_index()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GoBack(Browser* browser) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::GoBack(browser, CURRENT_TAB); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnsureTabFinishedRestoring(content::WebContents* tab) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NavigationController* controller = &tab->GetController(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!controller->NeedsReload() && !controller->GetPendingEntry() && 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !controller->GetWebContents()->IsLoading()) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<content::NavigationController>(controller)); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url1_; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url2_; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const BrowserList* active_browser_list_; 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TabRestoreTest); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Close the end tab in the current window, then restore it. The tab should be 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in its original position, and active. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, Basic) { 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int starting_tab_count = browser()->tab_strip_model()->count(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tab_count = AddSomeTabs(browser(), 1); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int closed_tab_index = tab_count - 1; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(closed_tab_index); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(starting_tab_count, browser()->tab_strip_model()->count()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(0, closed_tab_index)); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And make sure everything looks right. 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(starting_tab_count + 1, browser()->tab_strip_model()->count()); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(closed_tab_index, browser()->tab_strip_model()->active_index()); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url1_, 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Close a tab not at the end of the current window, then restore it. The tab 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// should be in its original position, and active. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, MiddleTab) { 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int starting_tab_count = browser()->tab_strip_model()->count(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSomeTabs(browser(), 3); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close one in the middle 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int closed_tab_index = starting_tab_count + 1; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(closed_tab_index); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(starting_tab_count + 2, browser()->tab_strip_model()->count()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(0, closed_tab_index)); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And make sure everything looks right. 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(starting_tab_count + 3, browser()->tab_strip_model()->count()); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(closed_tab_index, browser()->tab_strip_model()->active_index()); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url1_, 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Close a tab, switch windows, then restore the tab. The tab should be in its 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// original window and position, and active. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreToDifferentWindow) { 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int starting_tab_count = browser()->tab_strip_model()->count(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSomeTabs(browser(), 3); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close one in the middle 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int closed_tab_index = starting_tab_count + 1; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(closed_tab_index); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(starting_tab_count + 2, browser()->tab_strip_model()->count()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new browser. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); 213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(2u, active_browser_list_->size()); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore tab into original browser. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(0, closed_tab_index)); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And make sure everything looks right. 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(starting_tab_count + 3, browser()->tab_strip_model()->count()); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(closed_tab_index, browser()->tab_strip_model()->active_index()); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url1_, 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Close a tab, open a new window, close the first window, then restore the 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// tab. It should be in a new window. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If this becomes flaky, use http://crbug.com/14774 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, DISABLED_BasicRestoreFromClosedWindow) { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to url1 then url2. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url1_); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url2_); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new browser. 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); 237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(2u, active_browser_list_->size()); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the final tab in the first browser. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver window_observer( 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_BROWSER_CLOSED, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(0); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_observer.Wait(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(1, 0)); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tab should be in a new window. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = GetBrowser(1); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents(); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // And make sure the URLs match. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url2_, web_contents->GetURL()); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoBack(browser); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url1_, web_contents->GetURL()); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Flakily times out: http://crbug.com/171503 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_DontLoadRestoredTab DISABLED_DontLoadRestoredTab 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_DontLoadRestoredTab DontLoadRestoredTab 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Restore a tab then make sure it doesn't restore again. 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, MAYBE_DontLoadRestoredTab) { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add two tabs 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int starting_tab_count = browser()->tab_strip_model()->count(); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSomeTabs(browser(), 2); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(browser()->tab_strip_model()->count(), starting_tab_count + 2); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close one of them. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(0); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(browser()->tab_strip_model()->count(), starting_tab_count + 1); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore it. 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(0, 0)); 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(browser()->tab_strip_model()->count(), starting_tab_count + 2); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that there's nothing else to restore. 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(chrome::GetRestoreTabType(browser()), 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabStripModelDelegate::RESTORE_NONE); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Open a window with multiple tabs, close a tab, then close the window. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Restore both and make sure the tab goes back into the window. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreWindowAndTab) { 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int starting_tab_count = browser()->tab_strip_model()->count(); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddSomeTabs(browser(), 3); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close one in the middle 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int closed_tab_index = starting_tab_count + 1; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(closed_tab_index); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(starting_tab_count + 2, browser()->tab_strip_model()->count()); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new browser. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); 300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(2u, active_browser_list_->size()); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the first browser. 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_BROWSER_CLOSED, 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::CloseWindow(browser()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(1u, active_browser_list_->size()); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the first window. The expected_tabstrip_index (second argument) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // indicates the expected active tab. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(1, starting_tab_count + 1)); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = GetBrowser(1); 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(starting_tab_count + 2, browser->tab_strip_model()->count()); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the closed tab. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(1, closed_tab_index)); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(starting_tab_count + 3, browser->tab_strip_model()->count()); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url1_, 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents()->GetURL()); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Open a window with two tabs, close both (closing the window), then restore 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// both. Make sure both restored tabs are in the same window. 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreIntoSameWindow) { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), url1_, NEW_FOREGROUND_TAB, 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate the rightmost one to url2_ for easier identification. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), url2_, NEW_FOREGROUND_TAB, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new browser. 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); 338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(2u, active_browser_list_->size()); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close all but one tab in the first browser, left to right. 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (browser()->tab_strip_model()->count() > 1) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(0); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the last tab, closing the browser. 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_BROWSER_CLOSED, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(0); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(1u, active_browser_list_->size()); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the last-closed tab into a new window. 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(1, 0)); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = GetBrowser(1); 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, browser->tab_strip_model()->count()); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url2_, 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents()->GetURL()); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the next-to-last-closed tab into the same window. 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(1, 0)); 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2, browser->tab_strip_model()->count()); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url1_, 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetActiveWebContents()->GetURL()); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that a duplicate history entry is not created when we restore a page 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to an existing SiteInstance. (Bug 1230446) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreWithExistingSiteInstance) { 369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL http_url1(embedded_test_server()->GetURL("/title1.html")); 372eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL http_url2(embedded_test_server()->GetURL("/title2.html")); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int tab_count = browser()->tab_strip_model()->count(); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a tab 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), http_url1, NEW_FOREGROUND_TAB, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(++tab_count, browser()->tab_strip_model()->count()); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to another same-site URL. 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* tab = 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetWebContentsAt(tab_count - 1); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver observer( 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<content::WebContentsDelegate*>(browser())->OpenURLFromTab( 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab, 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::OpenURLParams(http_url2, content::Referrer(), CURRENT_TAB, 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED, false)); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer.Wait(); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the tab. 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(1); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new tab to the original site. Assuming process-per-site is 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // enabled, this will ensure that the SiteInstance used by the restored tab 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will already exist when the restore happens. 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), http_url2, NEW_FOREGROUND_TAB, 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the closed tab. 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(0, tab_count - 1)); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And make sure the URLs match. 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(http_url2, 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoBack(browser()); 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(http_url1, 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// See crbug.com/248574 4157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_WIN) 4167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_RestoreCrossSiteWithExistingSiteInstance DISABLED_RestoreCrossSiteWithExistingSiteInstance 4177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else 4187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MAYBE_RestoreCrossSiteWithExistingSiteInstance RestoreCrossSiteWithExistingSiteInstance 4197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif 4207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the SiteInstances used for entries in a restored tab's history 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are given appropriate max page IDs, even if the renderer for the entry 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// already exists. (Bug 1204135) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, 4257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MAYBE_RestoreCrossSiteWithExistingSiteInstance) { 426eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 428eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL http_url1(embedded_test_server()->GetURL("/title1.html")); 429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GURL http_url2(embedded_test_server()->GetURL("/title2.html")); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int tab_count = browser()->tab_strip_model()->count(); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a tab 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), http_url1, NEW_FOREGROUND_TAB, 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(++tab_count, browser()->tab_strip_model()->count()); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to more URLs, then a cross-site URL. 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), http_url2, CURRENT_TAB, 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), http_url1, CURRENT_TAB, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), url1_, CURRENT_TAB, 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the tab. 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(1); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new tab to the original site. Assuming process-per-site is 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // enabled, this will ensure that the SiteInstance will already exist when 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the user clicks Back in the restored tab. 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), http_url2, NEW_FOREGROUND_TAB, 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the closed tab. 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(0, tab_count - 1)); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And make sure the URLs match. 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(url1_, 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoBack(browser()); 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(http_url1, 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigating to a new URL should clear the forward list, because the max 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page ID of the renderer should have been updated when we restored the tab. 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), http_url2, CURRENT_TAB, 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(chrome::CanGoForward(browser())); 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(http_url2, 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreWindow) { 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new window. 482eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch size_t window_count = active_browser_list_->size(); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); 486eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(++window_count, active_browser_list_->size()); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create two more tabs, one with url1, the other url2. 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int initial_tab_count = browser()->tab_strip_model()->count(); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), url1_, NEW_FOREGROUND_TAB, 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), url2_, NEW_FOREGROUND_TAB, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the window. 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver close_window_observer( 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_BROWSER_CLOSED, 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::CloseWindow(browser()); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_window_observer.Wait(); 503eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(window_count - 1, active_browser_list_->size()); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the window. 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver open_window_observer( 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_BROWSER_OPENED, 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver load_stop_observer( 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NOTIFICATION_LOAD_STOP, 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 512eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch chrome::RestoreTab(active_browser_list_->get(0)); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) open_window_observer.Wait(); 514eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(window_count, active_browser_list_->size()); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Browser* browser = GetBrowser(1); 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(initial_tab_count + 2, browser->tab_strip_model()->count()); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_stop_observer.Wait(); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* restored_tab = 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetWebContentsAt(initial_tab_count); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureTabFinishedRestoring(restored_tab); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url1_, restored_tab->GetURL()); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) restored_tab = 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser->tab_strip_model()->GetWebContentsAt(initial_tab_count + 1); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureTabFinishedRestoring(restored_tab); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url2_, restored_tab->GetURL()); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Restore tab with special URL chrome://credits/ and make sure the page loads 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// properly after restore. See http://crbug.com/31905. 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreTabWithSpecialURL) { 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate new tab to a special URL. 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), GURL(chrome::kChromeUICreditsURL), NEW_FOREGROUND_TAB, 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the tab. 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(1); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the closed tab. 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(0, 1)); 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(1); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureTabFinishedRestoring(tab); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See if content is as expected. 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT( 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::FindInPage(tab, ASCIIToUTF16("webkit"), true, false, NULL, 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL), 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Restore tab with special URL in its navigation history, go back to that 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// entry and see that it loads properly. See http://crbug.com/31905 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreTabWithSpecialURLOnBack) { 557eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 559eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL http_url(embedded_test_server()->GetURL("/title1.html")); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate new tab to a special URL. 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURLWithDisposition( 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), GURL(chrome::kChromeUICreditsURL), NEW_FOREGROUND_TAB, 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Then navigate to a normal URL. 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), http_url); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the tab. 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseTab(1); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the closed tab. 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(RestoreTab(0, 1)); 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(1); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureTabFinishedRestoring(tab); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(http_url, tab->GetURL()); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go back, and see if content is as expected. 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoBack(browser()); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_GT( 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::FindInPage(tab, ASCIIToUTF16("webkit"), true, false, NULL, 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL), 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585