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

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

Issue 2750483007: Only show a beforeunload dialog if a frame has been interacted with. (Closed)
Patch Set: rev Created 3 years, 8 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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());
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