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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 64 | 64 |
| 65 app_modal::NativeAppModalDialog* GetNextDialog() { | 65 app_modal::NativeAppModalDialog* GetNextDialog() { |
| 66 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); | 66 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); |
| 67 EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); | 67 EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); |
| 68 app_modal::JavaScriptAppModalDialog* js_dialog = | 68 app_modal::JavaScriptAppModalDialog* js_dialog = |
| 69 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); | 69 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); |
| 70 CHECK(js_dialog->native_dialog()); | 70 CHECK(js_dialog->native_dialog()); |
| 71 return js_dialog->native_dialog(); | 71 return js_dialog->native_dialog(); |
| 72 } | 72 } |
| 73 | 73 |
| 74 // Note: call |DisableHangMonitor| on the relevant WebContents or Browser before | 74 // Note: call |PrepareForDialog| on the relevant WebContents or Browser before |
| 75 // trying to close it, to avoid flakiness. https://crbug.com/519646 | 75 // trying to close it, to avoid flakiness. https://crbug.com/519646 |
| 76 void AcceptClose() { | 76 void AcceptClose() { |
| 77 GetNextDialog()->AcceptAppModalDialog(); | 77 GetNextDialog()->AcceptAppModalDialog(); |
| 78 } | 78 } |
| 79 | 79 |
| 80 // Note: call |DisableHangMonitor| on the relevant WebContents or Browser before | 80 // Note: call |PrepareForDialog| on the relevant WebContents or Browser before |
| 81 // trying to close it, to avoid flakiness. https://crbug.com/519646 | 81 // trying to close it, to avoid flakiness. https://crbug.com/519646 |
| 82 void CancelClose() { | 82 void CancelClose() { |
| 83 GetNextDialog()->CancelAppModalDialog(); | 83 GetNextDialog()->CancelAppModalDialog(); |
| 84 } | 84 } |
| 85 | 85 |
| 86 class RepeatedNotificationObserver : public content::NotificationObserver { | 86 class RepeatedNotificationObserver : public content::NotificationObserver { |
| 87 public: | 87 public: |
| 88 explicit RepeatedNotificationObserver(int type, int count) | 88 explicit RepeatedNotificationObserver(int type, int count) |
| 89 : num_outstanding_(count), running_(false) { | 89 : num_outstanding_(count), running_(false) { |
| 90 registrar_.Add(this, type, content::NotificationService::AllSources()); | 90 registrar_.Add(this, type, content::NotificationService::AllSources()); |
| (...skipping 192 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 // Prepares a WebContents or Browser for a beforeunload dialog. |
| 294 // be called before close action when using |AcceptClose| or |CancelClose|, to | 294 // |
| 295 // ensure the timeout does not prevent the dialog from appearing. | 295 // This comprises two things. First, it makes sure that the beforeunload hang |
| 296 // https://crbug.com/519646 | 296 // monitor will not trigger, otherwise timeout might prevent the dialog from |
| 297 void DisableHangMonitor(content::WebContents* web_contents) { | 297 // appearing. See https://crbug.com/519646 . |
| 298 // | |
| 299 // Second, beforeunload dialogs require a user gesture, so it makes one. | |
| 300 void PrepareForDialog(content::WebContents* web_contents) { | |
|
Charlie Reis
2017/04/10 06:20:11
This might be a good candidate for a utility in co
Avi (use Gerrit)
2017/05/05 15:30:04
Done.
| |
| 298 web_contents->GetMainFrame()->DisableBeforeUnloadHangMonitorForTesting(); | 301 web_contents->GetMainFrame()->DisableBeforeUnloadHangMonitorForTesting(); |
| 302 for (auto* frame : web_contents->GetAllFrames()) | |
| 303 frame->ExecuteJavaScriptWithUserGestureForTests(base::string16()); | |
| 299 } | 304 } |
| 300 | 305 |
| 301 void DisableHangMonitor(Browser* browser) { | 306 void PrepareForDialog(Browser* browser) { |
| 302 for (int i = 0; i < browser->tab_strip_model()->count(); i++) | 307 for (int i = 0; i < browser->tab_strip_model()->count(); i++) |
| 303 DisableHangMonitor(browser->tab_strip_model()->GetWebContentsAt(i)); | 308 PrepareForDialog(browser->tab_strip_model()->GetWebContentsAt(i)); |
| 304 } | 309 } |
| 305 | 310 |
| 306 std::vector<Browser*> browsers_; | 311 std::vector<Browser*> browsers_; |
| 307 }; | 312 }; |
| 308 | 313 |
| 309 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { | 314 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { |
| 310 ASSERT_TRUE(embedded_test_server()->Start()); | 315 ASSERT_TRUE(embedded_test_server()->Start()); |
| 311 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 316 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 312 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 317 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 313 DisableHangMonitor(browser()); | 318 PrepareForDialog(browser()); |
| 314 | 319 |
| 315 RepeatedNotificationObserver cancel_observer( | 320 RepeatedNotificationObserver cancel_observer( |
| 316 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 321 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 317 chrome::CloseAllBrowsersAndQuit(); | 322 chrome::CloseAllBrowsersAndQuit(); |
| 318 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 323 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 319 cancel_observer.Wait(); | 324 cancel_observer.Wait(); |
| 320 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 325 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 321 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 326 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 322 | 327 |
| 323 RepeatedNotificationObserver close_observer( | 328 RepeatedNotificationObserver close_observer( |
| 324 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 329 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 325 chrome::CloseAllBrowsersAndQuit(); | 330 chrome::CloseAllBrowsersAndQuit(); |
| 326 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 331 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 327 close_observer.Wait(); | 332 close_observer.Wait(); |
| 328 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 333 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 329 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 334 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 330 } | 335 } |
| 331 | 336 |
| 332 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 337 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 333 TestShutdownMoreThanOnce) { | 338 TestShutdownMoreThanOnce) { |
| 334 ASSERT_TRUE(embedded_test_server()->Start()); | 339 ASSERT_TRUE(embedded_test_server()->Start()); |
| 335 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 340 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 336 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 341 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 337 DisableHangMonitor(browser()); | 342 PrepareForDialog(browser()); |
| 338 | 343 |
| 339 RepeatedNotificationObserver cancel_observer( | 344 RepeatedNotificationObserver cancel_observer( |
| 340 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 345 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 341 chrome::CloseAllBrowsersAndQuit(); | 346 chrome::CloseAllBrowsersAndQuit(); |
| 342 chrome::CloseAllBrowsersAndQuit(); | 347 chrome::CloseAllBrowsersAndQuit(); |
| 343 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 348 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 344 cancel_observer.Wait(); | 349 cancel_observer.Wait(); |
| 345 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 350 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 346 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 351 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 347 | 352 |
| 348 RepeatedNotificationObserver close_observer( | 353 RepeatedNotificationObserver close_observer( |
| 349 chrome::NOTIFICATION_BROWSER_CLOSED, 1); | 354 chrome::NOTIFICATION_BROWSER_CLOSED, 1); |
| 350 chrome::CloseAllBrowsersAndQuit(); | 355 chrome::CloseAllBrowsersAndQuit(); |
| 351 chrome::CloseAllBrowsersAndQuit(); | 356 chrome::CloseAllBrowsersAndQuit(); |
| 352 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 357 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 353 close_observer.Wait(); | 358 close_observer.Wait(); |
| 354 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 359 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 355 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 360 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 356 } | 361 } |
| 357 | 362 |
| 358 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 363 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 359 PRE_TestSessionRestore) { | 364 PRE_TestSessionRestore) { |
| 360 ASSERT_TRUE(embedded_test_server()->Start()); | 365 ASSERT_TRUE(embedded_test_server()->Start()); |
| 361 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 366 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 362 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 367 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 363 AddBlankTabAndShow(browser()); | 368 AddBlankTabAndShow(browser()); |
| 364 ASSERT_NO_FATAL_FAILURE( | 369 ASSERT_NO_FATAL_FAILURE( |
| 365 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); | 370 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); |
| 366 DisableHangMonitor(browser()); | 371 PrepareForDialog(browser()); |
| 367 | 372 |
| 368 RepeatedNotificationObserver cancel_observer( | 373 RepeatedNotificationObserver cancel_observer( |
| 369 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 374 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 370 chrome::CloseAllBrowsersAndQuit(); | 375 chrome::CloseAllBrowsersAndQuit(); |
| 371 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 376 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 372 cancel_observer.Wait(); | 377 cancel_observer.Wait(); |
| 373 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 378 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 374 | 379 |
| 375 browser()->tab_strip_model() | 380 browser()->tab_strip_model() |
| 376 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); | 381 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 404 | 409 |
| 405 // Test that browser windows are only closed if all browsers are ready to close | 410 // 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. | 411 // and that all beforeunload dialogs are shown again after a cancel. |
| 407 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { | 412 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { |
| 408 ASSERT_TRUE(embedded_test_server()->Start()); | 413 ASSERT_TRUE(embedded_test_server()->Start()); |
| 409 browsers_.push_back(CreateBrowser(browser()->profile())); | 414 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 410 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 415 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 411 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 416 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 412 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 417 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 413 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 418 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 414 DisableHangMonitor(browsers_[0]); | 419 PrepareForDialog(browsers_[0]); |
| 415 DisableHangMonitor(browsers_[1]); | 420 PrepareForDialog(browsers_[1]); |
| 416 | 421 |
| 417 // Cancel shutdown on the first beforeunload event. | 422 // Cancel shutdown on the first beforeunload event. |
| 418 { | 423 { |
| 419 RepeatedNotificationObserver cancel_observer( | 424 RepeatedNotificationObserver cancel_observer( |
| 420 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 425 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 421 chrome::CloseAllBrowsersAndQuit(); | 426 chrome::CloseAllBrowsersAndQuit(); |
| 422 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 427 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 423 cancel_observer.Wait(); | 428 cancel_observer.Wait(); |
| 424 } | 429 } |
| 425 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 430 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( | 464 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 460 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 465 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 461 AddBlankTabAndShow(browsers_[0]); | 466 AddBlankTabAndShow(browsers_[0]); |
| 462 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 467 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 463 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 468 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 464 AddBlankTabAndShow(browsers_[0]); | 469 AddBlankTabAndShow(browsers_[0]); |
| 465 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 470 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 466 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 471 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 | 472 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 468 // the dialog is guaranteed to show. | 473 // the dialog is guaranteed to show. |
| 469 DisableHangMonitor(browsers_[0]->tab_strip_model()->GetWebContentsAt(1)); | 474 PrepareForDialog(browsers_[0]->tab_strip_model()->GetWebContentsAt(1)); |
| 470 | 475 |
| 471 RepeatedNotificationObserver cancel_observer( | 476 RepeatedNotificationObserver cancel_observer( |
| 472 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 477 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 473 chrome::CloseAllBrowsersAndQuit(); | 478 chrome::CloseAllBrowsersAndQuit(); |
| 474 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 479 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 475 cancel_observer.Wait(); | 480 cancel_observer.Wait(); |
| 476 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 481 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 477 // All tabs should still be open. | 482 // All tabs should still be open. |
| 478 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); | 483 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); |
| 479 | 484 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 495 browsers_.push_back(CreateBrowser(browser()->profile())); | 500 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 496 browsers_.push_back(CreateBrowser(browser()->profile())); | 501 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 497 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 502 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 498 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 503 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); |
| 499 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 504 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 500 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 505 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 501 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 506 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 502 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); | 507 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 | 508 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 504 // the dialog is guaranteed to show. | 509 // the dialog is guaranteed to show. |
| 505 DisableHangMonitor(browsers_[1]); | 510 PrepareForDialog(browsers_[1]); |
| 506 | 511 |
| 507 RepeatedNotificationObserver cancel_observer( | 512 RepeatedNotificationObserver cancel_observer( |
| 508 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 513 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 509 chrome::CloseAllBrowsersAndQuit(); | 514 chrome::CloseAllBrowsersAndQuit(); |
| 510 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 515 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 511 cancel_observer.Wait(); | 516 cancel_observer.Wait(); |
| 512 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 517 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 513 // All windows should still be open. | 518 // All windows should still be open. |
| 514 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 519 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 515 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 520 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 540 if (i) | 545 if (i) |
| 541 AddBlankTabAndShow(browsers_[0]); | 546 AddBlankTabAndShow(browsers_[0]); |
| 542 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 547 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 543 browsers_[0], | 548 browsers_[0], |
| 544 embedded_test_server()->GetURL((i == kResposiveTabIndex) | 549 embedded_test_server()->GetURL((i == kResposiveTabIndex) |
| 545 ? "/beforeunload.html" | 550 ? "/beforeunload.html" |
| 546 : "/beforeunload_slow.html"))); | 551 : "/beforeunload_slow.html"))); |
| 547 } | 552 } |
| 548 // Disable the hang monitor in the tab that is not expected to hang, so that | 553 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 549 // the dialog is guaranteed to show. | 554 // the dialog is guaranteed to show. |
| 550 DisableHangMonitor( | 555 PrepareForDialog( |
| 551 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex)); | 556 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex)); |
| 552 | 557 |
| 553 RepeatedNotificationObserver cancel_observer( | 558 RepeatedNotificationObserver cancel_observer( |
| 554 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 559 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 555 chrome::CloseAllBrowsersAndQuit(); | 560 chrome::CloseAllBrowsersAndQuit(); |
| 556 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 561 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 557 cancel_observer.Wait(); | 562 cancel_observer.Wait(); |
| 558 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 563 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 559 | 564 |
| 560 // All tabs should still be open. | 565 // All tabs should still be open. |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 589 if (i) | 594 if (i) |
| 590 browsers_.push_back(CreateBrowser(browser()->profile())); | 595 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 591 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 596 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 592 browsers_[i], | 597 browsers_[i], |
| 593 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) | 598 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) |
| 594 ? "/beforeunload.html" | 599 ? "/beforeunload.html" |
| 595 : "/beforeunload_slow.html"))); | 600 : "/beforeunload_slow.html"))); |
| 596 } | 601 } |
| 597 // Disable the hang monitor in the tab that is not expected to hang, so that | 602 // Disable the hang monitor in the tab that is not expected to hang, so that |
| 598 // the dialog is guaranteed to show. | 603 // the dialog is guaranteed to show. |
| 599 DisableHangMonitor(browsers_[kResposiveBrowserIndex]); | 604 PrepareForDialog(browsers_[kResposiveBrowserIndex]); |
| 600 | 605 |
| 601 RepeatedNotificationObserver cancel_observer( | 606 RepeatedNotificationObserver cancel_observer( |
| 602 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); | 607 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); |
| 603 chrome::CloseAllBrowsersAndQuit(); | 608 chrome::CloseAllBrowsersAndQuit(); |
| 604 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 609 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 605 cancel_observer.Wait(); | 610 cancel_observer.Wait(); |
| 606 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 611 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 607 | 612 |
| 608 // All windows should still be open. | 613 // All windows should still be open. |
| 609 for (int i = 0; i < kBrowserCount; i++) | 614 for (int i = 0; i < kBrowserCount; i++) |
| 610 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); | 615 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); |
| 611 | 616 |
| 612 // Quit, this time accepting close confirmation dialog. | 617 // Quit, this time accepting close confirmation dialog. |
| 613 RepeatedNotificationObserver close_observer( | 618 RepeatedNotificationObserver close_observer( |
| 614 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); | 619 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); |
| 615 chrome::CloseAllBrowsersAndQuit(); | 620 chrome::CloseAllBrowsersAndQuit(); |
| 616 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 621 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 617 close_observer.Wait(); | 622 close_observer.Wait(); |
| 618 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 623 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 619 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 624 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 620 } | 625 } |
| 621 | 626 |
| 622 // Test that a window created during shutdown is closed. | 627 // Test that a window created during shutdown is closed. |
| 623 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 628 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 624 TestAddWindowDuringShutdown) { | 629 TestAddWindowDuringShutdown) { |
| 625 ASSERT_TRUE(embedded_test_server()->Start()); | 630 ASSERT_TRUE(embedded_test_server()->Start()); |
| 626 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 631 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 627 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 632 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 628 DisableHangMonitor(browsers_[0]); | 633 PrepareForDialog(browsers_[0]); |
| 629 | 634 |
| 630 RepeatedNotificationObserver close_observer( | 635 RepeatedNotificationObserver close_observer( |
| 631 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 636 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 632 chrome::CloseAllBrowsersAndQuit(); | 637 chrome::CloseAllBrowsersAndQuit(); |
| 633 browsers_.push_back(CreateBrowser(browser()->profile())); | 638 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 634 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 639 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 635 close_observer.Wait(); | 640 close_observer.Wait(); |
| 636 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 641 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 637 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 642 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 638 } | 643 } |
| 639 | 644 |
| 640 // Test that a window created during shutdown with a beforeunload handler can | 645 // Test that a window created during shutdown with a beforeunload handler can |
| 641 // cancel the shutdown. | 646 // cancel the shutdown. |
| 642 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 647 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 643 TestAddWindowWithBeforeUnloadDuringShutdown) { | 648 TestAddWindowWithBeforeUnloadDuringShutdown) { |
| 644 ASSERT_TRUE(embedded_test_server()->Start()); | 649 ASSERT_TRUE(embedded_test_server()->Start()); |
| 645 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 650 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 646 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 651 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 647 DisableHangMonitor(browsers_[0]); | 652 PrepareForDialog(browsers_[0]); |
| 648 | 653 |
| 649 RepeatedNotificationObserver cancel_observer( | 654 RepeatedNotificationObserver cancel_observer( |
| 650 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 655 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 651 chrome::CloseAllBrowsersAndQuit(); | 656 chrome::CloseAllBrowsersAndQuit(); |
| 652 browsers_.push_back(CreateBrowser(browser()->profile())); | 657 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 653 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 658 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 654 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 659 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 655 DisableHangMonitor(browsers_[1]); | 660 PrepareForDialog(browsers_[1]); |
| 656 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 661 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 657 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 662 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 658 cancel_observer.Wait(); | 663 cancel_observer.Wait(); |
| 659 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 664 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 660 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 665 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 661 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 666 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 662 | 667 |
| 663 // Allow shutdown for both beforeunload dialogs. | 668 // Allow shutdown for both beforeunload dialogs. |
| 664 RepeatedNotificationObserver close_observer( | 669 RepeatedNotificationObserver close_observer( |
| 665 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 670 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 666 chrome::CloseAllBrowsersAndQuit(); | 671 chrome::CloseAllBrowsersAndQuit(); |
| 667 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 672 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 668 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 673 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 669 close_observer.Wait(); | 674 close_observer.Wait(); |
| 670 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 675 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 671 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 676 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 672 } | 677 } |
| 673 | 678 |
| 674 // Test that tabs added during shutdown are closed. | 679 // Test that tabs added during shutdown are closed. |
| 675 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 680 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 676 TestAddTabDuringShutdown) { | 681 TestAddTabDuringShutdown) { |
| 677 ASSERT_TRUE(embedded_test_server()->Start()); | 682 ASSERT_TRUE(embedded_test_server()->Start()); |
| 678 browsers_.push_back(CreateBrowser(browser()->profile())); | 683 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 679 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 684 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 680 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 685 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 681 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 686 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 682 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 687 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 683 DisableHangMonitor(browsers_[0]); | 688 PrepareForDialog(browsers_[0]); |
| 684 DisableHangMonitor(browsers_[1]); | 689 PrepareForDialog(browsers_[1]); |
| 685 | 690 |
| 686 RepeatedNotificationObserver close_observer( | 691 RepeatedNotificationObserver close_observer( |
| 687 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 692 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 688 chrome::CloseAllBrowsersAndQuit(); | 693 chrome::CloseAllBrowsersAndQuit(); |
| 689 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 694 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 690 AddBlankTabAndShow(browsers_[0]); | 695 AddBlankTabAndShow(browsers_[0]); |
| 691 AddBlankTabAndShow(browsers_[1]); | 696 AddBlankTabAndShow(browsers_[1]); |
| 692 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 697 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 693 close_observer.Wait(); | 698 close_observer.Wait(); |
| 694 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 699 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 695 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 700 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 696 } | 701 } |
| 697 | 702 |
| 698 // Test that tabs created during shutdown with beforeunload handlers can cancel | 703 // Test that tabs created during shutdown with beforeunload handlers can cancel |
| 699 // the shutdown. | 704 // the shutdown. |
| 700 | 705 |
| 701 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 706 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 702 TestAddTabWithBeforeUnloadDuringShutdown) { | 707 TestAddTabWithBeforeUnloadDuringShutdown) { |
| 703 ASSERT_TRUE(embedded_test_server()->Start()); | 708 ASSERT_TRUE(embedded_test_server()->Start()); |
| 704 browsers_.push_back(CreateBrowser(browser()->profile())); | 709 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 705 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 710 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 706 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 711 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 707 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 712 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 708 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 713 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 709 DisableHangMonitor(browsers_[0]); | 714 PrepareForDialog(browsers_[0]); |
| 710 DisableHangMonitor(browsers_[1]); | 715 PrepareForDialog(browsers_[1]); |
| 711 | 716 |
| 712 RepeatedNotificationObserver cancel_observer( | 717 RepeatedNotificationObserver cancel_observer( |
| 713 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 718 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 714 chrome::CloseAllBrowsersAndQuit(); | 719 chrome::CloseAllBrowsersAndQuit(); |
| 715 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 720 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 716 AddBlankTabAndShow(browsers_[0]); | 721 AddBlankTabAndShow(browsers_[0]); |
| 717 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 722 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 718 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 723 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 719 AddBlankTabAndShow(browsers_[1]); | 724 AddBlankTabAndShow(browsers_[1]); |
| 720 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 725 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 721 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 726 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 722 DisableHangMonitor(browsers_[0]); | 727 PrepareForDialog(browsers_[0]); |
| 723 DisableHangMonitor(browsers_[1]); | 728 PrepareForDialog(browsers_[1]); |
| 724 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 729 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 725 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 730 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 726 cancel_observer.Wait(); | 731 cancel_observer.Wait(); |
| 727 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 732 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 728 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); | 733 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); |
| 729 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); | 734 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); |
| 730 | 735 |
| 731 RepeatedNotificationObserver close_observer( | 736 RepeatedNotificationObserver close_observer( |
| 732 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 737 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 733 chrome::CloseAllBrowsersAndQuit(); | 738 chrome::CloseAllBrowsersAndQuit(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 772 ui_test_utils::NavigateToURLWithDisposition( | 777 ui_test_utils::NavigateToURLWithDisposition( |
| 773 browser2, embedded_test_server()->GetURL("/title2.html"), | 778 browser2, embedded_test_server()->GetURL("/title2.html"), |
| 774 WindowOpenDisposition::NEW_FOREGROUND_TAB, | 779 WindowOpenDisposition::NEW_FOREGROUND_TAB, |
| 775 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 780 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 776 content::WaitForLoadStop(browser2->tab_strip_model()->GetWebContentsAt(1)); | 781 content::WaitForLoadStop(browser2->tab_strip_model()->GetWebContentsAt(1)); |
| 777 EXPECT_FALSE(browser2->tab_strip_model() | 782 EXPECT_FALSE(browser2->tab_strip_model() |
| 778 ->GetWebContentsAt(1) | 783 ->GetWebContentsAt(1) |
| 779 ->NeedToFireBeforeUnload()); | 784 ->NeedToFireBeforeUnload()); |
| 780 EXPECT_EQ(2, browser2->tab_strip_model()->count()); | 785 EXPECT_EQ(2, browser2->tab_strip_model()->count()); |
| 781 | 786 |
| 782 DisableHangMonitor(browser2); | 787 PrepareForDialog(browser2); |
| 783 | 788 |
| 784 // The test. | 789 // The test. |
| 785 | 790 |
| 786 TabRestoreServiceChangesObserver restore_observer(browser2->profile()); | 791 TabRestoreServiceChangesObserver restore_observer(browser2->profile()); |
| 787 content::WindowedNotificationObserver observer( | 792 content::WindowedNotificationObserver observer( |
| 788 chrome::NOTIFICATION_BROWSER_CLOSED, | 793 chrome::NOTIFICATION_BROWSER_CLOSED, |
| 789 content::NotificationService::AllSources()); | 794 content::NotificationService::AllSources()); |
| 790 chrome::CloseWindow(browser2); | 795 chrome::CloseWindow(browser2); |
| 791 // Just to be sure CloseWindow doesn't have asynchronous tasks | 796 // Just to be sure CloseWindow doesn't have asynchronous tasks |
| 792 // that could have an impact. | 797 // that could have an impact. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 836 browser2->tab_strip_model()->GetWebContentsAt(0)->GetURL()); | 841 browser2->tab_strip_model()->GetWebContentsAt(0)->GetURL()); |
| 837 EXPECT_EQ(embedded_test_server()->GetURL("/title2.html"), | 842 EXPECT_EQ(embedded_test_server()->GetURL("/title2.html"), |
| 838 browser2->tab_strip_model()->GetWebContentsAt(1)->GetURL()); | 843 browser2->tab_strip_model()->GetWebContentsAt(1)->GetURL()); |
| 839 } | 844 } |
| 840 | 845 |
| 841 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 846 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 842 TestCloseTabDuringShutdown) { | 847 TestCloseTabDuringShutdown) { |
| 843 ASSERT_TRUE(embedded_test_server()->Start()); | 848 ASSERT_TRUE(embedded_test_server()->Start()); |
| 844 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 849 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 845 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 850 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 846 DisableHangMonitor(browsers_[0]); | 851 PrepareForDialog(browsers_[0]); |
| 847 | 852 |
| 848 RepeatedNotificationObserver cancel_observer( | 853 RepeatedNotificationObserver cancel_observer( |
| 849 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 854 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 850 chrome::CloseAllBrowsersAndQuit(); | 855 chrome::CloseAllBrowsersAndQuit(); |
| 851 | 856 |
| 852 browsers_.push_back(CreateBrowser(browser()->profile())); | 857 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 853 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 858 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 854 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 859 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 855 DisableHangMonitor(browsers_[1]); | 860 PrepareForDialog(browsers_[1]); |
| 856 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 861 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 857 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 862 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 858 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 863 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 859 cancel_observer.Wait(); | 864 cancel_observer.Wait(); |
| 860 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 865 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 861 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 866 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 862 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 867 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 863 | 868 |
| 864 RepeatedNotificationObserver close_observer( | 869 RepeatedNotificationObserver close_observer( |
| 865 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 870 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 866 chrome::CloseAllBrowsersAndQuit(); | 871 chrome::CloseAllBrowsersAndQuit(); |
| 867 browsers_[1]->tab_strip_model()->CloseAllTabs(); | 872 browsers_[1]->tab_strip_model()->CloseAllTabs(); |
| 868 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 873 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 869 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 874 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 870 | 875 |
| 871 close_observer.Wait(); | 876 close_observer.Wait(); |
| 872 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 877 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 873 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 878 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 874 } | 879 } |
| 875 | 880 |
| 876 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 881 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 877 TestOpenAndCloseWindowDuringShutdown) { | 882 TestOpenAndCloseWindowDuringShutdown) { |
| 878 ASSERT_TRUE(embedded_test_server()->Start()); | 883 ASSERT_TRUE(embedded_test_server()->Start()); |
| 879 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 884 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 880 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 885 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 881 DisableHangMonitor(browsers_[0]); | 886 PrepareForDialog(browsers_[0]); |
| 882 | 887 |
| 883 RepeatedNotificationObserver cancel_observer( | 888 RepeatedNotificationObserver cancel_observer( |
| 884 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); | 889 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); |
| 885 chrome::CloseAllBrowsersAndQuit(); | 890 chrome::CloseAllBrowsersAndQuit(); |
| 886 | 891 |
| 887 browsers_.push_back(CreateBrowser(browser()->profile())); | 892 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 888 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 893 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 889 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 894 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 890 DisableHangMonitor(browsers_[1]); | 895 PrepareForDialog(browsers_[1]); |
| 891 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 896 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 892 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 897 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 893 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 898 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 894 cancel_observer.Wait(); | 899 cancel_observer.Wait(); |
| 895 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 900 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 896 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 901 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| 897 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); | 902 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); |
| 898 | 903 |
| 899 RepeatedNotificationObserver close_observer( | 904 RepeatedNotificationObserver close_observer( |
| 900 chrome::NOTIFICATION_BROWSER_CLOSED, 2); | 905 chrome::NOTIFICATION_BROWSER_CLOSED, 2); |
| 901 chrome::CloseAllBrowsersAndQuit(); | 906 chrome::CloseAllBrowsersAndQuit(); |
| 902 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); | 907 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); |
| 903 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 908 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 904 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 909 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 905 | 910 |
| 906 close_observer.Wait(); | 911 close_observer.Wait(); |
| 907 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); | 912 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); |
| 908 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 913 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 909 } | 914 } |
| 910 | 915 |
| 911 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, | 916 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, |
| 912 TestCloseWindowDuringShutdown) { | 917 TestCloseWindowDuringShutdown) { |
| 913 ASSERT_TRUE(embedded_test_server()->Start()); | 918 ASSERT_TRUE(embedded_test_server()->Start()); |
| 914 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 919 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 915 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); | 920 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 916 browsers_.push_back(CreateBrowser(browser()->profile())); | 921 browsers_.push_back(CreateBrowser(browser()->profile())); |
| 917 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 922 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 918 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); | 923 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); |
| 919 DisableHangMonitor(browsers_[0]); | 924 PrepareForDialog(browsers_[0]); |
| 920 DisableHangMonitor(browsers_[1]); | 925 PrepareForDialog(browsers_[1]); |
| 921 | 926 |
| 922 RepeatedNotificationObserver cancel_observer( | 927 RepeatedNotificationObserver cancel_observer( |
| 923 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); | 928 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); |
| 924 chrome::CloseAllBrowsersAndQuit(); | 929 chrome::CloseAllBrowsersAndQuit(); |
| 925 | 930 |
| 926 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); | 931 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); |
| 927 ASSERT_NO_FATAL_FAILURE(CancelClose()); | 932 ASSERT_NO_FATAL_FAILURE(CancelClose()); |
| 928 cancel_observer.Wait(); | 933 cancel_observer.Wait(); |
| 929 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 934 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 930 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); | 935 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1155 } | 1160 } |
| 1156 | 1161 |
| 1157 // Test shutdown with downloads in progress and beforeunload handlers. | 1162 // Test shutdown with downloads in progress and beforeunload handlers. |
| 1158 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, | 1163 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, |
| 1159 TestBeforeUnloadAndDownloads) { | 1164 TestBeforeUnloadAndDownloads) { |
| 1160 ASSERT_TRUE(embedded_test_server()->Start()); | 1165 ASSERT_TRUE(embedded_test_server()->Start()); |
| 1161 SetDownloadPathForProfile(browser()->profile()); | 1166 SetDownloadPathForProfile(browser()->profile()); |
| 1162 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); | 1167 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); |
| 1163 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( | 1168 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( |
| 1164 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); | 1169 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); |
| 1165 DisableHangMonitor(browser()); | 1170 PrepareForDialog(browser()); |
| 1166 | 1171 |
| 1167 content::WindowedNotificationObserver cancel_observer( | 1172 content::WindowedNotificationObserver cancel_observer( |
| 1168 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, | 1173 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, |
| 1169 content::NotificationService::AllSources()); | 1174 content::NotificationService::AllSources()); |
| 1170 TestBrowserCloseManager::AttemptClose( | 1175 TestBrowserCloseManager::AttemptClose( |
| 1171 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); | 1176 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); |
| 1172 ASSERT_NO_FATAL_FAILURE(AcceptClose()); | 1177 ASSERT_NO_FATAL_FAILURE(AcceptClose()); |
| 1173 cancel_observer.Wait(); | 1178 cancel_observer.Wait(); |
| 1174 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1179 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 1175 | 1180 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1278 | 1283 |
| 1279 chrome::CloseAllBrowsers(); | 1284 chrome::CloseAllBrowsers(); |
| 1280 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); | 1285 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); |
| 1281 EXPECT_TRUE(BrowserList::GetInstance()->empty()); | 1286 EXPECT_TRUE(BrowserList::GetInstance()->empty()); |
| 1282 EXPECT_TRUE(IsBackgroundModeSuspended()); | 1287 EXPECT_TRUE(IsBackgroundModeSuspended()); |
| 1283 } | 1288 } |
| 1284 | 1289 |
| 1285 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, | 1290 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 1286 BrowserCloseManagerWithBackgroundModeBrowserTest, | 1291 BrowserCloseManagerWithBackgroundModeBrowserTest, |
| 1287 testing::Bool()); | 1292 testing::Bool()); |
| OLD | NEW |