Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(427)

Side by Side Diff: chrome/browser/lifetime/browser_close_manager_browsertest.cc

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

Powered by Google App Engine
This is Rietveld 408576698