172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/command_line.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/file_path.h" 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h" 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/test/test_timeouts.h" 10513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/defaults.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_switches.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/tab_proxy.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/browser_proxy.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/window_proxy.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui/ui_test.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/net_util.h" 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/test/test_server.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SessionRestoreUITest : public UITest { 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SessionRestoreUITest() : UITest() { 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath path_prefix = test_data_directory_.AppendASCII("session_history"); 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url1_ = net::FilePathToFileURL(path_prefix.AppendASCII("bot1.html")); 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url2_ = net::FilePathToFileURL(path_prefix.AppendASCII("bot2.html")); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch url3_ = net::FilePathToFileURL(path_prefix.AppendASCII("bot3.html")); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void QuitBrowserAndRestore(int expected_tab_count) { 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX) 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen set_shutdown_type(ProxyLauncher::USER_QUIT); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UITest::TearDown(); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch clear_profile_ = false; 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick launch_arguments_.AppendSwitchASCII(switches::kRestoreLastSession, 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick base::IntToString(expected_tab_count)); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UITest::SetUp(); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void CloseWindow(int window_index, int initial_count) { 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy( 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch automation()->GetBrowserWindow(window_index)); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy.get()); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->RunCommand(IDC_CLOSE_WINDOW)); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int window_count; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(initial_count - 1, window_count); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AssertOneWindowWithOneTab() { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int window_count; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, window_count); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AssertWindowHasOneTab(0, &url); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AssertWindowHasOneTab(int window_index, GURL* url) { 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy( 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch automation()->GetBrowserWindow(window_index)); 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy.get()); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int tab_count; 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, tab_count); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int active_tab_index; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->GetActiveTabIndex(&active_tab_index)); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(0, active_tab_index); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab_proxy(browser_proxy->GetActiveTab()); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy.get()); 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(tab_proxy->WaitForTabToBeRestored( 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestTimeouts::action_max_timeout_ms())); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GetCurrentURL(url)); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url1_; 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url2_; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url3_; 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(SessionRestoreUITest); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SessionRestoreUITest, Basic) { 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url1_); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url2_); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch QuitBrowserAndRestore(1); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NOTE: Don't use GetActiveWindow here, when run with the screen locked 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // active windows returns NULL. 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int window_count; 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, window_count); 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy.get()); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab_proxy(browser_proxy->GetTab(0)); 10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(tab_proxy->WaitForTabToBeRestored( 10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestTimeouts::action_max_timeout_ms())); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(url2_, GetActiveTabURL()); 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab_proxy->GoBack()); 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(url1_, GetActiveTabURL()); 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SessionRestoreUITest, RestoresForwardAndBackwardNavs) { 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url1_); 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url2_); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url3_); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> active_tab(GetActiveTab()); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(active_tab.get()); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(active_tab->GoBack()); 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch QuitBrowserAndRestore(1); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NOTE: Don't use GetActiveWindow here, when run with the screen locked 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // active windows returns NULL. 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int window_count; 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, window_count); 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy.get()); 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab_proxy(browser_proxy->GetTab(0)); 13572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(tab_proxy->WaitForTabToBeRestored( 13672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestTimeouts::action_max_timeout_ms())); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(GetActiveTabURL() == url2_); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GoForward()); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(GetActiveTabURL() == url3_); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GoBack()); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(GetActiveTabURL() == url2_); 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GoBack()); 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(GetActiveTabURL() == url1_); 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests that the SiteInstances used for entries in a restored tab's history 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// are given appropriate max page IDs, so that going back to a restored 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// cross-site page and then forward again works. (Bug 1204135) 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SessionRestoreUITest, RestoresCrossSiteForwardAndBackwardNavs) { 1513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick net::TestServer test_server(net::TestServer::TYPE_HTTP, 1523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 1533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(test_server.Start()); 1543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL cross_site_url(test_server.GetURL("files/title2.html")); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Visit URLs on different sites. 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url1_); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(cross_site_url); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url2_); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> active_tab(GetActiveTab()); 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(active_tab.get()); 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(active_tab->GoBack()); 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch QuitBrowserAndRestore(1); 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NOTE: Don't use GetActiveWindow here, when run with the screen locked 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // active windows returns NULL. 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int window_count; 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, window_count); 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy.get()); 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int tab_count; 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, tab_count); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab_proxy(browser_proxy->GetTab(0)); 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy.get()); 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(tab_proxy->WaitForTabToBeRestored( 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestTimeouts::action_max_timeout_ms())); 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Check that back and forward work as expected. 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url; 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GetCurrentURL(&url)); 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(cross_site_url, url); 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GoBack()); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GetCurrentURL(&url)); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(url1_, url); 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GoForward()); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GetCurrentURL(&url)); 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(cross_site_url, url); 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GoForward()); 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy->GetCurrentURL(&url)); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(url2_, url); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SessionRestoreUITest, TwoTabsSecondSelected) { 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url1_); 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NOTE: Don't use GetActiveWindow here, when run with the screen locked 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // active windows returns NULL. 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int window_count; 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, window_count); 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy.get()); 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->AppendTab(url2_)); 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch QuitBrowserAndRestore(2); 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser_proxy = NULL; 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, window_count); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser_proxy = automation()->GetBrowserWindow(0); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int tab_count; 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2, tab_count); 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int active_tab_index; 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->GetActiveTabIndex(&active_tab_index)); 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, active_tab_index); 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab_proxy(browser_proxy->GetActiveTab()); 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy.get()); 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(tab_proxy->WaitForTabToBeRestored( 23272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestTimeouts::action_max_timeout_ms())); 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(url2_, GetActiveTabURL()); 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->ActivateTab(0)); 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab_proxy = browser_proxy->GetActiveTab(); 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy.get()); 23972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(tab_proxy->WaitForTabToBeRestored( 24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestTimeouts::action_max_timeout_ms())); 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(url1_, GetActiveTabURL()); 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Creates two tabs, closes one, quits and makes sure only one tab is restored. 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SessionRestoreUITest, ClosedTabStaysClosed) { 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url1_); 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NOTE: Don't use GetActiveWindow here, when run with the screen locked 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // active windows returns NULL. 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int window_count; 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, window_count); 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy.get()); 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab_proxy(browser_proxy->GetTab(0)); 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab_proxy.get()); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->AppendTab(url2_)); 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> active_tab(browser_proxy->GetActiveTab()); 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(active_tab.get()); 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(active_tab->Close(true)); 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch QuitBrowserAndRestore(1); 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser_proxy = NULL; 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab_proxy = NULL; 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AssertOneWindowWithOneTab(); 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(url1_, GetActiveTabURL()); 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Creates a tabbed browser and popup and makes sure we restore both. 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SessionRestoreUITest, NormalAndPopup) { 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!browser_defaults::kRestorePopups) 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; // Test only applicable if restoring popups. 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url1_); 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure we have one window. 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int window_count; 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1, window_count); 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Open a popup. 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->OpenNewBrowserWindow(Browser::TYPE_POPUP, 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch true)); 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2, window_count); 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> popup(automation()->GetBrowserWindow(1)); 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(popup.get()); 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<TabProxy> tab(popup->GetTab(0)); 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(tab.get()); 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(url1_)); 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Simulate an exit by shuting down the session service. If we don't do this 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the first window close is treated as though the user closed the window 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // and won't be restored. 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(popup->ShutdownSessionService()); 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab = NULL; 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch popup = NULL; 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Restart and make sure we have only one window with one tab and the url 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is url1_. 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch QuitBrowserAndRestore(1); 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2, window_count); 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy1( 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch automation()->GetBrowserWindow(0)); 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy1.get()); 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy2( 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch automation()->GetBrowserWindow(1)); 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy2.get()); 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Browser::Type type1, type2; 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy1->GetType(&type1)); 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy2->GetType(&type2)); 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The order of whether the normal window or popup is first depends upon 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // activation order, which is not necessarily consistant across runs. 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (type1 == Browser::TYPE_NORMAL) { 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(type2, Browser::TYPE_POPUP); 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(type1, Browser::TYPE_POPUP); 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(type2, Browser::TYPE_NORMAL); 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if !defined(OS_MACOSX) 338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// This test doesn't apply to the Mac version; see 3393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// LaunchAnotherBrowserBlockUntilClosed for details. 3403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Launches an app window, closes tabbed browser, launches and makes sure 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// we restore the tabbed browser url. 343513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Flaky: http://crbug.com/29110 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SessionRestoreUITest, 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FLAKY_RestoreAfterClosingTabbedBrowserWithAppAndLaunching) { 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigateToURL(url1_); 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Launch an app. 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool include_testing_id_orig = include_testing_id_; 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch include_testing_id_ = false; 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch clear_profile_ = false; 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CommandLine app_launch_arguments = launch_arguments_; 3543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick app_launch_arguments.AppendSwitchASCII(switches::kApp, url2_.spec()); 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LaunchAnotherBrowserBlockUntilClosed(app_launch_arguments); 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(automation()->WaitForWindowCountToBecome(2)); 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Close the first window. The only window left is the App window. 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CloseWindow(0, 2); 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Restore the session, which should bring back the first window with url1_. 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // First restore the settings so we can connect to the browser. 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch include_testing_id_ = include_testing_id_orig; 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Restore the session with 1 tab. 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch QuitBrowserAndRestore(1); 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AssertOneWindowWithOneTab(); 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(url1_, GetActiveTabURL()); 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif // !OS_MACOSX 3733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Creates two windows, closes one, restores, make sure only one window open. 3753345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(SessionRestoreUITest, TwoWindowsCloseOneRestoreOnlyOne) { 3763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NavigateToURL(url1_); 3773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Make sure we have one window. 3793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int window_count; 3803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 3813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_EQ(1, window_count); 3823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Open a second window. 3843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(automation()->OpenNewBrowserWindow(Browser::TYPE_NORMAL, 3853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick true)); 3863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); 3873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_EQ(2, window_count); 3883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Close it. 3903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CloseWindow(1, 2); 3913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Restart and make sure we have only one window with one tab and the url 3933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // is url1_. 3943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick QuitBrowserAndRestore(1); 3953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AssertOneWindowWithOneTab(); 3973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_EQ(url1_, GetActiveTabURL()); 3993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 4003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Make sure after a restore the number of processes matches that of the number 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of processes running before the restore. This creates a new tab so that 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// we should have two new tabs running. (This test will pass in both 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// process-per-site and process-per-site-instance, because we treat the new tab 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// as a special case in process-per-site-instance so that it only ever uses one 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// process.) 407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Flaky: http://code.google.com/p/chromium/issues/detail?id=52022 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Unfortunately, the fix at http://codereview.chromium.org/6546078 410ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// breaks NTP background image refreshing, so ThemeSource had to revert to 411ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// replacing the existing data source. 412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(SessionRestoreUITest, FLAKY_ShareProcessesOnRestore) { 4133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (ProxyLauncher::in_process_renderer()) { 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // No point in running this test in single process mode. 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy.get() != NULL); 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int tab_count; 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create two new tabs. 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->RunCommand(IDC_NEW_TAB)); 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->RunCommand(IDC_NEW_TAB)); 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int new_tab_count; 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->GetTabCount(&new_tab_count)); 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(tab_count + 2, new_tab_count); 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int expected_process_count = 0; 43172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(GetBrowserProcessCount(&expected_process_count)); 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int expected_tab_count = new_tab_count; 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Restart. 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser_proxy = NULL; 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch QuitBrowserAndRestore(3); 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Wait for each tab to finish being restored, then make sure the process 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // count matches. 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser_proxy = automation()->GetBrowserWindow(0); 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy.get() != NULL); 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(expected_tab_count, tab_count); 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen for (int i = 0; i < expected_tab_count; ++i) { 44672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<TabProxy> tab_proxy(browser_proxy->GetTab(i)); 44772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(tab_proxy.get() != NULL); 44872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(tab_proxy->WaitForTabToBeRestored( 44972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestTimeouts::action_max_timeout_ms())); 45072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int process_count = 0; 45372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(GetBrowserProcessCount(&process_count)); 45472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(expected_process_count, process_count); 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 458