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 |