| 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 |