Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(119)

Side by Side Diff: chrome/browser/lifetime/browser_close_manager_browsertest.cc

Issue 25603004: Leave apps running on Windows and Linux when quitting Chrome from the wrench menu. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "chrome/browser/background/background_mode_manager.h"
8 #include "chrome/browser/browser_process.h" 9 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/browser_shutdown.h" 10 #include "chrome/browser/browser_shutdown.h"
10 #include "chrome/browser/chrome_notification_types.h" 11 #include "chrome/browser/chrome_notification_types.h"
11 #include "chrome/browser/lifetime/application_lifetime.h" 12 #include "chrome/browser/lifetime/application_lifetime.h"
12 #include "chrome/browser/lifetime/browser_close_manager.h" 13 #include "chrome/browser/lifetime/browser_close_manager.h"
13 #include "chrome/browser/net/url_request_mock_util.h" 14 #include "chrome/browser/net/url_request_mock_util.h"
14 #include "chrome/browser/prefs/session_startup_pref.h" 15 #include "chrome/browser/prefs/session_startup_pref.h"
15 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/profiles/profile_manager.h" 17 #include "chrome/browser/profiles/profile_manager.h"
17 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" 18 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h"
18 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" 19 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h"
19 #include "chrome/browser/ui/browser.h" 20 #include "chrome/browser/ui/browser.h"
21 #include "chrome/browser/ui/browser_commands.h"
20 #include "chrome/browser/ui/browser_iterator.h" 22 #include "chrome/browser/ui/browser_iterator.h"
21 #include "chrome/browser/ui/browser_window.h" 23 #include "chrome/browser/ui/browser_window.h"
22 #include "chrome/browser/ui/tabs/tab_strip_model.h" 24 #include "chrome/browser/ui/tabs/tab_strip_model.h"
23 #include "chrome/common/chrome_switches.h" 25 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/url_constants.h" 26 #include "chrome/common/url_constants.h"
25 #include "chrome/test/base/in_process_browser_test.h" 27 #include "chrome/test/base/in_process_browser_test.h"
26 #include "chrome/test/base/ui_test_utils.h" 28 #include "chrome/test/base/ui_test_utils.h"
27 #include "content/public/browser/browser_context.h" 29 #include "content/public/browser/browser_context.h"
28 #include "content/public/browser/download_item.h" 30 #include "content/public/browser/download_item.h"
29 #include "content/public/browser/download_manager.h" 31 #include "content/public/browser/download_manager.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 class TestBrowserCloseManager : public BrowserCloseManager { 121 class TestBrowserCloseManager : public BrowserCloseManager {
120 public: 122 public:
121 enum UserChoice { 123 enum UserChoice {
122 USER_CHOICE_USER_CANCELS_CLOSE, 124 USER_CHOICE_USER_CANCELS_CLOSE,
123 USER_CHOICE_USER_ALLOWS_CLOSE, 125 USER_CHOICE_USER_ALLOWS_CLOSE,
124 }; 126 };
125 127
126 static void AttemptClose(UserChoice user_choice) { 128 static void AttemptClose(UserChoice user_choice) {
127 scoped_refptr<BrowserCloseManager> browser_close_manager = 129 scoped_refptr<BrowserCloseManager> browser_close_manager =
128 new TestBrowserCloseManager(user_choice); 130 new TestBrowserCloseManager(user_choice);
131 browser_shutdown::SetTryingToQuit(true);
129 browser_close_manager->StartClosingBrowsers(); 132 browser_close_manager->StartClosingBrowsers();
130 } 133 }
131 134
132 protected: 135 protected:
133 virtual ~TestBrowserCloseManager() {} 136 virtual ~TestBrowserCloseManager() {}
134 137
135 virtual void ConfirmCloseWithPendingDownloads( 138 virtual void ConfirmCloseWithPendingDownloads(
136 int download_count, 139 int download_count,
137 const base::Callback<void(bool)>& callback) OVERRIDE { 140 const base::Callback<void(bool)>& callback) OVERRIDE {
138 switch (user_choice_) { 141 switch (user_choice_) {
(...skipping 10 matching lines...) Expand all
149 152
150 private: 153 private:
151 explicit TestBrowserCloseManager(UserChoice user_choice) 154 explicit TestBrowserCloseManager(UserChoice user_choice)
152 : user_choice_(user_choice) {} 155 : user_choice_(user_choice) {}
153 156
154 UserChoice user_choice_; 157 UserChoice user_choice_;
155 158
156 DISALLOW_COPY_AND_ASSIGN(TestBrowserCloseManager); 159 DISALLOW_COPY_AND_ASSIGN(TestBrowserCloseManager);
157 }; 160 };
158 161
162 class FakeBackgroundModeManager : public BackgroundModeManager {
163 public:
164 FakeBackgroundModeManager()
165 : BackgroundModeManager(
166 CommandLine::ForCurrentProcess(),
167 &g_browser_process->profile_manager()->GetProfileInfoCache()),
168 suspended_(false) {}
169
170 virtual void SuspendBackgroundMode() OVERRIDE {
171 BackgroundModeManager::SuspendBackgroundMode();
172 suspended_ = true;
173 }
174
175 virtual void ResumeBackgroundMode() OVERRIDE {
176 BackgroundModeManager::ResumeBackgroundMode();
177 suspended_ = false;
178 }
179
180 bool IsBackgroundModeSuspended() {
181 return suspended_;
182 }
183
184 private:
185 bool suspended_;
186 };
187
159 } // namespace 188 } // namespace
160 189
161 class BrowserCloseManagerBrowserTest 190 class BrowserCloseManagerBrowserTest
162 : public InProcessBrowserTest, 191 : public InProcessBrowserTest,
163 public testing::WithParamInterface<bool> { 192 public testing::WithParamInterface<bool> {
164 protected: 193 protected:
165 virtual void SetUpOnMainThread() OVERRIDE { 194 virtual void SetUpOnMainThread() OVERRIDE {
166 InProcessBrowserTest::SetUpOnMainThread(); 195 InProcessBrowserTest::SetUpOnMainThread();
167 SessionStartupPref::SetStartupPref( 196 SessionStartupPref::SetStartupPref(
168 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); 197 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST));
(...skipping 27 matching lines...) Expand all
196 std::vector<Browser*> browsers_; 225 std::vector<Browser*> browsers_;
197 AppModalDialogObserver dialogs_; 226 AppModalDialogObserver dialogs_;
198 }; 227 };
199 228
200 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { 229 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) {
201 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 230 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
202 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 231 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
203 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 232 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
204 RepeatedNotificationObserver cancel_observer( 233 RepeatedNotificationObserver cancel_observer(
205 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 234 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
206 chrome::CloseAllBrowsers(); 235 chrome::CloseAllBrowsersAndQuit();
207 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 236 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
208 cancel_observer.Wait(); 237 cancel_observer.Wait();
209 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 238 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
210 EXPECT_EQ(1, browser()->tab_strip_model()->count()); 239 EXPECT_EQ(1, browser()->tab_strip_model()->count());
211 240
212 RepeatedNotificationObserver close_observer( 241 RepeatedNotificationObserver close_observer(
213 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 242 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
214 chrome::CloseAllBrowsers(); 243 chrome::CloseAllBrowsersAndQuit();
215 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 244 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
216 close_observer.Wait(); 245 close_observer.Wait();
217 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 246 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
218 EXPECT_TRUE(chrome::BrowserIterator().done()); 247 EXPECT_TRUE(chrome::BrowserIterator().done());
219 } 248 }
220 249
221 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 250 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
222 TestShutdownMoreThanOnce) { 251 TestShutdownMoreThanOnce) {
223 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 252 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
224 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 253 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
225 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 254 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
226 RepeatedNotificationObserver cancel_observer( 255 RepeatedNotificationObserver cancel_observer(
227 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 256 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
228 chrome::CloseAllBrowsers(); 257 chrome::CloseAllBrowsersAndQuit();
229 chrome::CloseAllBrowsers(); 258 chrome::CloseAllBrowsersAndQuit();
230 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 259 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
231 cancel_observer.Wait(); 260 cancel_observer.Wait();
232 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 261 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
233 EXPECT_EQ(1, browser()->tab_strip_model()->count()); 262 EXPECT_EQ(1, browser()->tab_strip_model()->count());
234 263
235 RepeatedNotificationObserver close_observer( 264 RepeatedNotificationObserver close_observer(
236 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 265 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
237 chrome::CloseAllBrowsers(); 266 chrome::CloseAllBrowsersAndQuit();
238 chrome::CloseAllBrowsers(); 267 chrome::CloseAllBrowsersAndQuit();
239 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 268 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
240 close_observer.Wait(); 269 close_observer.Wait();
241 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 270 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
242 EXPECT_TRUE(chrome::BrowserIterator().done()); 271 EXPECT_TRUE(chrome::BrowserIterator().done());
243 } 272 }
244 273
245 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { 274 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) {
246 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 275 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
247 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 276 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
248 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 277 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
249 AddBlankTabAndShow(browser()); 278 AddBlankTabAndShow(browser());
250 ASSERT_NO_FATAL_FAILURE( 279 ASSERT_NO_FATAL_FAILURE(
251 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); 280 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)));
252 RepeatedNotificationObserver cancel_observer( 281 RepeatedNotificationObserver cancel_observer(
253 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 282 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
254 chrome::CloseAllBrowsers(); 283 chrome::CloseAllBrowsersAndQuit();
255 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 284 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
256 cancel_observer.Wait(); 285 cancel_observer.Wait();
257 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 286 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
258 287
259 browser()->tab_strip_model() 288 browser()->tab_strip_model()
260 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); 289 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE);
261 content::TestNavigationObserver navigation_observer( 290 content::TestNavigationObserver navigation_observer(
262 browser()->tab_strip_model()->GetActiveWebContents(), 1); 291 browser()->tab_strip_model()->GetActiveWebContents(), 1);
263 ASSERT_NO_FATAL_FAILURE( 292 ASSERT_NO_FATAL_FAILURE(
264 NavigateToURLWithDisposition(browser(), 293 NavigateToURLWithDisposition(browser(),
265 GURL(chrome::kChromeUIVersionURL), 294 GURL(chrome::kChromeUIVersionURL),
266 CURRENT_TAB, 295 CURRENT_TAB,
267 ui_test_utils::BROWSER_TEST_NONE)); 296 ui_test_utils::BROWSER_TEST_NONE));
268 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 297 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
269 navigation_observer.Wait(); 298 navigation_observer.Wait();
270 299
271 RepeatedNotificationObserver close_observer( 300 RepeatedNotificationObserver close_observer(
272 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 301 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
273 chrome::CloseAllBrowsers(); 302 chrome::CloseAllBrowsersAndQuit();
274 close_observer.Wait(); 303 close_observer.Wait();
275 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 304 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
276 EXPECT_TRUE(chrome::BrowserIterator().done()); 305 EXPECT_TRUE(chrome::BrowserIterator().done());
277 } 306 }
278 307
279 // Test that the tab closed after the aborted shutdown attempt is not re-opened 308 // Test that the tab closed after the aborted shutdown attempt is not re-opened
280 // when restoring the session. 309 // when restoring the session.
281 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) { 310 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) {
282 // The testing framework launches Chrome with about:blank as args. 311 // The testing framework launches Chrome with about:blank as args.
283 EXPECT_EQ(2, browser()->tab_strip_model()->count()); 312 EXPECT_EQ(2, browser()->tab_strip_model()->count());
(...skipping 10 matching lines...) Expand all
294 browsers_.push_back(CreateBrowser(browser()->profile())); 323 browsers_.push_back(CreateBrowser(browser()->profile()));
295 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 324 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
296 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 325 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
297 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 326 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
298 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 327 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
299 328
300 // Cancel shutdown on the first beforeunload event. 329 // Cancel shutdown on the first beforeunload event.
301 { 330 {
302 RepeatedNotificationObserver cancel_observer( 331 RepeatedNotificationObserver cancel_observer(
303 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 332 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
304 chrome::CloseAllBrowsers(); 333 chrome::CloseAllBrowsersAndQuit();
305 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 334 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
306 cancel_observer.Wait(); 335 cancel_observer.Wait();
307 } 336 }
308 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 337 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
309 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 338 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
310 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 339 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
311 340
312 // Cancel shutdown on the second beforeunload event. 341 // Cancel shutdown on the second beforeunload event.
313 { 342 {
314 RepeatedNotificationObserver cancel_observer( 343 RepeatedNotificationObserver cancel_observer(
315 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 344 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
316 chrome::CloseAllBrowsers(); 345 chrome::CloseAllBrowsersAndQuit();
317 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 346 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
318 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 347 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
319 cancel_observer.Wait(); 348 cancel_observer.Wait();
320 } 349 }
321 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 350 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
322 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 351 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
323 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 352 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
324 353
325 // Allow shutdown for both beforeunload events. 354 // Allow shutdown for both beforeunload events.
326 RepeatedNotificationObserver close_observer( 355 RepeatedNotificationObserver close_observer(
327 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 356 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
328 chrome::CloseAllBrowsers(); 357 chrome::CloseAllBrowsersAndQuit();
329 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 358 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
330 close_observer.Wait(); 359 close_observer.Wait();
331 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 360 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
332 EXPECT_TRUE(chrome::BrowserIterator().done()); 361 EXPECT_TRUE(chrome::BrowserIterator().done());
333 } 362 }
334 363
335 // Test that tabs in the same window with a beforeunload event that hangs are 364 // Test that tabs in the same window with a beforeunload event that hangs are
336 // treated the same as the user accepting the close, but do not close the tab 365 // treated the same as the user accepting the close, but do not close the tab
337 // early. 366 // early.
338 // Test is flaky on windows, disabled. See http://crbug.com/276366 367 // Test is flaky on windows, disabled. See http://crbug.com/276366
(...skipping 11 matching lines...) Expand all
350 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 379 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
351 AddBlankTabAndShow(browsers_[0]); 380 AddBlankTabAndShow(browsers_[0]);
352 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 381 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
353 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 382 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
354 AddBlankTabAndShow(browsers_[0]); 383 AddBlankTabAndShow(browsers_[0]);
355 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 384 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
356 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 385 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
357 386
358 RepeatedNotificationObserver cancel_observer( 387 RepeatedNotificationObserver cancel_observer(
359 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 388 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
360 chrome::CloseAllBrowsers(); 389 chrome::CloseAllBrowsersAndQuit();
361 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 390 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
362 cancel_observer.Wait(); 391 cancel_observer.Wait();
363 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 392 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
364 // All tabs should still be open. 393 // All tabs should still be open.
365 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); 394 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count());
366 395
367 RepeatedNotificationObserver close_observer( 396 RepeatedNotificationObserver close_observer(
368 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 397 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
369 chrome::CloseAllBrowsers(); 398 chrome::CloseAllBrowsersAndQuit();
370 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 399 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
371 close_observer.Wait(); 400 close_observer.Wait();
372 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 401 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
373 EXPECT_TRUE(chrome::BrowserIterator().done()); 402 EXPECT_TRUE(chrome::BrowserIterator().done());
374 } 403 }
375 404
376 // Test that tabs in different windows with a beforeunload event that hangs are 405 // Test that tabs in different windows with a beforeunload event that hangs are
377 // treated the same as the user accepting the close, but do not close the tab 406 // treated the same as the user accepting the close, but do not close the tab
378 // early. 407 // early.
379 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 408 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
380 TestHangInBeforeUnloadMultipleWindows) { 409 TestHangInBeforeUnloadMultipleWindows) {
381 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 410 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
382 browsers_.push_back(CreateBrowser(browser()->profile())); 411 browsers_.push_back(CreateBrowser(browser()->profile()));
383 browsers_.push_back(CreateBrowser(browser()->profile())); 412 browsers_.push_back(CreateBrowser(browser()->profile()));
384 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 413 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
385 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 414 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
386 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 415 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
387 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 416 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
388 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 417 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
389 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 418 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html")));
390 419
391 RepeatedNotificationObserver cancel_observer( 420 RepeatedNotificationObserver cancel_observer(
392 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 421 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
393 chrome::CloseAllBrowsers(); 422 chrome::CloseAllBrowsersAndQuit();
394 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 423 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
395 cancel_observer.Wait(); 424 cancel_observer.Wait();
396 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 425 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
397 // All windows should still be open. 426 // All windows should still be open.
398 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 427 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
399 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 428 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
400 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); 429 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count());
401 430
402 RepeatedNotificationObserver close_observer( 431 RepeatedNotificationObserver close_observer(
403 chrome::NOTIFICATION_BROWSER_CLOSED, 3); 432 chrome::NOTIFICATION_BROWSER_CLOSED, 3);
404 chrome::CloseAllBrowsers(); 433 chrome::CloseAllBrowsersAndQuit();
405 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 434 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
406 close_observer.Wait(); 435 close_observer.Wait();
407 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 436 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
408 EXPECT_TRUE(chrome::BrowserIterator().done()); 437 EXPECT_TRUE(chrome::BrowserIterator().done());
409 } 438 }
410 439
411 // Test that a window created during shutdown is closed. 440 // Test that a window created during shutdown is closed.
412 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 441 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
413 TestAddWindowDuringShutdown) { 442 TestAddWindowDuringShutdown) {
414 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 443 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
415 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 444 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
416 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 445 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
417 446
418 RepeatedNotificationObserver close_observer( 447 RepeatedNotificationObserver close_observer(
419 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 448 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
420 chrome::CloseAllBrowsers(); 449 chrome::CloseAllBrowsersAndQuit();
421 browsers_.push_back(CreateBrowser(browser()->profile())); 450 browsers_.push_back(CreateBrowser(browser()->profile()));
422 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 451 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
423 close_observer.Wait(); 452 close_observer.Wait();
424 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 453 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
425 EXPECT_TRUE(chrome::BrowserIterator().done()); 454 EXPECT_TRUE(chrome::BrowserIterator().done());
426 } 455 }
427 456
428 // Test that a window created during shutdown with a beforeunload handler can 457 // Test that a window created during shutdown with a beforeunload handler can
429 // cancel the shutdown. 458 // cancel the shutdown.
430 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 459 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
431 TestAddWindowWithBeforeUnloadDuringShutdown) { 460 TestAddWindowWithBeforeUnloadDuringShutdown) {
432 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 461 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
433 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 462 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
434 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 463 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
435 464
436 RepeatedNotificationObserver cancel_observer( 465 RepeatedNotificationObserver cancel_observer(
437 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 466 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
438 chrome::CloseAllBrowsers(); 467 chrome::CloseAllBrowsersAndQuit();
439 browsers_.push_back(CreateBrowser(browser()->profile())); 468 browsers_.push_back(CreateBrowser(browser()->profile()));
440 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 469 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
441 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 470 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
442 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 471 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
443 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 472 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
444 cancel_observer.Wait(); 473 cancel_observer.Wait();
445 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 474 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
446 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 475 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
447 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 476 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
448 477
449 // Allow shutdown for both beforeunload dialogs. 478 // Allow shutdown for both beforeunload dialogs.
450 RepeatedNotificationObserver close_observer( 479 RepeatedNotificationObserver close_observer(
451 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 480 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
452 chrome::CloseAllBrowsers(); 481 chrome::CloseAllBrowsersAndQuit();
453 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 482 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
454 close_observer.Wait(); 483 close_observer.Wait();
455 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 484 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
456 EXPECT_TRUE(chrome::BrowserIterator().done()); 485 EXPECT_TRUE(chrome::BrowserIterator().done());
457 } 486 }
458 487
459 // Test that tabs added during shutdown are closed. 488 // Test that tabs added during shutdown are closed.
460 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 489 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
461 TestAddTabDuringShutdown) { 490 TestAddTabDuringShutdown) {
462 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 491 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
463 browsers_.push_back(CreateBrowser(browser()->profile())); 492 browsers_.push_back(CreateBrowser(browser()->profile()));
464 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 493 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
465 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 494 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
466 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 495 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
467 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 496 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
468 497
469 RepeatedNotificationObserver close_observer( 498 RepeatedNotificationObserver close_observer(
470 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 499 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
471 chrome::CloseAllBrowsers(); 500 chrome::CloseAllBrowsersAndQuit();
472 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 501 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
473 AddBlankTabAndShow(browsers_[0]); 502 AddBlankTabAndShow(browsers_[0]);
474 AddBlankTabAndShow(browsers_[1]); 503 AddBlankTabAndShow(browsers_[1]);
475 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 504 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
476 close_observer.Wait(); 505 close_observer.Wait();
477 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 506 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
478 EXPECT_TRUE(chrome::BrowserIterator().done()); 507 EXPECT_TRUE(chrome::BrowserIterator().done());
479 } 508 }
480 509
481 // Test that tabs created during shutdown with beforeunload handlers can cancel 510 // Test that tabs created during shutdown with beforeunload handlers can cancel
482 // the shutdown. 511 // the shutdown.
483 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 512 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
484 TestAddTabWithBeforeUnloadDuringShutdown) { 513 TestAddTabWithBeforeUnloadDuringShutdown) {
485 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 514 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
486 browsers_.push_back(CreateBrowser(browser()->profile())); 515 browsers_.push_back(CreateBrowser(browser()->profile()));
487 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 516 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
488 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 517 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
489 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 518 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
490 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 519 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
491 RepeatedNotificationObserver cancel_observer( 520 RepeatedNotificationObserver cancel_observer(
492 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 521 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
493 chrome::CloseAllBrowsers(); 522 chrome::CloseAllBrowsersAndQuit();
494 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 523 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
495 AddBlankTabAndShow(browsers_[0]); 524 AddBlankTabAndShow(browsers_[0]);
496 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 525 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
497 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 526 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
498 AddBlankTabAndShow(browsers_[1]); 527 AddBlankTabAndShow(browsers_[1]);
499 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 528 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
500 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 529 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
501 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 530 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
502 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 531 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
503 cancel_observer.Wait(); 532 cancel_observer.Wait();
504 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 533 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
505 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); 534 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count());
506 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); 535 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count());
507 536
508 RepeatedNotificationObserver close_observer( 537 RepeatedNotificationObserver close_observer(
509 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 538 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
510 chrome::CloseAllBrowsers(); 539 chrome::CloseAllBrowsersAndQuit();
511 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 540 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
512 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 541 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
513 542
514 close_observer.Wait(); 543 close_observer.Wait();
515 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 544 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
516 EXPECT_TRUE(chrome::BrowserIterator().done()); 545 EXPECT_TRUE(chrome::BrowserIterator().done());
517 } 546 }
518 547
519 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 548 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
520 TestCloseTabDuringShutdown) { 549 TestCloseTabDuringShutdown) {
521 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 550 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
522 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 551 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
523 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 552 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
524 RepeatedNotificationObserver cancel_observer( 553 RepeatedNotificationObserver cancel_observer(
525 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 554 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
526 chrome::CloseAllBrowsers(); 555 chrome::CloseAllBrowsersAndQuit();
527 556
528 browsers_.push_back(CreateBrowser(browser()->profile())); 557 browsers_.push_back(CreateBrowser(browser()->profile()));
529 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 558 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
530 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 559 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
531 browsers_[1]->tab_strip_model()->CloseAllTabs(); 560 browsers_[1]->tab_strip_model()->CloseAllTabs();
532 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 561 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
533 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 562 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
534 cancel_observer.Wait(); 563 cancel_observer.Wait();
535 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 564 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
536 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 565 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
537 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 566 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
538 567
539 RepeatedNotificationObserver close_observer( 568 RepeatedNotificationObserver close_observer(
540 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 569 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
541 chrome::CloseAllBrowsers(); 570 chrome::CloseAllBrowsersAndQuit();
542 browsers_[1]->tab_strip_model()->CloseAllTabs(); 571 browsers_[1]->tab_strip_model()->CloseAllTabs();
543 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 572 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
544 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 573 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
545 574
546 close_observer.Wait(); 575 close_observer.Wait();
547 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 576 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
548 EXPECT_TRUE(chrome::BrowserIterator().done()); 577 EXPECT_TRUE(chrome::BrowserIterator().done());
549 } 578 }
550 579
551 // Test is flaky on windows, disabled. See http://crbug.com/276366 580 // Test is flaky on windows, disabled. See http://crbug.com/276366
552 #if defined(OS_WIN) 581 #if defined(OS_WIN)
553 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ 582 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \
554 DISABLED_TestOpenAndCloseWindowDuringShutdown 583 DISABLED_TestOpenAndCloseWindowDuringShutdown
555 #else 584 #else
556 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ 585 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \
557 TestOpenAndCloseWindowDuringShutdown 586 TestOpenAndCloseWindowDuringShutdown
558 #endif 587 #endif
559 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 588 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
560 MAYBE_TestOpenAndCloseWindowDuringShutdown) { 589 MAYBE_TestOpenAndCloseWindowDuringShutdown) {
561 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 590 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
562 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 591 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
563 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 592 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
564 RepeatedNotificationObserver cancel_observer( 593 RepeatedNotificationObserver cancel_observer(
565 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 594 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
566 chrome::CloseAllBrowsers(); 595 chrome::CloseAllBrowsersAndQuit();
567 596
568 browsers_.push_back(CreateBrowser(browser()->profile())); 597 browsers_.push_back(CreateBrowser(browser()->profile()));
569 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 598 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
570 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 599 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
571 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); 600 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
572 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 601 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
573 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 602 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
574 cancel_observer.Wait(); 603 cancel_observer.Wait();
575 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 604 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
576 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 605 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
577 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 606 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
578 607
579 RepeatedNotificationObserver close_observer( 608 RepeatedNotificationObserver close_observer(
580 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 609 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
581 chrome::CloseAllBrowsers(); 610 chrome::CloseAllBrowsersAndQuit();
582 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); 611 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
583 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 612 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
584 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 613 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
585 614
586 close_observer.Wait(); 615 close_observer.Wait();
587 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 616 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
588 EXPECT_TRUE(chrome::BrowserIterator().done()); 617 EXPECT_TRUE(chrome::BrowserIterator().done());
589 } 618 }
590 619
591 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 620 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
592 TestCloseWindowDuringShutdown) { 621 TestCloseWindowDuringShutdown) {
593 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 622 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
594 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 623 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
595 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 624 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
596 browsers_.push_back(CreateBrowser(browser()->profile())); 625 browsers_.push_back(CreateBrowser(browser()->profile()));
597 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 626 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
598 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 627 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
599 RepeatedNotificationObserver cancel_observer( 628 RepeatedNotificationObserver cancel_observer(
600 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 629 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
601 chrome::CloseAllBrowsers(); 630 chrome::CloseAllBrowsersAndQuit();
602 631
603 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); 632 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow());
604 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 633 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
605 cancel_observer.Wait(); 634 cancel_observer.Wait();
606 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 635 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
607 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 636 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
608 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 637 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
609 638
610 RepeatedNotificationObserver close_observer( 639 RepeatedNotificationObserver close_observer(
611 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 640 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
612 chrome::CloseAllBrowsers(); 641 chrome::CloseAllBrowsersAndQuit();
613 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); 642 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow());
614 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 643 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
615 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 644 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
616 645
617 close_observer.Wait(); 646 close_observer.Wait();
618 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 647 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
619 EXPECT_TRUE(chrome::BrowserIterator().done()); 648 EXPECT_TRUE(chrome::BrowserIterator().done());
620 } 649 }
621 650
622 // Test shutdown with a download in progress. 651 // Test shutdown with a download in progress.
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 TestBrowserCloseManager::AttemptClose( 740 TestBrowserCloseManager::AttemptClose(
712 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); 741 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE);
713 close_observer.Wait(); 742 close_observer.Wait();
714 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 743 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
715 EXPECT_TRUE(chrome::BrowserIterator().done()); 744 EXPECT_TRUE(chrome::BrowserIterator().done());
716 } 745 }
717 746
718 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest, 747 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest,
719 BrowserCloseManagerBrowserTest, 748 BrowserCloseManagerBrowserTest,
720 testing::Bool()); 749 testing::Bool());
750
751 class BrowserCloseManagerWithBackgroundModeBrowserTest
752 : public BrowserCloseManagerBrowserTest {
753 public:
754 virtual void SetUpOnMainThread() OVERRIDE {
755 BrowserCloseManagerBrowserTest::SetUpOnMainThread();
756 g_browser_process->set_background_mode_manager_for_test(
757 scoped_ptr<BackgroundModeManager>(new FakeBackgroundModeManager));
758 }
759
760 bool IsBackgroundModeSuspended() {
761 return static_cast<FakeBackgroundModeManager*>(
762 g_browser_process->background_mode_manager())
763 ->IsBackgroundModeSuspended();
764 }
765 };
sky 2013/10/22 15:41:18 private:DISALLOW...
Sam McNally 2013/10/22 22:58:29 Done.
766
767 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
sky 2013/10/22 15:41:18 Please add descriptions as to what tests do. That
Sam McNally 2013/10/22 22:58:29 Done.
768 CloseAllBrowsersWithBackgroundMode) {
769 EXPECT_FALSE(IsBackgroundModeSuspended());
770 Profile* profile = browser()->profile();
771 {
772 RepeatedNotificationObserver close_observer(
773 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
774 chrome::StartKeepAlive();
775 chrome::CloseAllBrowsers();
776 close_observer.Wait();
777 }
778 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
779 EXPECT_TRUE(chrome::BrowserIterator().done());
780 EXPECT_TRUE(IsBackgroundModeSuspended());
781
782 // Background mode should be resumed when a new browser window is opened.
783 ui_test_utils::BrowserAddedObserver new_browser_observer;
784 chrome::NewEmptyWindow(profile, chrome::HOST_DESKTOP_TYPE_NATIVE);
785 new_browser_observer.WaitForSingleNewBrowser();
786 chrome::EndKeepAlive();
787 EXPECT_FALSE(IsBackgroundModeSuspended());
788 RepeatedNotificationObserver close_observer(
789 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
790
791 // Background mode should not be suspended when quitting.
792 chrome::CloseAllBrowsersAndQuit();
793 close_observer.Wait();
794 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
795 EXPECT_TRUE(chrome::BrowserIterator().done());
796 EXPECT_FALSE(IsBackgroundModeSuspended());
797
798 }
799
800 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
801 CloseSingleBrowserWithBackgroundMode) {
802 RepeatedNotificationObserver close_observer(
803 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
804 EXPECT_FALSE(IsBackgroundModeSuspended());
805 browser()->window()->Close();
806 close_observer.Wait();
807 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
808 EXPECT_TRUE(chrome::BrowserIterator().done());
809 EXPECT_FALSE(IsBackgroundModeSuspended());
810 }
811
812 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
813 CloseAllBrowsersWithNoOpenBrowsersWithBackgroundMode) {
814 RepeatedNotificationObserver close_observer(
815 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
816 EXPECT_FALSE(IsBackgroundModeSuspended());
817 chrome::StartKeepAlive();
818 browser()->window()->Close();
819 close_observer.Wait();
820 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
821 EXPECT_TRUE(chrome::BrowserIterator().done());
822 EXPECT_FALSE(IsBackgroundModeSuspended());
823
824 chrome::CloseAllBrowsers();
825 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
826 EXPECT_TRUE(chrome::BrowserIterator().done());
827 EXPECT_TRUE(IsBackgroundModeSuspended());
828 }
829
830 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
831 BrowserCloseManagerWithBackgroundModeBrowserTest,
832 testing::Bool());
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698