Chromium Code Reviews| 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 content::PrepContentsForBeforeUnloadTest( |
|
Nico
2017/05/05 16:36:47
nit: If you think having the PrepareForDialog(WebC
Avi (use Gerrit)
2017/05/05 19:29:07
I don't understand your comment. I should name thi
Charlie Reis
2017/05/05 21:27:02
I think he meant to replace this line with Prepare
Avi (use Gerrit)
2017/05/05 22:22:01
Ooooh. Yes.
| |
| 300 browser->tab_strip_model()->GetWebContentsAt(i)); | |
| 301 } | |
| 304 } | 302 } |
| 305 | 303 |
| 306 std::vector<Browser*> browsers_; | 304 std::vector<Browser*> browsers_; |
| 307 }; | 305 }; |
| 308 | 306 |
| 309 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { | 307 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { |
| 310 ASSERT_TRUE(embedded_test_server()->Start()); | 308 ASSERT_TRUE(embedded_test_server()->Start()); |
| 311 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 309 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 312 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 310 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 313 DisableHangMonitor(browser()); | 311 PrepareForDialog(browser()); |
| 314 | 312 |
| 315 RepeatedNotificationObserver cancel_observer( | 313 RepeatedNotificationObserver cancel_observer( |
| 316 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 314 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 317 chrome::CloseAllBrowsersAndQuit(); | 315 chrome::CloseAllBrowsersAndQuit(); |
| 318 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 316 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 319 cancel_observer.Wait(); | 317 cancel_observer.Wait(); |
| 320 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 318 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 321 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 319 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 322 | 320 |
| 323 RepeatedNotificationObserver close_observer( | 321 RepeatedNotificationObserver close_observer( |
| 324 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 322 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 325 chrome::CloseAllBrowsersAndQuit(); | 323 chrome::CloseAllBrowsersAndQuit(); |
| 326 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 324 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 327 close_observer.Wait(); | 325 close_observer.Wait(); |
| 328 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 326 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 329 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 327 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 330 } | 328 } |
| 331 | 329 |
| 332 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 330 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 333 TestShutdownMoreThanOnce) { | 331 TestShutdownMoreThanOnce) { |
| 334 ASSERT_TRUE(embedded_test_server()->Start()); | 332 ASSERT_TRUE(embedded_test_server()->Start()); |
| 335 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 333 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 336 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 334 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 337 DisableHangMonitor(browser()); | 335 PrepareForDialog(browser()); |
| 338 | 336 |
| 339 RepeatedNotificationObserver cancel_observer( | 337 RepeatedNotificationObserver cancel_observer( |
| 340 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 338 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 341 chrome::CloseAllBrowsersAndQuit(); | 339 chrome::CloseAllBrowsersAndQuit(); |
| 342 chrome::CloseAllBrowsersAndQuit(); | 340 chrome::CloseAllBrowsersAndQuit(); |
| 343 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 341 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 344 cancel_observer.Wait(); | 342 cancel_observer.Wait(); |
| 345 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 343 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 346 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 344 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 347 | 345 |
| 348 RepeatedNotificationObserver close_observer( | 346 RepeatedNotificationObserver close_observer( |
| 349 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 347 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 350 chrome::CloseAllBrowsersAndQuit(); | 348 chrome::CloseAllBrowsersAndQuit(); |
| 351 chrome::CloseAllBrowsersAndQuit(); | 349 chrome::CloseAllBrowsersAndQuit(); |
| 352 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 350 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 353 close_observer.Wait(); | 351 close_observer.Wait(); |
| 354 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 352 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 355 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 353 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 356 } | 354 } |
| 357 | 355 |
| 358 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 356 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 359 PRE_TestSessionRestore) { | 357 PRE_TestSessionRestore) { |
| 360 ASSERT_TRUE(embedded_test_server()->Start()); | 358 ASSERT_TRUE(embedded_test_server()->Start()); |
| 361 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 359 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 362 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 360 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 363 AddBlankTabAndShow(browser()); | 361 AddBlankTabAndShow(browser()); |
| 364 ASSERT_NO_FATAL_FAILURE( | 362 ASSERT_NO_FATAL_FAILURE( |
| 365 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); | 363 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); |
| 366 DisableHangMonitor(browser()); | 364 PrepareForDialog(browser()); |
| 367 | 365 |
| 368 RepeatedNotificationObserver cancel_observer( | 366 RepeatedNotificationObserver cancel_observer( |
| 369 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 367 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 370 chrome::CloseAllBrowsersAndQuit(); | 368 chrome::CloseAllBrowsersAndQuit(); |
| 371 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 369 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 372 cancel_observer.Wait(); | 370 cancel_observer.Wait(); |
| 373 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 371 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 374 | 372 |
| 375 browser()->tab_strip_model() | 373 browser()->tab_strip_model() |
| 376 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); | 374 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 404 | 402 |
| 405 // Test that browser windows are only closed if all browsers are ready to close | 403 // 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. | 404 // and that all beforeunload dialogs are shown again after a cancel. |
| 407 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { | 405 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { |
| 408 ASSERT_TRUE(embedded_test_server()->Start()); | 406 ASSERT_TRUE(embedded_test_server()->Start()); |
| 409 browsers_.push_back(CreateBrowser(browser()->profile())); | 407 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 410 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 408 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 411 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 409 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 412 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 410 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 413 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 411 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 414 DisableHangMonitor(browsers_[0]); | 412 PrepareForDialog(browsers_[0]); |
| 415 DisableHangMonitor(browsers_[1]); | 413 PrepareForDialog(browsers_[1]); |
| 416 | 414 |
| 417 // Cancel shutdown on the first beforeunload event. | 415 // Cancel shutdown on the first beforeunload event. |
| 418 { | 416 { |
| 419 RepeatedNotificationObserver cancel_observer( | 417 RepeatedNotificationObserver cancel_observer( |
| 420 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 418 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 421 chrome::CloseAllBrowsersAndQuit(); | 419 chrome::CloseAllBrowsersAndQuit(); |
| 422 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 420 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 423 cancel_observer.Wait(); | 421 cancel_observer.Wait(); |
| 424 } | 422 } |
| 425 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 423 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( | 457 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 460 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 458 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 461 AddBlankTabAndShow(browsers_[0]); | 459 AddBlankTabAndShow(browsers_[0]); |
| 462 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 460 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 463 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 461 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 464 AddBlankTabAndShow(browsers_[0]); | 462 AddBlankTabAndShow(browsers_[0]); |
| 465 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 463 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 466 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 464 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 | 465 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 468 // the dialog is guaranteed to show. | 466 // the dialog is guaranteed to show. |
| 469 DisableHangMonitor(browsers_[0]->tab_strip_model()->GetWebContentsAt(1)); | 467 PrepareForDialog(browsers_[0]->tab_strip_model()->GetWebContentsAt(1)); |
| 470 | 468 |
| 471 RepeatedNotificationObserver cancel_observer( | 469 RepeatedNotificationObserver cancel_observer( |
| 472 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 470 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 473 chrome::CloseAllBrowsersAndQuit(); | 471 chrome::CloseAllBrowsersAndQuit(); |
| 474 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 472 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 475 cancel_observer.Wait(); | 473 cancel_observer.Wait(); |
| 476 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 474 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 477 // All tabs should still be open. | 475 // All tabs should still be open. |
| 478 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); | 476 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); |
| 479 | 477 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 495 browsers_.push_back(CreateBrowser(browser()->profile())); | 493 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 496 browsers_.push_back(CreateBrowser(browser()->profile())); | 494 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 497 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 495 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 498 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 496 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 499 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 497 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 500 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 498 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 501 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 499 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 502 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 500 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 | 501 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 504 // the dialog is guaranteed to show. | 502 // the dialog is guaranteed to show. |
| 505 DisableHangMonitor(browsers_[1]); | 503 PrepareForDialog(browsers_[1]); |
| 506 | 504 |
| 507 RepeatedNotificationObserver cancel_observer( | 505 RepeatedNotificationObserver cancel_observer( |
| 508 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 506 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 509 chrome::CloseAllBrowsersAndQuit(); | 507 chrome::CloseAllBrowsersAndQuit(); |
| 510 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 508 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 511 cancel_observer.Wait(); | 509 cancel_observer.Wait(); |
| 512 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 510 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 513 // All windows should still be open. | 511 // All windows should still be open. |
| 514 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 512 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 515 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 513 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 540 if (i) | 538 if (i) |
| 541 AddBlankTabAndShow(browsers_[0]); | 539 AddBlankTabAndShow(browsers_[0]); |
| 542 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 540 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 543 browsers_[0], | 541 browsers_[0], |
| 544 embedded_test_server()->GetURL((i == kResposiveTabIndex) | 542 embedded_test_server()->GetURL((i == kResposiveTabIndex) |
| 545 ? "/beforeunload.html" | 543 ? "/beforeunload.html" |
| 546 : "/beforeunload_slow.html"))); | 544 : "/beforeunload_slow.html"))); |
| 547 } | 545 } |
| 548 // Disable the hang monitor in the tab that is not expected to hang, so that | 546 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 549 // the dialog is guaranteed to show. | 547 // the dialog is guaranteed to show. |
| 550 DisableHangMonitor( | 548 PrepareForDialog( |
| 551 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex)); | 549 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex)); |
| 552 | 550 |
| 553 RepeatedNotificationObserver cancel_observer( | 551 RepeatedNotificationObserver cancel_observer( |
| 554 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 552 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 555 chrome::CloseAllBrowsersAndQuit(); | 553 chrome::CloseAllBrowsersAndQuit(); |
| 556 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 554 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 557 cancel_observer.Wait(); | 555 cancel_observer.Wait(); |
| 558 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 556 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 559 | 557 |
| 560 // All tabs should still be open. | 558 // All tabs should still be open. |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 589 if (i) | 587 if (i) |
| 590 browsers_.push_back(CreateBrowser(browser()->profile())); | 588 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 591 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 589 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 592 browsers_[i], | 590 browsers_[i], |
| 593 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) | 591 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) |
| 594 ? "/beforeunload.html" | 592 ? "/beforeunload.html" |
| 595 : "/beforeunload_slow.html"))); | 593 : "/beforeunload_slow.html"))); |
| 596 } | 594 } |
| 597 // Disable the hang monitor in the tab that is not expected to hang, so that | 595 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 598 // the dialog is guaranteed to show. | 596 // the dialog is guaranteed to show. |
| 599 DisableHangMonitor(browsers_[kResposiveBrowserIndex]); | 597 PrepareForDialog(browsers_[kResposiveBrowserIndex]); |
| 600 | 598 |
| 601 RepeatedNotificationObserver cancel_observer( | 599 RepeatedNotificationObserver cancel_observer( |
| 602 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); | 600 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); |
| 603 chrome::CloseAllBrowsersAndQuit(); | 601 chrome::CloseAllBrowsersAndQuit(); |
| 604 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 602 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 605 cancel_observer.Wait(); | 603 cancel_observer.Wait(); |
| 606 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 604 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 607 | 605 |
| 608 // All windows should still be open. | 606 // All windows should still be open. |
| 609 for (int i = 0; i < kBrowserCount; i++) | 607 for (int i = 0; i < kBrowserCount; i++) |
| 610 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); | 608 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); |
| 611 | 609 |
| 612 // Quit, this time accepting close confirmation dialog. | 610 // Quit, this time accepting close confirmation dialog. |
| 613 RepeatedNotificationObserver close_observer( | 611 RepeatedNotificationObserver close_observer( |
| 614 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); | 612 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); |
| 615 chrome::CloseAllBrowsersAndQuit(); | 613 chrome::CloseAllBrowsersAndQuit(); |
| 616 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 614 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 617 close_observer.Wait(); | 615 close_observer.Wait(); |
| 618 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 616 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 619 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 617 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 620 } | 618 } |
| 621 | 619 |
| 622 // Test that a window created during shutdown is closed. | 620 // Test that a window created during shutdown is closed. |
| 623 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 621 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 624 TestAddWindowDuringShutdown) { | 622 TestAddWindowDuringShutdown) { |
| 625 ASSERT_TRUE(embedded_test_server()->Start()); | 623 ASSERT_TRUE(embedded_test_server()->Start()); |
| 626 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 624 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 627 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 625 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 628 DisableHangMonitor(browsers_[0]); | 626 PrepareForDialog(browsers_[0]); |
| 629 | 627 |
| 630 RepeatedNotificationObserver close_observer( | 628 RepeatedNotificationObserver close_observer( |
| 631 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 629 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 632 chrome::CloseAllBrowsersAndQuit(); | 630 chrome::CloseAllBrowsersAndQuit(); |
| 633 browsers_.push_back(CreateBrowser(browser()->profile())); | 631 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 634 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 632 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 635 close_observer.Wait(); | 633 close_observer.Wait(); |
| 636 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 634 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 637 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 635 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 638 } | 636 } |
| 639 | 637 |
| 640 // Test that a window created during shutdown with a beforeunload handler can | 638 // Test that a window created during shutdown with a beforeunload handler can |
| 641 // cancel the shutdown. | 639 // cancel the shutdown. |
| 642 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 640 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 643 TestAddWindowWithBeforeUnloadDuringShutdown) { | 641 TestAddWindowWithBeforeUnloadDuringShutdown) { |
| 644 ASSERT_TRUE(embedded_test_server()->Start()); | 642 ASSERT_TRUE(embedded_test_server()->Start()); |
| 645 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 643 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 646 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 644 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 647 DisableHangMonitor(browsers_[0]); | 645 PrepareForDialog(browsers_[0]); |
| 648 | 646 |
| 649 RepeatedNotificationObserver cancel_observer( | 647 RepeatedNotificationObserver cancel_observer( |
| 650 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 648 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 651 chrome::CloseAllBrowsersAndQuit(); | 649 chrome::CloseAllBrowsersAndQuit(); |
| 652 browsers_.push_back(CreateBrowser(browser()->profile())); | 650 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 653 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 651 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 654 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 652 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 655 DisableHangMonitor(browsers_[1]); | 653 PrepareForDialog(browsers_[1]); |
| 656 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 654 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 657 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 655 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 658 cancel_observer.Wait(); | 656 cancel_observer.Wait(); |
| 659 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 657 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 660 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 658 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 661 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 659 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 662 | 660 |
| 663 // Allow shutdown for both beforeunload dialogs. | 661 // Allow shutdown for both beforeunload dialogs. |
| 664 RepeatedNotificationObserver close_observer( | 662 RepeatedNotificationObserver close_observer( |
| 665 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 663 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 666 chrome::CloseAllBrowsersAndQuit(); | 664 chrome::CloseAllBrowsersAndQuit(); |
| 667 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 665 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 668 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 666 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 669 close_observer.Wait(); | 667 close_observer.Wait(); |
| 670 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 668 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 671 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 669 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 672 } | 670 } |
| 673 | 671 |
| 674 // Test that tabs added during shutdown are closed. | 672 // Test that tabs added during shutdown are closed. |
| 675 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 673 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 676 TestAddTabDuringShutdown) { | 674 TestAddTabDuringShutdown) { |
| 677 ASSERT_TRUE(embedded_test_server()->Start()); | 675 ASSERT_TRUE(embedded_test_server()->Start()); |
| 678 browsers_.push_back(CreateBrowser(browser()->profile())); | 676 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 679 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 677 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 680 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 678 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 681 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 679 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 682 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 680 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 683 DisableHangMonitor(browsers_[0]); | 681 PrepareForDialog(browsers_[0]); |
| 684 DisableHangMonitor(browsers_[1]); | 682 PrepareForDialog(browsers_[1]); |
| 685 | 683 |
| 686 RepeatedNotificationObserver close_observer( | 684 RepeatedNotificationObserver close_observer( |
| 687 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 685 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 688 chrome::CloseAllBrowsersAndQuit(); | 686 chrome::CloseAllBrowsersAndQuit(); |
| 689 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 687 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 690 AddBlankTabAndShow(browsers_[0]); | 688 AddBlankTabAndShow(browsers_[0]); |
| 691 AddBlankTabAndShow(browsers_[1]); | 689 AddBlankTabAndShow(browsers_[1]); |
| 692 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 690 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 693 close_observer.Wait(); | 691 close_observer.Wait(); |
| 694 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 692 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 695 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 693 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 696 } | 694 } |
| 697 | 695 |
| 698 // Test that tabs created during shutdown with beforeunload handlers can cancel | 696 // Test that tabs created during shutdown with beforeunload handlers can cancel |
| 699 // the shutdown. | 697 // the shutdown. |
| 700 | 698 |
| 701 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 699 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 702 TestAddTabWithBeforeUnloadDuringShutdown) { | 700 TestAddTabWithBeforeUnloadDuringShutdown) { |
| 703 ASSERT_TRUE(embedded_test_server()->Start()); | 701 ASSERT_TRUE(embedded_test_server()->Start()); |
| 704 browsers_.push_back(CreateBrowser(browser()->profile())); | 702 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 705 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 703 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 706 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 704 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 707 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 705 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 708 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 706 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 709 DisableHangMonitor(browsers_[0]); | 707 PrepareForDialog(browsers_[0]); |
| 710 DisableHangMonitor(browsers_[1]); | 708 PrepareForDialog(browsers_[1]); |
| 711 | 709 |
| 712 RepeatedNotificationObserver cancel_observer( | 710 RepeatedNotificationObserver cancel_observer( |
| 713 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 711 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 714 chrome::CloseAllBrowsersAndQuit(); | 712 chrome::CloseAllBrowsersAndQuit(); |
| 715 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 713 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 716 AddBlankTabAndShow(browsers_[0]); | 714 AddBlankTabAndShow(browsers_[0]); |
| 717 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 715 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 718 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 716 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 719 AddBlankTabAndShow(browsers_[1]); | 717 AddBlankTabAndShow(browsers_[1]); |
| 720 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 718 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 721 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 719 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 722 DisableHangMonitor(browsers_[0]); | 720 PrepareForDialog(browsers_[0]); |
| 723 DisableHangMonitor(browsers_[1]); | 721 PrepareForDialog(browsers_[1]); |
| 724 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 722 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 725 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 723 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 726 cancel_observer.Wait(); | 724 cancel_observer.Wait(); |
| 727 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 725 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 728 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); | 726 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); |
| 729 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); | 727 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); |
| 730 | 728 |
| 731 RepeatedNotificationObserver close_observer( | 729 RepeatedNotificationObserver close_observer( |
| 732 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 730 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 733 chrome::CloseAllBrowsersAndQuit(); | 731 chrome::CloseAllBrowsersAndQuit(); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 780 ui_test_utils::NavigateToURLWithDisposition( | 778 ui_test_utils::NavigateToURLWithDisposition( |
| 781 browser2, embedded_test_server()->GetURL("/title2.html"), | 779 browser2, embedded_test_server()->GetURL("/title2.html"), |
| 782 WindowOpenDisposition::NEW_FOREGROUND_TAB, | 780 WindowOpenDisposition::NEW_FOREGROUND_TAB, |
| 783 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 781 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 784 content::WaitForLoadStop(browser2->tab_strip_model()->GetWebContentsAt(1)); | 782 content::WaitForLoadStop(browser2->tab_strip_model()->GetWebContentsAt(1)); |
| 785 EXPECT_FALSE(browser2->tab_strip_model() | 783 EXPECT_FALSE(browser2->tab_strip_model() |
| 786 ->GetWebContentsAt(1) | 784 ->GetWebContentsAt(1) |
| 787 ->NeedToFireBeforeUnload()); | 785 ->NeedToFireBeforeUnload()); |
| 788 EXPECT_EQ(2, browser2->tab_strip_model()->count()); | 786 EXPECT_EQ(2, browser2->tab_strip_model()->count()); |
| 789 | 787 |
| 790 DisableHangMonitor(browser2); | 788 PrepareForDialog(browser2); |
| 791 | 789 |
| 792 // The test. | 790 // The test. |
| 793 | 791 |
| 794 TabRestoreServiceChangesObserver restore_observer(browser2->profile()); | 792 TabRestoreServiceChangesObserver restore_observer(browser2->profile()); |
| 795 content::WindowedNotificationObserver observer( | 793 content::WindowedNotificationObserver observer( |
| 796 chrome::NOTIFICATION_BROWSER_CLOSED, | 794 chrome::NOTIFICATION_BROWSER_CLOSED, |
| 797 content::NotificationService::AllSources()); | 795 content::NotificationService::AllSources()); |
| 798 chrome::CloseWindow(browser2); | 796 chrome::CloseWindow(browser2); |
| 799 // Just to be sure CloseWindow doesn't have asynchronous tasks | 797 // Just to be sure CloseWindow doesn't have asynchronous tasks |
| 800 // that could have an impact. | 798 // 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()); | 842 browser2->tab_strip_model()->GetWebContentsAt(0)->GetURL()); |
| 845 EXPECT_EQ(embedded_test_server()->GetURL("/title2.html"), | 843 EXPECT_EQ(embedded_test_server()->GetURL("/title2.html"), |
| 846 browser2->tab_strip_model()->GetWebContentsAt(1)->GetURL()); | 844 browser2->tab_strip_model()->GetWebContentsAt(1)->GetURL()); |
| 847 } | 845 } |
| 848 | 846 |
| 849 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 847 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 850 TestCloseTabDuringShutdown) { | 848 TestCloseTabDuringShutdown) { |
| 851 ASSERT_TRUE(embedded_test_server()->Start()); | 849 ASSERT_TRUE(embedded_test_server()->Start()); |
| 852 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 850 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 853 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 851 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 854 DisableHangMonitor(browsers_[0]); | 852 PrepareForDialog(browsers_[0]); |
| 855 | 853 |
| 856 RepeatedNotificationObserver cancel_observer( | 854 RepeatedNotificationObserver cancel_observer( |
| 857 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 855 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 858 chrome::CloseAllBrowsersAndQuit(); | 856 chrome::CloseAllBrowsersAndQuit(); |
| 859 | 857 |
| 860 browsers_.push_back(CreateBrowser(browser()->profile())); | 858 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 861 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 859 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 862 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 860 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 863 DisableHangMonitor(browsers_[1]); | 861 PrepareForDialog(browsers_[1]); |
| 864 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 862 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 865 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 863 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 866 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 864 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 867 cancel_observer.Wait(); | 865 cancel_observer.Wait(); |
| 868 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 866 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 869 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 867 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 870 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 868 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 871 | 869 |
| 872 RepeatedNotificationObserver close_observer( | 870 RepeatedNotificationObserver close_observer( |
| 873 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 871 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 874 chrome::CloseAllBrowsersAndQuit(); | 872 chrome::CloseAllBrowsersAndQuit(); |
| 875 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 873 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 876 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 874 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 877 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 875 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 878 | 876 |
| 879 close_observer.Wait(); | 877 close_observer.Wait(); |
| 880 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 878 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 881 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 879 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 882 } | 880 } |
| 883 | 881 |
| 884 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 882 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 885 TestOpenAndCloseWindowDuringShutdown) { | 883 TestOpenAndCloseWindowDuringShutdown) { |
| 886 ASSERT_TRUE(embedded_test_server()->Start()); | 884 ASSERT_TRUE(embedded_test_server()->Start()); |
| 887 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 885 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 888 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 886 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 889 DisableHangMonitor(browsers_[0]); | 887 PrepareForDialog(browsers_[0]); |
| 890 | 888 |
| 891 RepeatedNotificationObserver cancel_observer( | 889 RepeatedNotificationObserver cancel_observer( |
| 892 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 890 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 893 chrome::CloseAllBrowsersAndQuit(); | 891 chrome::CloseAllBrowsersAndQuit(); |
| 894 | 892 |
| 895 browsers_.push_back(CreateBrowser(browser()->profile())); | 893 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 896 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 894 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 897 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 895 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 898 DisableHangMonitor(browsers_[1]); | 896 PrepareForDialog(browsers_[1]); |
| 899 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 897 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 900 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 898 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 901 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 899 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 902 cancel_observer.Wait(); | 900 cancel_observer.Wait(); |
| 903 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 901 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 904 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 902 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 905 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 903 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 906 | 904 |
| 907 RepeatedNotificationObserver close_observer( | 905 RepeatedNotificationObserver close_observer( |
| 908 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 906 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 909 chrome::CloseAllBrowsersAndQuit(); | 907 chrome::CloseAllBrowsersAndQuit(); |
| 910 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 908 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 911 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 909 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 912 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 910 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 913 | 911 |
| 914 close_observer.Wait(); | 912 close_observer.Wait(); |
| 915 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 913 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 916 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 914 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 917 } | 915 } |
| 918 | 916 |
| 919 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 917 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 920 TestCloseWindowDuringShutdown) { | 918 TestCloseWindowDuringShutdown) { |
| 921 ASSERT_TRUE(embedded_test_server()->Start()); | 919 ASSERT_TRUE(embedded_test_server()->Start()); |
| 922 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 920 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 923 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 921 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 924 browsers_.push_back(CreateBrowser(browser()->profile())); | 922 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 925 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 923 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 926 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 924 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 927 DisableHangMonitor(browsers_[0]); | 925 PrepareForDialog(browsers_[0]); |
| 928 DisableHangMonitor(browsers_[1]); | 926 PrepareForDialog(browsers_[1]); |
| 929 | 927 |
| 930 RepeatedNotificationObserver cancel_observer( | 928 RepeatedNotificationObserver cancel_observer( |
| 931 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 929 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 932 chrome::CloseAllBrowsersAndQuit(); | 930 chrome::CloseAllBrowsersAndQuit(); |
| 933 | 931 |
| 934 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 932 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
| 935 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 933 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 936 cancel_observer.Wait(); | 934 cancel_observer.Wait(); |
| 937 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 935 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 938 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 936 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1217 } | 1215 } |
| 1218 | 1216 |
| 1219 // Test shutdown with downloads in progress and beforeunload handlers. | 1217 // Test shutdown with downloads in progress and beforeunload handlers. |
| 1220 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, | 1218 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, |
| 1221 TestBeforeUnloadAndDownloads) { | 1219 TestBeforeUnloadAndDownloads) { |
| 1222 ASSERT_TRUE(embedded_test_server()->Start()); | 1220 ASSERT_TRUE(embedded_test_server()->Start()); |
| 1223 SetDownloadPathForProfile(browser()->profile()); | 1221 SetDownloadPathForProfile(browser()->profile()); |
| 1224 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); | 1222 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); |
| 1225 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 1223 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 1226 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 1224 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 1227 DisableHangMonitor(browser()); | 1225 PrepareForDialog(browser()); |
| 1228 | 1226 |
| 1229 content::WindowedNotificationObserver cancel_observer( | 1227 content::WindowedNotificationObserver cancel_observer( |
| 1230 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, | 1228 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, |
| 1231 content::NotificationService::AllSources()); | 1229 content::NotificationService::AllSources()); |
| 1232 TestBrowserCloseManager::AttemptClose( | 1230 TestBrowserCloseManager::AttemptClose( |
| 1233 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); | 1231 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); |
| 1234 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 1232 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 1235 cancel_observer.Wait(); | 1233 cancel_observer.Wait(); |
| 1236 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1234 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 1237 | 1235 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1340 | 1338 |
| 1341 chrome::CloseAllBrowsers(); | 1339 chrome::CloseAllBrowsers(); |
| 1342 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1340 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 1343 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1341 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 1344 EXPECT_TRUE(IsBackgroundModeSuspended()); | 1342 EXPECT_TRUE(IsBackgroundModeSuspended()); |
| 1345 } | 1343 } |
| 1346 | 1344 |
| 1347 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | 1345 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 1348 BrowserCloseManagerWithBackgroundModeBrowserTest, | 1346 BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 1349 testing::Bool()); | 1347 testing::Bool()); |
| OLD | NEW |