OLD | NEW |
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 "chrome/browser/lifetime/browser_close_manager.h" | 5 #include "chrome/browser/lifetime/browser_close_manager.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 | 65 |
66 app_modal::NativeAppModalDialog* GetNextDialog() { | 66 app_modal::NativeAppModalDialog* GetNextDialog() { |
67 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); | 67 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); |
68 EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); | 68 EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); |
69 app_modal::JavaScriptAppModalDialog* js_dialog = | 69 app_modal::JavaScriptAppModalDialog* js_dialog = |
70 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); | 70 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); |
71 CHECK(js_dialog->native_dialog()); | 71 CHECK(js_dialog->native_dialog()); |
72 return js_dialog->native_dialog(); | 72 return js_dialog->native_dialog(); |
73 } | 73 } |
74 | 74 |
75 // Note: call |DisableHangMonitor| on the relevant WebContents or Browser before | 75 // Note: call |PrepareForDialog| on the relevant WebContents or Browser before |
76 // trying to close it, to avoid flakiness. https://crbug.com/519646 | 76 // trying to close it, to avoid flakiness. https://crbug.com/519646 |
77 void AcceptClose() { | 77 void AcceptClose() { |
78 GetNextDialog()->AcceptAppModalDialog(); | 78 GetNextDialog()->AcceptAppModalDialog(); |
79 } | 79 } |
80 | 80 |
81 // Note: call |DisableHangMonitor| on the relevant WebContents or Browser before | 81 // Note: call |PrepareForDialog| on the relevant WebContents or Browser before |
82 // trying to close it, to avoid flakiness. https://crbug.com/519646 | 82 // trying to close it, to avoid flakiness. https://crbug.com/519646 |
83 void CancelClose() { | 83 void CancelClose() { |
84 GetNextDialog()->CancelAppModalDialog(); | 84 GetNextDialog()->CancelAppModalDialog(); |
85 } | 85 } |
86 | 86 |
87 class RepeatedNotificationObserver : public content::NotificationObserver { | 87 class RepeatedNotificationObserver : public content::NotificationObserver { |
88 public: | 88 public: |
89 explicit RepeatedNotificationObserver(int type, int count) | 89 explicit RepeatedNotificationObserver(int type, int count) |
90 : num_outstanding_(count), running_(false) { | 90 : num_outstanding_(count), running_(false) { |
91 registrar_.Add(this, type, content::NotificationService::AllSources()); | 91 registrar_.Add(this, type, content::NotificationService::AllSources()); |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 ui_test_utils::NavigateToURLWithDisposition( | 283 ui_test_utils::NavigateToURLWithDisposition( |
284 browser, GURL(net::URLRequestSlowDownloadJob::kKnownSizeUrl), | 284 browser, GURL(net::URLRequestSlowDownloadJob::kKnownSizeUrl), |
285 WindowOpenDisposition::NEW_BACKGROUND_TAB, | 285 WindowOpenDisposition::NEW_BACKGROUND_TAB, |
286 ui_test_utils::BROWSER_TEST_NONE); | 286 ui_test_utils::BROWSER_TEST_NONE); |
287 observer.WaitForFinished(); | 287 observer.WaitForFinished(); |
288 EXPECT_EQ( | 288 EXPECT_EQ( |
289 1UL, | 289 1UL, |
290 observer.NumDownloadsSeenInState(content::DownloadItem::IN_PROGRESS)); | 290 observer.NumDownloadsSeenInState(content::DownloadItem::IN_PROGRESS)); |
291 } | 291 } |
292 | 292 |
293 // Makes sure that the beforeunload hang monitor will not trigger. That must | 293 void PrepareForDialog(content::WebContents* web_contents) { |
294 // be called before close action when using |AcceptClose| or |CancelClose|, to | 294 content::PrepContentsForBeforeUnloadTest(web_contents); |
295 // ensure the timeout does not prevent the dialog from appearing. | |
296 // https://crbug.com/519646 | |
297 void DisableHangMonitor(content::WebContents* web_contents) { | |
298 web_contents->GetMainFrame()->DisableBeforeUnloadHangMonitorForTesting(); | |
299 } | 295 } |
300 | 296 |
301 void DisableHangMonitor(Browser* browser) { | 297 void PrepareForDialog(Browser* browser) { |
302 for (int i = 0; i < browser->tab_strip_model()->count(); i++) | 298 for (int i = 0; i < browser->tab_strip_model()->count(); i++) |
303 DisableHangMonitor(browser->tab_strip_model()->GetWebContentsAt(i)); | 299 PrepareForDialog(browser->tab_strip_model()->GetWebContentsAt(i)); |
304 } | 300 } |
305 | 301 |
306 std::vector<Browser*> browsers_; | 302 std::vector<Browser*> browsers_; |
307 }; | 303 }; |
308 | 304 |
309 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { | 305 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { |
310 ASSERT_TRUE(embedded_test_server()->Start()); | 306 ASSERT_TRUE(embedded_test_server()->Start()); |
311 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 307 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
312 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 308 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
313 DisableHangMonitor(browser()); | 309 PrepareForDialog(browser()); |
314 | 310 |
315 RepeatedNotificationObserver cancel_observer( | 311 RepeatedNotificationObserver cancel_observer( |
316 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 312 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
317 chrome::CloseAllBrowsersAndQuit(); | 313 chrome::CloseAllBrowsersAndQuit(); |
318 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 314 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
319 cancel_observer.Wait(); | 315 cancel_observer.Wait(); |
320 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 316 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
321 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 317 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
322 | 318 |
323 RepeatedNotificationObserver close_observer( | 319 RepeatedNotificationObserver close_observer( |
324 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 320 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
325 chrome::CloseAllBrowsersAndQuit(); | 321 chrome::CloseAllBrowsersAndQuit(); |
326 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 322 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
327 close_observer.Wait(); | 323 close_observer.Wait(); |
328 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 324 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
329 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 325 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
330 } | 326 } |
331 | 327 |
332 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 328 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
333 TestShutdownMoreThanOnce) { | 329 TestShutdownMoreThanOnce) { |
334 ASSERT_TRUE(embedded_test_server()->Start()); | 330 ASSERT_TRUE(embedded_test_server()->Start()); |
335 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 331 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
336 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 332 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
337 DisableHangMonitor(browser()); | 333 PrepareForDialog(browser()); |
338 | 334 |
339 RepeatedNotificationObserver cancel_observer( | 335 RepeatedNotificationObserver cancel_observer( |
340 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 336 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
341 chrome::CloseAllBrowsersAndQuit(); | 337 chrome::CloseAllBrowsersAndQuit(); |
342 chrome::CloseAllBrowsersAndQuit(); | 338 chrome::CloseAllBrowsersAndQuit(); |
343 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 339 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
344 cancel_observer.Wait(); | 340 cancel_observer.Wait(); |
345 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 341 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
346 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 342 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
347 | 343 |
348 RepeatedNotificationObserver close_observer( | 344 RepeatedNotificationObserver close_observer( |
349 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 345 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
350 chrome::CloseAllBrowsersAndQuit(); | 346 chrome::CloseAllBrowsersAndQuit(); |
351 chrome::CloseAllBrowsersAndQuit(); | 347 chrome::CloseAllBrowsersAndQuit(); |
352 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 348 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
353 close_observer.Wait(); | 349 close_observer.Wait(); |
354 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 350 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
355 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 351 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
356 } | 352 } |
357 | 353 |
358 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 354 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
359 PRE_TestSessionRestore) { | 355 PRE_TestSessionRestore) { |
360 ASSERT_TRUE(embedded_test_server()->Start()); | 356 ASSERT_TRUE(embedded_test_server()->Start()); |
361 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 357 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
362 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 358 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
363 AddBlankTabAndShow(browser()); | 359 AddBlankTabAndShow(browser()); |
364 ASSERT_NO_FATAL_FAILURE( | 360 ASSERT_NO_FATAL_FAILURE( |
365 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); | 361 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); |
366 DisableHangMonitor(browser()); | 362 PrepareForDialog(browser()); |
367 | 363 |
368 RepeatedNotificationObserver cancel_observer( | 364 RepeatedNotificationObserver cancel_observer( |
369 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 365 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
370 chrome::CloseAllBrowsersAndQuit(); | 366 chrome::CloseAllBrowsersAndQuit(); |
371 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 367 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
372 cancel_observer.Wait(); | 368 cancel_observer.Wait(); |
373 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 369 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
374 | 370 |
375 browser()->tab_strip_model() | 371 browser()->tab_strip_model() |
376 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); | 372 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); |
(...skipping 27 matching lines...) Expand all Loading... |
404 | 400 |
405 // Test that browser windows are only closed if all browsers are ready to close | 401 // Test that browser windows are only closed if all browsers are ready to close |
406 // and that all beforeunload dialogs are shown again after a cancel. | 402 // and that all beforeunload dialogs are shown again after a cancel. |
407 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { | 403 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { |
408 ASSERT_TRUE(embedded_test_server()->Start()); | 404 ASSERT_TRUE(embedded_test_server()->Start()); |
409 browsers_.push_back(CreateBrowser(browser()->profile())); | 405 browsers_.push_back(CreateBrowser(browser()->profile())); |
410 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 406 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
411 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 407 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
412 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 408 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
413 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 409 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
414 DisableHangMonitor(browsers_[0]); | 410 PrepareForDialog(browsers_[0]); |
415 DisableHangMonitor(browsers_[1]); | 411 PrepareForDialog(browsers_[1]); |
416 | 412 |
417 // Cancel shutdown on the first beforeunload event. | 413 // Cancel shutdown on the first beforeunload event. |
418 { | 414 { |
419 RepeatedNotificationObserver cancel_observer( | 415 RepeatedNotificationObserver cancel_observer( |
420 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 416 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
421 chrome::CloseAllBrowsersAndQuit(); | 417 chrome::CloseAllBrowsersAndQuit(); |
422 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 418 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
423 cancel_observer.Wait(); | 419 cancel_observer.Wait(); |
424 } | 420 } |
425 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 421 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 455 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
460 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 456 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
461 AddBlankTabAndShow(browsers_[0]); | 457 AddBlankTabAndShow(browsers_[0]); |
462 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 458 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
463 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 459 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
464 AddBlankTabAndShow(browsers_[0]); | 460 AddBlankTabAndShow(browsers_[0]); |
465 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 461 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
466 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 462 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
467 // Disable the hang monitor in the tab that is not expected to hang, so that | 463 // Disable the hang monitor in the tab that is not expected to hang, so that |
468 // the dialog is guaranteed to show. | 464 // the dialog is guaranteed to show. |
469 DisableHangMonitor(browsers_[0]->tab_strip_model()->GetWebContentsAt(1)); | 465 PrepareForDialog(browsers_[0]->tab_strip_model()->GetWebContentsAt(1)); |
470 | 466 |
471 RepeatedNotificationObserver cancel_observer( | 467 RepeatedNotificationObserver cancel_observer( |
472 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 468 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
473 chrome::CloseAllBrowsersAndQuit(); | 469 chrome::CloseAllBrowsersAndQuit(); |
474 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 470 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
475 cancel_observer.Wait(); | 471 cancel_observer.Wait(); |
476 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 472 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
477 // All tabs should still be open. | 473 // All tabs should still be open. |
478 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); | 474 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); |
479 | 475 |
(...skipping 15 matching lines...) Expand all Loading... |
495 browsers_.push_back(CreateBrowser(browser()->profile())); | 491 browsers_.push_back(CreateBrowser(browser()->profile())); |
496 browsers_.push_back(CreateBrowser(browser()->profile())); | 492 browsers_.push_back(CreateBrowser(browser()->profile())); |
497 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 493 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
498 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 494 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
499 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 495 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
500 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 496 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
501 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 497 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
502 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 498 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
503 // Disable the hang monitor in the tab that is not expected to hang, so that | 499 // Disable the hang monitor in the tab that is not expected to hang, so that |
504 // the dialog is guaranteed to show. | 500 // the dialog is guaranteed to show. |
505 DisableHangMonitor(browsers_[1]); | 501 PrepareForDialog(browsers_[1]); |
506 | 502 |
507 RepeatedNotificationObserver cancel_observer( | 503 RepeatedNotificationObserver cancel_observer( |
508 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 504 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
509 chrome::CloseAllBrowsersAndQuit(); | 505 chrome::CloseAllBrowsersAndQuit(); |
510 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 506 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
511 cancel_observer.Wait(); | 507 cancel_observer.Wait(); |
512 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 508 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
513 // All windows should still be open. | 509 // All windows should still be open. |
514 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 510 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
515 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 511 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
(...skipping 24 matching lines...) Expand all Loading... |
540 if (i) | 536 if (i) |
541 AddBlankTabAndShow(browsers_[0]); | 537 AddBlankTabAndShow(browsers_[0]); |
542 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 538 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
543 browsers_[0], | 539 browsers_[0], |
544 embedded_test_server()->GetURL((i == kResposiveTabIndex) | 540 embedded_test_server()->GetURL((i == kResposiveTabIndex) |
545 ? "/beforeunload.html" | 541 ? "/beforeunload.html" |
546 : "/beforeunload_slow.html"))); | 542 : "/beforeunload_slow.html"))); |
547 } | 543 } |
548 // Disable the hang monitor in the tab that is not expected to hang, so that | 544 // Disable the hang monitor in the tab that is not expected to hang, so that |
549 // the dialog is guaranteed to show. | 545 // the dialog is guaranteed to show. |
550 DisableHangMonitor( | 546 PrepareForDialog( |
551 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex)); | 547 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex)); |
552 | 548 |
553 RepeatedNotificationObserver cancel_observer( | 549 RepeatedNotificationObserver cancel_observer( |
554 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 550 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
555 chrome::CloseAllBrowsersAndQuit(); | 551 chrome::CloseAllBrowsersAndQuit(); |
556 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 552 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
557 cancel_observer.Wait(); | 553 cancel_observer.Wait(); |
558 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 554 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
559 | 555 |
560 // All tabs should still be open. | 556 // All tabs should still be open. |
(...skipping 28 matching lines...) Expand all Loading... |
589 if (i) | 585 if (i) |
590 browsers_.push_back(CreateBrowser(browser()->profile())); | 586 browsers_.push_back(CreateBrowser(browser()->profile())); |
591 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 587 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
592 browsers_[i], | 588 browsers_[i], |
593 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) | 589 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) |
594 ? "/beforeunload.html" | 590 ? "/beforeunload.html" |
595 : "/beforeunload_slow.html"))); | 591 : "/beforeunload_slow.html"))); |
596 } | 592 } |
597 // Disable the hang monitor in the tab that is not expected to hang, so that | 593 // Disable the hang monitor in the tab that is not expected to hang, so that |
598 // the dialog is guaranteed to show. | 594 // the dialog is guaranteed to show. |
599 DisableHangMonitor(browsers_[kResposiveBrowserIndex]); | 595 PrepareForDialog(browsers_[kResposiveBrowserIndex]); |
600 | 596 |
601 RepeatedNotificationObserver cancel_observer( | 597 RepeatedNotificationObserver cancel_observer( |
602 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); | 598 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); |
603 chrome::CloseAllBrowsersAndQuit(); | 599 chrome::CloseAllBrowsersAndQuit(); |
604 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 600 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
605 cancel_observer.Wait(); | 601 cancel_observer.Wait(); |
606 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 602 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
607 | 603 |
608 // All windows should still be open. | 604 // All windows should still be open. |
609 for (int i = 0; i < kBrowserCount; i++) | 605 for (int i = 0; i < kBrowserCount; i++) |
610 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); | 606 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); |
611 | 607 |
612 // Quit, this time accepting close confirmation dialog. | 608 // Quit, this time accepting close confirmation dialog. |
613 RepeatedNotificationObserver close_observer( | 609 RepeatedNotificationObserver close_observer( |
614 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); | 610 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); |
615 chrome::CloseAllBrowsersAndQuit(); | 611 chrome::CloseAllBrowsersAndQuit(); |
616 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 612 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
617 close_observer.Wait(); | 613 close_observer.Wait(); |
618 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 614 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
619 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 615 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
620 } | 616 } |
621 | 617 |
622 // Test that a window created during shutdown is closed. | 618 // Test that a window created during shutdown is closed. |
623 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 619 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
624 TestAddWindowDuringShutdown) { | 620 TestAddWindowDuringShutdown) { |
625 ASSERT_TRUE(embedded_test_server()->Start()); | 621 ASSERT_TRUE(embedded_test_server()->Start()); |
626 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 622 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
627 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 623 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
628 DisableHangMonitor(browsers_[0]); | 624 PrepareForDialog(browsers_[0]); |
629 | 625 |
630 RepeatedNotificationObserver close_observer( | 626 RepeatedNotificationObserver close_observer( |
631 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 627 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
632 chrome::CloseAllBrowsersAndQuit(); | 628 chrome::CloseAllBrowsersAndQuit(); |
633 browsers_.push_back(CreateBrowser(browser()->profile())); | 629 browsers_.push_back(CreateBrowser(browser()->profile())); |
634 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 630 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
635 close_observer.Wait(); | 631 close_observer.Wait(); |
636 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 632 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
637 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 633 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
638 } | 634 } |
639 | 635 |
640 // Test that a window created during shutdown with a beforeunload handler can | 636 // Test that a window created during shutdown with a beforeunload handler can |
641 // cancel the shutdown. | 637 // cancel the shutdown. |
642 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 638 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
643 TestAddWindowWithBeforeUnloadDuringShutdown) { | 639 TestAddWindowWithBeforeUnloadDuringShutdown) { |
644 ASSERT_TRUE(embedded_test_server()->Start()); | 640 ASSERT_TRUE(embedded_test_server()->Start()); |
645 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 641 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
646 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 642 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
647 DisableHangMonitor(browsers_[0]); | 643 PrepareForDialog(browsers_[0]); |
648 | 644 |
649 RepeatedNotificationObserver cancel_observer( | 645 RepeatedNotificationObserver cancel_observer( |
650 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 646 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
651 chrome::CloseAllBrowsersAndQuit(); | 647 chrome::CloseAllBrowsersAndQuit(); |
652 browsers_.push_back(CreateBrowser(browser()->profile())); | 648 browsers_.push_back(CreateBrowser(browser()->profile())); |
653 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 649 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
654 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 650 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
655 DisableHangMonitor(browsers_[1]); | 651 PrepareForDialog(browsers_[1]); |
656 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 652 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
657 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 653 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
658 cancel_observer.Wait(); | 654 cancel_observer.Wait(); |
659 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 655 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
660 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 656 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
661 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 657 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
662 | 658 |
663 // Allow shutdown for both beforeunload dialogs. | 659 // Allow shutdown for both beforeunload dialogs. |
664 RepeatedNotificationObserver close_observer( | 660 RepeatedNotificationObserver close_observer( |
665 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 661 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
666 chrome::CloseAllBrowsersAndQuit(); | 662 chrome::CloseAllBrowsersAndQuit(); |
667 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 663 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
668 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 664 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
669 close_observer.Wait(); | 665 close_observer.Wait(); |
670 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 666 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
671 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 667 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
672 } | 668 } |
673 | 669 |
674 // Test that tabs added during shutdown are closed. | 670 // Test that tabs added during shutdown are closed. |
675 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 671 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
676 TestAddTabDuringShutdown) { | 672 TestAddTabDuringShutdown) { |
677 ASSERT_TRUE(embedded_test_server()->Start()); | 673 ASSERT_TRUE(embedded_test_server()->Start()); |
678 browsers_.push_back(CreateBrowser(browser()->profile())); | 674 browsers_.push_back(CreateBrowser(browser()->profile())); |
679 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 675 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
680 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 676 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
681 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 677 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
682 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 678 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
683 DisableHangMonitor(browsers_[0]); | 679 PrepareForDialog(browsers_[0]); |
684 DisableHangMonitor(browsers_[1]); | 680 PrepareForDialog(browsers_[1]); |
685 | 681 |
686 RepeatedNotificationObserver close_observer( | 682 RepeatedNotificationObserver close_observer( |
687 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 683 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
688 chrome::CloseAllBrowsersAndQuit(); | 684 chrome::CloseAllBrowsersAndQuit(); |
689 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 685 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
690 AddBlankTabAndShow(browsers_[0]); | 686 AddBlankTabAndShow(browsers_[0]); |
691 AddBlankTabAndShow(browsers_[1]); | 687 AddBlankTabAndShow(browsers_[1]); |
692 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 688 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
693 close_observer.Wait(); | 689 close_observer.Wait(); |
694 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 690 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
695 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 691 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
696 } | 692 } |
697 | 693 |
698 // Test that tabs created during shutdown with beforeunload handlers can cancel | 694 // Test that tabs created during shutdown with beforeunload handlers can cancel |
699 // the shutdown. | 695 // the shutdown. |
700 | 696 |
701 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 697 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
702 TestAddTabWithBeforeUnloadDuringShutdown) { | 698 TestAddTabWithBeforeUnloadDuringShutdown) { |
703 ASSERT_TRUE(embedded_test_server()->Start()); | 699 ASSERT_TRUE(embedded_test_server()->Start()); |
704 browsers_.push_back(CreateBrowser(browser()->profile())); | 700 browsers_.push_back(CreateBrowser(browser()->profile())); |
705 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 701 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
706 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 702 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
707 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 703 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
708 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 704 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
709 DisableHangMonitor(browsers_[0]); | 705 PrepareForDialog(browsers_[0]); |
710 DisableHangMonitor(browsers_[1]); | 706 PrepareForDialog(browsers_[1]); |
711 | 707 |
712 RepeatedNotificationObserver cancel_observer( | 708 RepeatedNotificationObserver cancel_observer( |
713 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 709 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
714 chrome::CloseAllBrowsersAndQuit(); | 710 chrome::CloseAllBrowsersAndQuit(); |
715 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 711 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
716 AddBlankTabAndShow(browsers_[0]); | 712 AddBlankTabAndShow(browsers_[0]); |
717 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 713 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
718 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 714 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
719 AddBlankTabAndShow(browsers_[1]); | 715 AddBlankTabAndShow(browsers_[1]); |
720 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 716 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
721 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 717 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
722 DisableHangMonitor(browsers_[0]); | 718 PrepareForDialog(browsers_[0]); |
723 DisableHangMonitor(browsers_[1]); | 719 PrepareForDialog(browsers_[1]); |
724 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 720 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
725 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 721 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
726 cancel_observer.Wait(); | 722 cancel_observer.Wait(); |
727 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 723 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
728 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); | 724 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); |
729 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); | 725 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); |
730 | 726 |
731 RepeatedNotificationObserver close_observer( | 727 RepeatedNotificationObserver close_observer( |
732 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 728 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
733 chrome::CloseAllBrowsersAndQuit(); | 729 chrome::CloseAllBrowsersAndQuit(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
780 ui_test_utils::NavigateToURLWithDisposition( | 776 ui_test_utils::NavigateToURLWithDisposition( |
781 browser2, embedded_test_server()->GetURL("/title2.html"), | 777 browser2, embedded_test_server()->GetURL("/title2.html"), |
782 WindowOpenDisposition::NEW_FOREGROUND_TAB, | 778 WindowOpenDisposition::NEW_FOREGROUND_TAB, |
783 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 779 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
784 content::WaitForLoadStop(browser2->tab_strip_model()->GetWebContentsAt(1)); | 780 content::WaitForLoadStop(browser2->tab_strip_model()->GetWebContentsAt(1)); |
785 EXPECT_FALSE(browser2->tab_strip_model() | 781 EXPECT_FALSE(browser2->tab_strip_model() |
786 ->GetWebContentsAt(1) | 782 ->GetWebContentsAt(1) |
787 ->NeedToFireBeforeUnload()); | 783 ->NeedToFireBeforeUnload()); |
788 EXPECT_EQ(2, browser2->tab_strip_model()->count()); | 784 EXPECT_EQ(2, browser2->tab_strip_model()->count()); |
789 | 785 |
790 DisableHangMonitor(browser2); | 786 PrepareForDialog(browser2); |
791 | 787 |
792 // The test. | 788 // The test. |
793 | 789 |
794 TabRestoreServiceChangesObserver restore_observer(browser2->profile()); | 790 TabRestoreServiceChangesObserver restore_observer(browser2->profile()); |
795 content::WindowedNotificationObserver observer( | 791 content::WindowedNotificationObserver observer( |
796 chrome::NOTIFICATION_BROWSER_CLOSED, | 792 chrome::NOTIFICATION_BROWSER_CLOSED, |
797 content::NotificationService::AllSources()); | 793 content::NotificationService::AllSources()); |
798 chrome::CloseWindow(browser2); | 794 chrome::CloseWindow(browser2); |
799 // Just to be sure CloseWindow doesn't have asynchronous tasks | 795 // Just to be sure CloseWindow doesn't have asynchronous tasks |
800 // that could have an impact. | 796 // that could have an impact. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
844 browser2->tab_strip_model()->GetWebContentsAt(0)->GetURL()); | 840 browser2->tab_strip_model()->GetWebContentsAt(0)->GetURL()); |
845 EXPECT_EQ(embedded_test_server()->GetURL("/title2.html"), | 841 EXPECT_EQ(embedded_test_server()->GetURL("/title2.html"), |
846 browser2->tab_strip_model()->GetWebContentsAt(1)->GetURL()); | 842 browser2->tab_strip_model()->GetWebContentsAt(1)->GetURL()); |
847 } | 843 } |
848 | 844 |
849 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 845 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
850 TestCloseTabDuringShutdown) { | 846 TestCloseTabDuringShutdown) { |
851 ASSERT_TRUE(embedded_test_server()->Start()); | 847 ASSERT_TRUE(embedded_test_server()->Start()); |
852 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 848 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
853 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 849 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
854 DisableHangMonitor(browsers_[0]); | 850 PrepareForDialog(browsers_[0]); |
855 | 851 |
856 RepeatedNotificationObserver cancel_observer( | 852 RepeatedNotificationObserver cancel_observer( |
857 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 853 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
858 chrome::CloseAllBrowsersAndQuit(); | 854 chrome::CloseAllBrowsersAndQuit(); |
859 | 855 |
860 browsers_.push_back(CreateBrowser(browser()->profile())); | 856 browsers_.push_back(CreateBrowser(browser()->profile())); |
861 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 857 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
862 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 858 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
863 DisableHangMonitor(browsers_[1]); | 859 PrepareForDialog(browsers_[1]); |
864 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 860 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
865 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 861 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
866 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 862 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
867 cancel_observer.Wait(); | 863 cancel_observer.Wait(); |
868 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 864 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
869 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 865 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
870 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 866 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
871 | 867 |
872 RepeatedNotificationObserver close_observer( | 868 RepeatedNotificationObserver close_observer( |
873 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 869 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
874 chrome::CloseAllBrowsersAndQuit(); | 870 chrome::CloseAllBrowsersAndQuit(); |
875 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 871 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
876 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 872 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
877 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 873 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
878 | 874 |
879 close_observer.Wait(); | 875 close_observer.Wait(); |
880 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 876 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
881 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 877 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
882 } | 878 } |
883 | 879 |
884 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 880 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
885 TestOpenAndCloseWindowDuringShutdown) { | 881 TestOpenAndCloseWindowDuringShutdown) { |
886 ASSERT_TRUE(embedded_test_server()->Start()); | 882 ASSERT_TRUE(embedded_test_server()->Start()); |
887 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 883 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
888 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 884 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
889 DisableHangMonitor(browsers_[0]); | 885 PrepareForDialog(browsers_[0]); |
890 | 886 |
891 RepeatedNotificationObserver cancel_observer( | 887 RepeatedNotificationObserver cancel_observer( |
892 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 888 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
893 chrome::CloseAllBrowsersAndQuit(); | 889 chrome::CloseAllBrowsersAndQuit(); |
894 | 890 |
895 browsers_.push_back(CreateBrowser(browser()->profile())); | 891 browsers_.push_back(CreateBrowser(browser()->profile())); |
896 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 892 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
897 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 893 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
898 DisableHangMonitor(browsers_[1]); | 894 PrepareForDialog(browsers_[1]); |
899 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 895 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
900 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 896 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
901 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 897 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
902 cancel_observer.Wait(); | 898 cancel_observer.Wait(); |
903 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 899 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
904 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 900 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
905 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 901 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
906 | 902 |
907 RepeatedNotificationObserver close_observer( | 903 RepeatedNotificationObserver close_observer( |
908 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 904 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
909 chrome::CloseAllBrowsersAndQuit(); | 905 chrome::CloseAllBrowsersAndQuit(); |
910 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 906 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
911 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 907 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
912 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 908 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
913 | 909 |
914 close_observer.Wait(); | 910 close_observer.Wait(); |
915 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 911 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
916 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 912 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
917 } | 913 } |
918 | 914 |
919 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 915 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
920 TestCloseWindowDuringShutdown) { | 916 TestCloseWindowDuringShutdown) { |
921 ASSERT_TRUE(embedded_test_server()->Start()); | 917 ASSERT_TRUE(embedded_test_server()->Start()); |
922 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 918 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
923 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 919 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
924 browsers_.push_back(CreateBrowser(browser()->profile())); | 920 browsers_.push_back(CreateBrowser(browser()->profile())); |
925 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 921 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
926 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 922 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
927 DisableHangMonitor(browsers_[0]); | 923 PrepareForDialog(browsers_[0]); |
928 DisableHangMonitor(browsers_[1]); | 924 PrepareForDialog(browsers_[1]); |
929 | 925 |
930 RepeatedNotificationObserver cancel_observer( | 926 RepeatedNotificationObserver cancel_observer( |
931 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 927 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
932 chrome::CloseAllBrowsersAndQuit(); | 928 chrome::CloseAllBrowsersAndQuit(); |
933 | 929 |
934 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 930 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
935 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 931 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
936 cancel_observer.Wait(); | 932 cancel_observer.Wait(); |
937 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 933 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
938 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 934 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1217 } | 1213 } |
1218 | 1214 |
1219 // Test shutdown with downloads in progress and beforeunload handlers. | 1215 // Test shutdown with downloads in progress and beforeunload handlers. |
1220 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, | 1216 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, |
1221 TestBeforeUnloadAndDownloads) { | 1217 TestBeforeUnloadAndDownloads) { |
1222 ASSERT_TRUE(embedded_test_server()->Start()); | 1218 ASSERT_TRUE(embedded_test_server()->Start()); |
1223 SetDownloadPathForProfile(browser()->profile()); | 1219 SetDownloadPathForProfile(browser()->profile()); |
1224 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); | 1220 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); |
1225 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 1221 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
1226 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 1222 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
1227 DisableHangMonitor(browser()); | 1223 PrepareForDialog(browser()); |
1228 | 1224 |
1229 content::WindowedNotificationObserver cancel_observer( | 1225 content::WindowedNotificationObserver cancel_observer( |
1230 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, | 1226 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, |
1231 content::NotificationService::AllSources()); | 1227 content::NotificationService::AllSources()); |
1232 TestBrowserCloseManager::AttemptClose( | 1228 TestBrowserCloseManager::AttemptClose( |
1233 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); | 1229 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); |
1234 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 1230 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
1235 cancel_observer.Wait(); | 1231 cancel_observer.Wait(); |
1236 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1232 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1237 | 1233 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1340 | 1336 |
1341 chrome::CloseAllBrowsers(); | 1337 chrome::CloseAllBrowsers(); |
1342 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1338 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
1343 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1339 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
1344 EXPECT_TRUE(IsBackgroundModeSuspended()); | 1340 EXPECT_TRUE(IsBackgroundModeSuspended()); |
1345 } | 1341 } |
1346 | 1342 |
1347 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | 1343 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
1348 BrowserCloseManagerWithBackgroundModeBrowserTest, | 1344 BrowserCloseManagerWithBackgroundModeBrowserTest, |
1349 testing::Bool()); | 1345 testing::Bool()); |
OLD | NEW |