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