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

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: aw 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 192 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 // 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
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
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
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
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
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
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
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
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
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());
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698