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