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