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

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, 1 month 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
« no previous file with comments | « chrome/browser/lifetime/browser_close_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/download/chrome_download_manager_delegate.h" 12 #include "chrome/browser/download/chrome_download_manager_delegate.h"
12 #include "chrome/browser/download/download_service.h" 13 #include "chrome/browser/download/download_service.h"
13 #include "chrome/browser/download/download_service_factory.h" 14 #include "chrome/browser/download/download_service_factory.h"
14 #include "chrome/browser/lifetime/application_lifetime.h" 15 #include "chrome/browser/lifetime/application_lifetime.h"
15 #include "chrome/browser/lifetime/browser_close_manager.h" 16 #include "chrome/browser/lifetime/browser_close_manager.h"
16 #include "chrome/browser/net/url_request_mock_util.h" 17 #include "chrome/browser/net/url_request_mock_util.h"
17 #include "chrome/browser/prefs/session_startup_pref.h" 18 #include "chrome/browser/prefs/session_startup_pref.h"
18 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/profiles/profile_manager.h" 20 #include "chrome/browser/profiles/profile_manager.h"
20 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h" 21 #include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h"
21 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h" 22 #include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h"
22 #include "chrome/browser/ui/browser.h" 23 #include "chrome/browser/ui/browser.h"
24 #include "chrome/browser/ui/browser_commands.h"
23 #include "chrome/browser/ui/browser_iterator.h" 25 #include "chrome/browser/ui/browser_iterator.h"
24 #include "chrome/browser/ui/browser_window.h" 26 #include "chrome/browser/ui/browser_window.h"
25 #include "chrome/browser/ui/tabs/tab_strip_model.h" 27 #include "chrome/browser/ui/tabs/tab_strip_model.h"
26 #include "chrome/common/chrome_switches.h" 28 #include "chrome/common/chrome_switches.h"
27 #include "chrome/common/url_constants.h" 29 #include "chrome/common/url_constants.h"
28 #include "chrome/test/base/in_process_browser_test.h" 30 #include "chrome/test/base/in_process_browser_test.h"
29 #include "chrome/test/base/ui_test_utils.h" 31 #include "chrome/test/base/ui_test_utils.h"
30 #include "content/public/browser/browser_context.h" 32 #include "content/public/browser/browser_context.h"
31 #include "content/public/browser/download_item.h" 33 #include "content/public/browser/download_item.h"
32 #include "content/public/browser/download_manager.h" 34 #include "content/public/browser/download_manager.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 public: 126 public:
125 enum UserChoice { 127 enum UserChoice {
126 USER_CHOICE_USER_CANCELS_CLOSE, 128 USER_CHOICE_USER_CANCELS_CLOSE,
127 USER_CHOICE_USER_ALLOWS_CLOSE, 129 USER_CHOICE_USER_ALLOWS_CLOSE,
128 NO_USER_CHOICE 130 NO_USER_CHOICE
129 }; 131 };
130 132
131 static void AttemptClose(UserChoice user_choice) { 133 static void AttemptClose(UserChoice user_choice) {
132 scoped_refptr<BrowserCloseManager> browser_close_manager = 134 scoped_refptr<BrowserCloseManager> browser_close_manager =
133 new TestBrowserCloseManager(user_choice); 135 new TestBrowserCloseManager(user_choice);
136 browser_shutdown::SetTryingToQuit(true);
134 browser_close_manager->StartClosingBrowsers(); 137 browser_close_manager->StartClosingBrowsers();
135 } 138 }
136 139
137 protected: 140 protected:
138 virtual ~TestBrowserCloseManager() {} 141 virtual ~TestBrowserCloseManager() {}
139 142
140 virtual void ConfirmCloseWithPendingDownloads( 143 virtual void ConfirmCloseWithPendingDownloads(
141 int download_count, 144 int download_count,
142 const base::Callback<void(bool)>& callback) OVERRIDE { 145 const base::Callback<void(bool)>& callback) OVERRIDE {
143 EXPECT_NE(NO_USER_CHOICE, user_choice_); 146 EXPECT_NE(NO_USER_CHOICE, user_choice_);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 callback.Run(target_path, 191 callback.Run(target_path,
189 disp, 192 disp,
190 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL, 193 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL,
191 intermediate_path); 194 intermediate_path);
192 } 195 }
193 196
194 private: 197 private:
195 virtual ~TestDownloadManagerDelegate() {} 198 virtual ~TestDownloadManagerDelegate() {}
196 }; 199 };
197 200
201 class FakeBackgroundModeManager : public BackgroundModeManager {
202 public:
203 FakeBackgroundModeManager()
204 : BackgroundModeManager(
205 CommandLine::ForCurrentProcess(),
206 &g_browser_process->profile_manager()->GetProfileInfoCache()),
207 suspended_(false) {}
208
209 virtual void SuspendBackgroundMode() OVERRIDE {
210 BackgroundModeManager::SuspendBackgroundMode();
211 suspended_ = true;
212 }
213
214 virtual void ResumeBackgroundMode() OVERRIDE {
215 BackgroundModeManager::ResumeBackgroundMode();
216 suspended_ = false;
217 }
218
219 bool IsBackgroundModeSuspended() {
220 return suspended_;
221 }
222
223 private:
224 bool suspended_;
225
226 DISALLOW_COPY_AND_ASSIGN(FakeBackgroundModeManager);
227 };
228
198 } // namespace 229 } // namespace
199 230
200 class BrowserCloseManagerBrowserTest 231 class BrowserCloseManagerBrowserTest
201 : public InProcessBrowserTest, 232 : public InProcessBrowserTest,
202 public testing::WithParamInterface<bool> { 233 public testing::WithParamInterface<bool> {
203 protected: 234 protected:
204 virtual void SetUpOnMainThread() OVERRIDE { 235 virtual void SetUpOnMainThread() OVERRIDE {
205 InProcessBrowserTest::SetUpOnMainThread(); 236 InProcessBrowserTest::SetUpOnMainThread();
206 SessionStartupPref::SetStartupPref( 237 SessionStartupPref::SetStartupPref(
207 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST)); 238 browser()->profile(), SessionStartupPref(SessionStartupPref::LAST));
(...skipping 27 matching lines...) Expand all
235 std::vector<Browser*> browsers_; 266 std::vector<Browser*> browsers_;
236 AppModalDialogObserver dialogs_; 267 AppModalDialogObserver dialogs_;
237 }; 268 };
238 269
239 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { 270 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) {
240 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 271 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
241 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 272 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
242 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 273 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
243 RepeatedNotificationObserver cancel_observer( 274 RepeatedNotificationObserver cancel_observer(
244 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 275 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
245 chrome::CloseAllBrowsers(); 276 chrome::CloseAllBrowsersAndQuit();
246 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 277 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
247 cancel_observer.Wait(); 278 cancel_observer.Wait();
248 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 279 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
249 EXPECT_EQ(1, browser()->tab_strip_model()->count()); 280 EXPECT_EQ(1, browser()->tab_strip_model()->count());
250 281
251 RepeatedNotificationObserver close_observer( 282 RepeatedNotificationObserver close_observer(
252 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 283 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
253 chrome::CloseAllBrowsers(); 284 chrome::CloseAllBrowsersAndQuit();
254 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 285 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
255 close_observer.Wait(); 286 close_observer.Wait();
256 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 287 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
257 EXPECT_TRUE(chrome::BrowserIterator().done()); 288 EXPECT_TRUE(chrome::BrowserIterator().done());
258 } 289 }
259 290
260 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 291 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
261 TestShutdownMoreThanOnce) { 292 TestShutdownMoreThanOnce) {
262 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 293 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
263 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 294 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
264 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 295 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
265 RepeatedNotificationObserver cancel_observer( 296 RepeatedNotificationObserver cancel_observer(
266 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 297 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
267 chrome::CloseAllBrowsers(); 298 chrome::CloseAllBrowsersAndQuit();
268 chrome::CloseAllBrowsers(); 299 chrome::CloseAllBrowsersAndQuit();
269 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 300 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
270 cancel_observer.Wait(); 301 cancel_observer.Wait();
271 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 302 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
272 EXPECT_EQ(1, browser()->tab_strip_model()->count()); 303 EXPECT_EQ(1, browser()->tab_strip_model()->count());
273 304
274 RepeatedNotificationObserver close_observer( 305 RepeatedNotificationObserver close_observer(
275 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 306 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
276 chrome::CloseAllBrowsers(); 307 chrome::CloseAllBrowsersAndQuit();
277 chrome::CloseAllBrowsers(); 308 chrome::CloseAllBrowsersAndQuit();
278 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 309 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
279 close_observer.Wait(); 310 close_observer.Wait();
280 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 311 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
281 EXPECT_TRUE(chrome::BrowserIterator().done()); 312 EXPECT_TRUE(chrome::BrowserIterator().done());
282 } 313 }
283 314
284 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) { 315 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, PRE_TestSessionRestore) {
285 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 316 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
286 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 317 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
287 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 318 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
288 AddBlankTabAndShow(browser()); 319 AddBlankTabAndShow(browser());
289 ASSERT_NO_FATAL_FAILURE( 320 ASSERT_NO_FATAL_FAILURE(
290 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); 321 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)));
291 RepeatedNotificationObserver cancel_observer( 322 RepeatedNotificationObserver cancel_observer(
292 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 323 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
293 chrome::CloseAllBrowsers(); 324 chrome::CloseAllBrowsersAndQuit();
294 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 325 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
295 cancel_observer.Wait(); 326 cancel_observer.Wait();
296 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 327 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
297 328
298 browser()->tab_strip_model() 329 browser()->tab_strip_model()
299 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); 330 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE);
300 content::TestNavigationObserver navigation_observer( 331 content::TestNavigationObserver navigation_observer(
301 browser()->tab_strip_model()->GetActiveWebContents(), 1); 332 browser()->tab_strip_model()->GetActiveWebContents(), 1);
302 ASSERT_NO_FATAL_FAILURE( 333 ASSERT_NO_FATAL_FAILURE(
303 NavigateToURLWithDisposition(browser(), 334 NavigateToURLWithDisposition(browser(),
304 GURL(chrome::kChromeUIVersionURL), 335 GURL(chrome::kChromeUIVersionURL),
305 CURRENT_TAB, 336 CURRENT_TAB,
306 ui_test_utils::BROWSER_TEST_NONE)); 337 ui_test_utils::BROWSER_TEST_NONE));
307 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 338 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
308 navigation_observer.Wait(); 339 navigation_observer.Wait();
309 340
310 RepeatedNotificationObserver close_observer( 341 RepeatedNotificationObserver close_observer(
311 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 342 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
312 chrome::CloseAllBrowsers(); 343 chrome::CloseAllBrowsersAndQuit();
313 close_observer.Wait(); 344 close_observer.Wait();
314 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 345 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
315 EXPECT_TRUE(chrome::BrowserIterator().done()); 346 EXPECT_TRUE(chrome::BrowserIterator().done());
316 } 347 }
317 348
318 // Test that the tab closed after the aborted shutdown attempt is not re-opened 349 // Test that the tab closed after the aborted shutdown attempt is not re-opened
319 // when restoring the session. 350 // when restoring the session.
320 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) { 351 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSessionRestore) {
321 // The testing framework launches Chrome with about:blank as args. 352 // The testing framework launches Chrome with about:blank as args.
322 EXPECT_EQ(2, browser()->tab_strip_model()->count()); 353 EXPECT_EQ(2, browser()->tab_strip_model()->count());
(...skipping 11 matching lines...) Expand all
334 browsers_.push_back(CreateBrowser(browser()->profile())); 365 browsers_.push_back(CreateBrowser(browser()->profile()));
335 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 366 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
336 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 367 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
337 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 368 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
338 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 369 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
339 370
340 // Cancel shutdown on the first beforeunload event. 371 // Cancel shutdown on the first beforeunload event.
341 { 372 {
342 RepeatedNotificationObserver cancel_observer( 373 RepeatedNotificationObserver cancel_observer(
343 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 374 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
344 chrome::CloseAllBrowsers(); 375 chrome::CloseAllBrowsersAndQuit();
345 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 376 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
346 cancel_observer.Wait(); 377 cancel_observer.Wait();
347 } 378 }
348 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 379 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
349 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 380 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
350 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 381 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
351 382
352 // Cancel shutdown on the second beforeunload event. 383 // Cancel shutdown on the second beforeunload event.
353 { 384 {
354 RepeatedNotificationObserver cancel_observer( 385 RepeatedNotificationObserver cancel_observer(
355 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 386 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
356 chrome::CloseAllBrowsers(); 387 chrome::CloseAllBrowsersAndQuit();
357 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 388 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
358 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 389 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
359 cancel_observer.Wait(); 390 cancel_observer.Wait();
360 } 391 }
361 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 392 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
362 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 393 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
363 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 394 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
364 395
365 // Allow shutdown for both beforeunload events. 396 // Allow shutdown for both beforeunload events.
366 RepeatedNotificationObserver close_observer( 397 RepeatedNotificationObserver close_observer(
367 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 398 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
368 chrome::CloseAllBrowsers(); 399 chrome::CloseAllBrowsersAndQuit();
369 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 400 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
370 close_observer.Wait(); 401 close_observer.Wait();
371 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 402 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
372 EXPECT_TRUE(chrome::BrowserIterator().done()); 403 EXPECT_TRUE(chrome::BrowserIterator().done());
373 } 404 }
374 405
375 // Test that tabs in the same window with a beforeunload event that hangs are 406 // Test that tabs in the same window with a beforeunload event that hangs are
376 // treated the same as the user accepting the close, but do not close the tab 407 // treated the same as the user accepting the close, but do not close the tab
377 // early. 408 // early.
378 // Test is flaky on windows, disabled. See http://crbug.com/276366 409 // Test is flaky on windows, disabled. See http://crbug.com/276366
(...skipping 11 matching lines...) Expand all
390 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 421 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
391 AddBlankTabAndShow(browsers_[0]); 422 AddBlankTabAndShow(browsers_[0]);
392 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 423 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
393 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 424 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
394 AddBlankTabAndShow(browsers_[0]); 425 AddBlankTabAndShow(browsers_[0]);
395 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 426 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
396 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 427 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
397 428
398 RepeatedNotificationObserver cancel_observer( 429 RepeatedNotificationObserver cancel_observer(
399 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 430 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
400 chrome::CloseAllBrowsers(); 431 chrome::CloseAllBrowsersAndQuit();
401 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 432 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
402 cancel_observer.Wait(); 433 cancel_observer.Wait();
403 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 434 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
404 // All tabs should still be open. 435 // All tabs should still be open.
405 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); 436 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count());
406 437
407 RepeatedNotificationObserver close_observer( 438 RepeatedNotificationObserver close_observer(
408 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 439 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
409 chrome::CloseAllBrowsers(); 440 chrome::CloseAllBrowsersAndQuit();
410 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 441 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
411 close_observer.Wait(); 442 close_observer.Wait();
412 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 443 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
413 EXPECT_TRUE(chrome::BrowserIterator().done()); 444 EXPECT_TRUE(chrome::BrowserIterator().done());
414 } 445 }
415 446
416 // Test that tabs in different windows with a beforeunload event that hangs are 447 // Test that tabs in different windows with a beforeunload event that hangs are
417 // treated the same as the user accepting the close, but do not close the tab 448 // treated the same as the user accepting the close, but do not close the tab
418 // early. 449 // early.
419 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 450 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
420 TestHangInBeforeUnloadMultipleWindows) { 451 TestHangInBeforeUnloadMultipleWindows) {
421 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 452 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
422 browsers_.push_back(CreateBrowser(browser()->profile())); 453 browsers_.push_back(CreateBrowser(browser()->profile()));
423 browsers_.push_back(CreateBrowser(browser()->profile())); 454 browsers_.push_back(CreateBrowser(browser()->profile()));
424 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 455 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
425 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 456 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
426 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 457 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
427 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 458 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
428 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 459 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
429 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 460 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html")));
430 461
431 RepeatedNotificationObserver cancel_observer( 462 RepeatedNotificationObserver cancel_observer(
432 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 463 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
433 chrome::CloseAllBrowsers(); 464 chrome::CloseAllBrowsersAndQuit();
434 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 465 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
435 cancel_observer.Wait(); 466 cancel_observer.Wait();
436 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 467 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
437 // All windows should still be open. 468 // All windows should still be open.
438 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 469 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
439 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 470 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
440 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); 471 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count());
441 472
442 RepeatedNotificationObserver close_observer( 473 RepeatedNotificationObserver close_observer(
443 chrome::NOTIFICATION_BROWSER_CLOSED, 3); 474 chrome::NOTIFICATION_BROWSER_CLOSED, 3);
444 chrome::CloseAllBrowsers(); 475 chrome::CloseAllBrowsersAndQuit();
445 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 476 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
446 close_observer.Wait(); 477 close_observer.Wait();
447 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 478 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
448 EXPECT_TRUE(chrome::BrowserIterator().done()); 479 EXPECT_TRUE(chrome::BrowserIterator().done());
449 } 480 }
450 481
451 // Test that a window created during shutdown is closed. 482 // Test that a window created during shutdown is closed.
452 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 483 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
453 TestAddWindowDuringShutdown) { 484 TestAddWindowDuringShutdown) {
454 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 485 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
455 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 486 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
456 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 487 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
457 488
458 RepeatedNotificationObserver close_observer( 489 RepeatedNotificationObserver close_observer(
459 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 490 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
460 chrome::CloseAllBrowsers(); 491 chrome::CloseAllBrowsersAndQuit();
461 browsers_.push_back(CreateBrowser(browser()->profile())); 492 browsers_.push_back(CreateBrowser(browser()->profile()));
462 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 493 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
463 close_observer.Wait(); 494 close_observer.Wait();
464 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 495 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
465 EXPECT_TRUE(chrome::BrowserIterator().done()); 496 EXPECT_TRUE(chrome::BrowserIterator().done());
466 } 497 }
467 498
468 // Test that a window created during shutdown with a beforeunload handler can 499 // Test that a window created during shutdown with a beforeunload handler can
469 // cancel the shutdown. 500 // cancel the shutdown.
470 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 501 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
471 DISABLED_TestAddWindowWithBeforeUnloadDuringShutdown) { 502 DISABLED_TestAddWindowWithBeforeUnloadDuringShutdown) {
472 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 503 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
473 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 504 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
474 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 505 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
475 506
476 RepeatedNotificationObserver cancel_observer( 507 RepeatedNotificationObserver cancel_observer(
477 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 508 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
478 chrome::CloseAllBrowsers(); 509 chrome::CloseAllBrowsersAndQuit();
479 browsers_.push_back(CreateBrowser(browser()->profile())); 510 browsers_.push_back(CreateBrowser(browser()->profile()));
480 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 511 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
481 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 512 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
482 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 513 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
483 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 514 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
484 cancel_observer.Wait(); 515 cancel_observer.Wait();
485 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 516 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
486 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 517 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
487 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 518 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
488 519
489 // Allow shutdown for both beforeunload dialogs. 520 // Allow shutdown for both beforeunload dialogs.
490 RepeatedNotificationObserver close_observer( 521 RepeatedNotificationObserver close_observer(
491 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 522 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
492 chrome::CloseAllBrowsers(); 523 chrome::CloseAllBrowsersAndQuit();
493 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 524 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
494 close_observer.Wait(); 525 close_observer.Wait();
495 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 526 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
496 EXPECT_TRUE(chrome::BrowserIterator().done()); 527 EXPECT_TRUE(chrome::BrowserIterator().done());
497 } 528 }
498 529
499 // Test that tabs added during shutdown are closed. 530 // Test that tabs added during shutdown are closed.
500 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 531 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
501 TestAddTabDuringShutdown) { 532 TestAddTabDuringShutdown) {
502 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 533 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
503 browsers_.push_back(CreateBrowser(browser()->profile())); 534 browsers_.push_back(CreateBrowser(browser()->profile()));
504 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 535 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
505 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 536 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
506 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 537 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
507 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 538 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
508 539
509 RepeatedNotificationObserver close_observer( 540 RepeatedNotificationObserver close_observer(
510 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 541 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
511 chrome::CloseAllBrowsers(); 542 chrome::CloseAllBrowsersAndQuit();
512 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 543 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
513 AddBlankTabAndShow(browsers_[0]); 544 AddBlankTabAndShow(browsers_[0]);
514 AddBlankTabAndShow(browsers_[1]); 545 AddBlankTabAndShow(browsers_[1]);
515 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 546 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
516 close_observer.Wait(); 547 close_observer.Wait();
517 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 548 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
518 EXPECT_TRUE(chrome::BrowserIterator().done()); 549 EXPECT_TRUE(chrome::BrowserIterator().done());
519 } 550 }
520 551
521 // Test that tabs created during shutdown with beforeunload handlers can cancel 552 // Test that tabs created during shutdown with beforeunload handlers can cancel
522 // the shutdown. 553 // the shutdown.
523 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 554 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
524 DISABLED_TestAddTabWithBeforeUnloadDuringShutdown) { 555 DISABLED_TestAddTabWithBeforeUnloadDuringShutdown) {
525 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 556 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
526 browsers_.push_back(CreateBrowser(browser()->profile())); 557 browsers_.push_back(CreateBrowser(browser()->profile()));
527 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 558 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
528 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 559 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
529 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 560 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
530 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 561 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
531 RepeatedNotificationObserver cancel_observer( 562 RepeatedNotificationObserver cancel_observer(
532 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 563 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
533 chrome::CloseAllBrowsers(); 564 chrome::CloseAllBrowsersAndQuit();
534 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 565 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
535 AddBlankTabAndShow(browsers_[0]); 566 AddBlankTabAndShow(browsers_[0]);
536 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 567 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
537 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 568 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
538 AddBlankTabAndShow(browsers_[1]); 569 AddBlankTabAndShow(browsers_[1]);
539 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 570 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
540 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 571 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
541 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 572 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
542 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 573 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
543 cancel_observer.Wait(); 574 cancel_observer.Wait();
544 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 575 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
545 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); 576 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count());
546 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); 577 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count());
547 578
548 RepeatedNotificationObserver close_observer( 579 RepeatedNotificationObserver close_observer(
549 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 580 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
550 chrome::CloseAllBrowsers(); 581 chrome::CloseAllBrowsersAndQuit();
551 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 582 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
552 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 583 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
553 584
554 close_observer.Wait(); 585 close_observer.Wait();
555 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 586 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
556 EXPECT_TRUE(chrome::BrowserIterator().done()); 587 EXPECT_TRUE(chrome::BrowserIterator().done());
557 } 588 }
558 589
559 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 590 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
560 TestCloseTabDuringShutdown) { 591 TestCloseTabDuringShutdown) {
561 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 592 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
562 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 593 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
563 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 594 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
564 RepeatedNotificationObserver cancel_observer( 595 RepeatedNotificationObserver cancel_observer(
565 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 596 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
566 chrome::CloseAllBrowsers(); 597 chrome::CloseAllBrowsersAndQuit();
567 598
568 browsers_.push_back(CreateBrowser(browser()->profile())); 599 browsers_.push_back(CreateBrowser(browser()->profile()));
569 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 600 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
570 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 601 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
571 browsers_[1]->tab_strip_model()->CloseAllTabs(); 602 browsers_[1]->tab_strip_model()->CloseAllTabs();
572 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 603 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
573 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 604 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
574 cancel_observer.Wait(); 605 cancel_observer.Wait();
575 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 606 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
576 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 607 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
577 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 608 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
578 609
579 RepeatedNotificationObserver close_observer( 610 RepeatedNotificationObserver close_observer(
580 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 611 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
581 chrome::CloseAllBrowsers(); 612 chrome::CloseAllBrowsersAndQuit();
582 browsers_[1]->tab_strip_model()->CloseAllTabs(); 613 browsers_[1]->tab_strip_model()->CloseAllTabs();
583 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 614 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
584 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 615 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
585 616
586 close_observer.Wait(); 617 close_observer.Wait();
587 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 618 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
588 EXPECT_TRUE(chrome::BrowserIterator().done()); 619 EXPECT_TRUE(chrome::BrowserIterator().done());
589 } 620 }
590 621
591 // Test is flaky on windows, disabled. See http://crbug.com/276366 622 // Test is flaky on windows, disabled. See http://crbug.com/276366
592 #if defined(OS_WIN) 623 #if defined(OS_WIN)
593 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ 624 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \
594 DISABLED_TestOpenAndCloseWindowDuringShutdown 625 DISABLED_TestOpenAndCloseWindowDuringShutdown
595 #else 626 #else
596 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \ 627 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \
597 TestOpenAndCloseWindowDuringShutdown 628 TestOpenAndCloseWindowDuringShutdown
598 #endif 629 #endif
599 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 630 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
600 MAYBE_TestOpenAndCloseWindowDuringShutdown) { 631 MAYBE_TestOpenAndCloseWindowDuringShutdown) {
601 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 632 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
602 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 633 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
603 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 634 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
604 RepeatedNotificationObserver cancel_observer( 635 RepeatedNotificationObserver cancel_observer(
605 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 636 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
606 chrome::CloseAllBrowsers(); 637 chrome::CloseAllBrowsersAndQuit();
607 638
608 browsers_.push_back(CreateBrowser(browser()->profile())); 639 browsers_.push_back(CreateBrowser(browser()->profile()));
609 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 640 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
610 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 641 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
611 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); 642 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
612 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 643 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
613 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 644 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
614 cancel_observer.Wait(); 645 cancel_observer.Wait();
615 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 646 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
616 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 647 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
617 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 648 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
618 649
619 RepeatedNotificationObserver close_observer( 650 RepeatedNotificationObserver close_observer(
620 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 651 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
621 chrome::CloseAllBrowsers(); 652 chrome::CloseAllBrowsersAndQuit();
622 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); 653 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
623 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 654 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
624 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 655 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
625 656
626 close_observer.Wait(); 657 close_observer.Wait();
627 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 658 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
628 EXPECT_TRUE(chrome::BrowserIterator().done()); 659 EXPECT_TRUE(chrome::BrowserIterator().done());
629 } 660 }
630 661
631 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 662 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
632 TestCloseWindowDuringShutdown) { 663 TestCloseWindowDuringShutdown) {
633 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 664 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
634 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 665 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
635 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 666 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
636 browsers_.push_back(CreateBrowser(browser()->profile())); 667 browsers_.push_back(CreateBrowser(browser()->profile()));
637 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 668 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
638 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 669 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
639 RepeatedNotificationObserver cancel_observer( 670 RepeatedNotificationObserver cancel_observer(
640 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 671 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
641 chrome::CloseAllBrowsers(); 672 chrome::CloseAllBrowsersAndQuit();
642 673
643 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); 674 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow());
644 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose()); 675 ASSERT_NO_FATAL_FAILURE(dialogs_.CancelClose());
645 cancel_observer.Wait(); 676 cancel_observer.Wait();
646 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 677 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
647 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 678 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
648 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 679 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
649 680
650 RepeatedNotificationObserver close_observer( 681 RepeatedNotificationObserver close_observer(
651 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 682 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
652 chrome::CloseAllBrowsers(); 683 chrome::CloseAllBrowsersAndQuit();
653 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); 684 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow());
654 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 685 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
655 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose()); 686 ASSERT_NO_FATAL_FAILURE(dialogs_.AcceptClose());
656 687
657 close_observer.Wait(); 688 close_observer.Wait();
658 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 689 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
659 EXPECT_TRUE(chrome::BrowserIterator().done()); 690 EXPECT_TRUE(chrome::BrowserIterator().done());
660 } 691 }
661 692
662 // Test shutdown with a DANGEROUS_URL download undecided. 693 // Test shutdown with a DANGEROUS_URL download undecided.
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 TestBrowserCloseManager::AttemptClose( 825 TestBrowserCloseManager::AttemptClose(
795 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE); 826 TestBrowserCloseManager::USER_CHOICE_USER_ALLOWS_CLOSE);
796 close_observer.Wait(); 827 close_observer.Wait();
797 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 828 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
798 EXPECT_TRUE(chrome::BrowserIterator().done()); 829 EXPECT_TRUE(chrome::BrowserIterator().done());
799 } 830 }
800 831
801 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest, 832 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerBrowserTest,
802 BrowserCloseManagerBrowserTest, 833 BrowserCloseManagerBrowserTest,
803 testing::Bool()); 834 testing::Bool());
835
836 class BrowserCloseManagerWithBackgroundModeBrowserTest
837 : public BrowserCloseManagerBrowserTest {
838 public:
839 BrowserCloseManagerWithBackgroundModeBrowserTest() {}
840
841 virtual void SetUpOnMainThread() OVERRIDE {
842 BrowserCloseManagerBrowserTest::SetUpOnMainThread();
843 g_browser_process->set_background_mode_manager_for_test(
844 scoped_ptr<BackgroundModeManager>(new FakeBackgroundModeManager));
845 }
846
847 bool IsBackgroundModeSuspended() {
848 return static_cast<FakeBackgroundModeManager*>(
849 g_browser_process->background_mode_manager())
850 ->IsBackgroundModeSuspended();
851 }
852
853 private:
854 DISALLOW_COPY_AND_ASSIGN(BrowserCloseManagerWithBackgroundModeBrowserTest);
855 };
856
857 // Check that background mode is suspended when closing all browsers unless we
858 // are quitting and that background mode is resumed when a new browser window is
859 // opened.
860 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
861 CloseAllBrowsersWithBackgroundMode) {
862 EXPECT_FALSE(IsBackgroundModeSuspended());
863 Profile* profile = browser()->profile();
864 {
865 RepeatedNotificationObserver close_observer(
866 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
867 chrome::StartKeepAlive();
868 chrome::CloseAllBrowsers();
869 close_observer.Wait();
870 }
871 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
872 EXPECT_TRUE(chrome::BrowserIterator().done());
873 EXPECT_TRUE(IsBackgroundModeSuspended());
874
875 // Background mode should be resumed when a new browser window is opened.
876 ui_test_utils::BrowserAddedObserver new_browser_observer;
877 chrome::NewEmptyWindow(profile, chrome::HOST_DESKTOP_TYPE_NATIVE);
878 new_browser_observer.WaitForSingleNewBrowser();
879 chrome::EndKeepAlive();
880 EXPECT_FALSE(IsBackgroundModeSuspended());
881 RepeatedNotificationObserver close_observer(
882 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
883
884 // Background mode should not be suspended when quitting.
885 chrome::CloseAllBrowsersAndQuit();
886 close_observer.Wait();
887 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
888 EXPECT_TRUE(chrome::BrowserIterator().done());
889 EXPECT_FALSE(IsBackgroundModeSuspended());
890
891 }
892
893 // Check that closing the last browser window individually does not affect
894 // background mode.
895 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
896 CloseSingleBrowserWithBackgroundMode) {
897 RepeatedNotificationObserver close_observer(
898 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
899 EXPECT_FALSE(IsBackgroundModeSuspended());
900 browser()->window()->Close();
901 close_observer.Wait();
902 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
903 EXPECT_TRUE(chrome::BrowserIterator().done());
904 EXPECT_FALSE(IsBackgroundModeSuspended());
905 }
906
907 // Check that closing all browsers with no browser windows open suspends
908 // background mode but does not cause Chrome to quit.
909 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
910 CloseAllBrowsersWithNoOpenBrowsersWithBackgroundMode) {
911 RepeatedNotificationObserver close_observer(
912 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
913 EXPECT_FALSE(IsBackgroundModeSuspended());
914 chrome::StartKeepAlive();
915 browser()->window()->Close();
916 close_observer.Wait();
917 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
918 EXPECT_TRUE(chrome::BrowserIterator().done());
919 EXPECT_FALSE(IsBackgroundModeSuspended());
920
921 chrome::CloseAllBrowsers();
922 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
923 EXPECT_TRUE(chrome::BrowserIterator().done());
924 EXPECT_TRUE(IsBackgroundModeSuspended());
925 }
926
927 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
928 BrowserCloseManagerWithBackgroundModeBrowserTest,
929 testing::Bool());
OLDNEW
« no previous file with comments | « chrome/browser/lifetime/browser_close_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698