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