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

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

Issue 2005663002: Make unload tests stable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review, fix new tests Created 4 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 24 matching lines...) Expand all
35 #include "chrome/common/chrome_switches.h" 35 #include "chrome/common/chrome_switches.h"
36 #include "chrome/common/url_constants.h" 36 #include "chrome/common/url_constants.h"
37 #include "chrome/test/base/in_process_browser_test.h" 37 #include "chrome/test/base/in_process_browser_test.h"
38 #include "chrome/test/base/ui_test_utils.h" 38 #include "chrome/test/base/ui_test_utils.h"
39 #include "components/app_modal/javascript_app_modal_dialog.h" 39 #include "components/app_modal/javascript_app_modal_dialog.h"
40 #include "components/app_modal/native_app_modal_dialog.h" 40 #include "components/app_modal/native_app_modal_dialog.h"
41 #include "content/public/browser/browser_context.h" 41 #include "content/public/browser/browser_context.h"
42 #include "content/public/browser/download_item.h" 42 #include "content/public/browser/download_item.h"
43 #include "content/public/browser/download_manager.h" 43 #include "content/public/browser/download_manager.h"
44 #include "content/public/browser/notification_service.h" 44 #include "content/public/browser/notification_service.h"
45 #include "content/public/browser/render_view_host.h"
46 #include "content/public/browser/render_widget_host.h"
45 #include "content/public/browser/web_contents.h" 47 #include "content/public/browser/web_contents.h"
46 #include "content/public/test/download_test_observer.h" 48 #include "content/public/test/download_test_observer.h"
47 #include "content/public/test/test_navigation_observer.h" 49 #include "content/public/test/test_navigation_observer.h"
48 #include "net/test/embedded_test_server/embedded_test_server.h" 50 #include "net/test/embedded_test_server/embedded_test_server.h"
49 #include "net/test/url_request/url_request_mock_http_job.h" 51 #include "net/test/url_request/url_request_mock_http_job.h"
50 #include "net/test/url_request/url_request_slow_download_job.h" 52 #include "net/test/url_request/url_request_slow_download_job.h"
51 53
52 #if defined(OS_CHROMEOS) 54 #if defined(OS_CHROMEOS)
53 #include "chromeos/chromeos_switches.h" 55 #include "chromeos/chromeos_switches.h"
54 #endif 56 #endif
55 57
56 namespace { 58 namespace {
57 59
58 app_modal::NativeAppModalDialog* GetNextDialog() { 60 app_modal::NativeAppModalDialog* GetNextDialog() {
59 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); 61 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog();
60 EXPECT_TRUE(dialog->IsJavaScriptModalDialog()); 62 EXPECT_TRUE(dialog->IsJavaScriptModalDialog());
61 app_modal::JavaScriptAppModalDialog* js_dialog = 63 app_modal::JavaScriptAppModalDialog* js_dialog =
62 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); 64 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog);
63 CHECK(js_dialog->native_dialog()); 65 CHECK(js_dialog->native_dialog());
64 return js_dialog->native_dialog(); 66 return js_dialog->native_dialog();
65 } 67 }
66 68
69 // Note: call |DisableHangMonitor| on the relevant WebContents or Browser before
70 // trying to close it, to avoid flakiness. https://crbug.com/519646
67 void AcceptClose() { 71 void AcceptClose() {
68 GetNextDialog()->AcceptAppModalDialog(); 72 GetNextDialog()->AcceptAppModalDialog();
69 } 73 }
70 74
75 // Note: call |DisableHangMonitor| on the relevant WebContents or Browser before
76 // trying to close it, to avoid flakiness. https://crbug.com/519646
71 void CancelClose() { 77 void CancelClose() {
72 GetNextDialog()->CancelAppModalDialog(); 78 GetNextDialog()->CancelAppModalDialog();
73 } 79 }
74 80
75 class RepeatedNotificationObserver : public content::NotificationObserver { 81 class RepeatedNotificationObserver : public content::NotificationObserver {
76 public: 82 public:
77 explicit RepeatedNotificationObserver(int type, int count) 83 explicit RepeatedNotificationObserver(int type, int count)
78 : num_outstanding_(count), running_(false) { 84 : num_outstanding_(count), running_(false) {
79 registrar_.Add(this, type, content::NotificationService::AllSources()); 85 registrar_.Add(this, type, content::NotificationService::AllSources());
80 } 86 }
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 browser, 248 browser,
243 GURL(net::URLRequestSlowDownloadJob::kKnownSizeUrl), 249 GURL(net::URLRequestSlowDownloadJob::kKnownSizeUrl),
244 NEW_BACKGROUND_TAB, 250 NEW_BACKGROUND_TAB,
245 ui_test_utils::BROWSER_TEST_NONE); 251 ui_test_utils::BROWSER_TEST_NONE);
246 observer.WaitForFinished(); 252 observer.WaitForFinished();
247 EXPECT_EQ( 253 EXPECT_EQ(
248 1UL, 254 1UL,
249 observer.NumDownloadsSeenInState(content::DownloadItem::IN_PROGRESS)); 255 observer.NumDownloadsSeenInState(content::DownloadItem::IN_PROGRESS));
250 } 256 }
251 257
258 // Makes sure that hang monitor will not trigger RendererUnresponsive
259 // for that web content or browser. That must be called before close action
260 // when using |AcceptClose| or |CancelClose|, to ensure the timeout does not
261 // prevent the dialog from appearing. https://crbug.com/519646
262 void DisableHangMonitor(content::WebContents* web_contents) {
263 web_contents->GetRenderViewHost()
264 ->GetWidget()
265 ->DisableHangMonitorForTesting();
266 }
267
268 void DisableHangMonitor(Browser* browser) {
269 for (int i = 0; i < browser->tab_strip_model()->count(); i++)
270 DisableHangMonitor(browser->tab_strip_model()->GetWebContentsAt(i));
271 }
272
252 std::vector<Browser*> browsers_; 273 std::vector<Browser*> browsers_;
253 }; 274 };
254 275
255 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) { 276 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestSingleTabShutdown) {
256 ASSERT_TRUE(embedded_test_server()->Start()); 277 ASSERT_TRUE(embedded_test_server()->Start());
257 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 278 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
258 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 279 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
280 DisableHangMonitor(browser());
281
259 RepeatedNotificationObserver cancel_observer( 282 RepeatedNotificationObserver cancel_observer(
260 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 283 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
261 chrome::CloseAllBrowsersAndQuit(); 284 chrome::CloseAllBrowsersAndQuit();
262 ASSERT_NO_FATAL_FAILURE(CancelClose()); 285 ASSERT_NO_FATAL_FAILURE(CancelClose());
263 cancel_observer.Wait(); 286 cancel_observer.Wait();
264 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 287 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
265 EXPECT_EQ(1, browser()->tab_strip_model()->count()); 288 EXPECT_EQ(1, browser()->tab_strip_model()->count());
266 289
267 RepeatedNotificationObserver close_observer( 290 RepeatedNotificationObserver close_observer(
268 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 291 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
269 chrome::CloseAllBrowsersAndQuit(); 292 chrome::CloseAllBrowsersAndQuit();
270 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 293 ASSERT_NO_FATAL_FAILURE(AcceptClose());
271 close_observer.Wait(); 294 close_observer.Wait();
272 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 295 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
273 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 296 EXPECT_TRUE(BrowserList::GetInstance()->empty());
274 } 297 }
275 298
276 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 299 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
277 TestShutdownMoreThanOnce) { 300 TestShutdownMoreThanOnce) {
278 ASSERT_TRUE(embedded_test_server()->Start()); 301 ASSERT_TRUE(embedded_test_server()->Start());
279 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 302 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
280 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 303 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
304 DisableHangMonitor(browser());
305
281 RepeatedNotificationObserver cancel_observer( 306 RepeatedNotificationObserver cancel_observer(
282 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 307 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
283 chrome::CloseAllBrowsersAndQuit(); 308 chrome::CloseAllBrowsersAndQuit();
284 chrome::CloseAllBrowsersAndQuit(); 309 chrome::CloseAllBrowsersAndQuit();
285 ASSERT_NO_FATAL_FAILURE(CancelClose()); 310 ASSERT_NO_FATAL_FAILURE(CancelClose());
286 cancel_observer.Wait(); 311 cancel_observer.Wait();
287 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 312 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
288 EXPECT_EQ(1, browser()->tab_strip_model()->count()); 313 EXPECT_EQ(1, browser()->tab_strip_model()->count());
289 314
290 RepeatedNotificationObserver close_observer( 315 RepeatedNotificationObserver close_observer(
291 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 316 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
292 chrome::CloseAllBrowsersAndQuit(); 317 chrome::CloseAllBrowsersAndQuit();
293 chrome::CloseAllBrowsersAndQuit(); 318 chrome::CloseAllBrowsersAndQuit();
294 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 319 ASSERT_NO_FATAL_FAILURE(AcceptClose());
295 close_observer.Wait(); 320 close_observer.Wait();
296 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 321 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
297 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 322 EXPECT_TRUE(BrowserList::GetInstance()->empty());
298 } 323 }
299 324
300 // Test is flaky on Mac. http://crbug.com/517687
301 #if defined(OS_MACOSX)
302 #define MAYBE_PRE_TestSessionRestore DISABLED_PRE_TestSessionRestore
303 #else
304 #define MAYBE_PRE_TestSessionRestore DISABLED_PRE_TestSessionRestore
305 #endif
306 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 325 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
307 MAYBE_PRE_TestSessionRestore) { 326 PRE_TestSessionRestore) {
308 ASSERT_TRUE(embedded_test_server()->Start()); 327 ASSERT_TRUE(embedded_test_server()->Start());
309 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 328 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
310 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 329 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
311 AddBlankTabAndShow(browser()); 330 AddBlankTabAndShow(browser());
312 ASSERT_NO_FATAL_FAILURE( 331 ASSERT_NO_FATAL_FAILURE(
313 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL))); 332 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIAboutURL)));
333 DisableHangMonitor(browser());
334
314 RepeatedNotificationObserver cancel_observer( 335 RepeatedNotificationObserver cancel_observer(
315 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 336 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
316 chrome::CloseAllBrowsersAndQuit(); 337 chrome::CloseAllBrowsersAndQuit();
317 ASSERT_NO_FATAL_FAILURE(CancelClose()); 338 ASSERT_NO_FATAL_FAILURE(CancelClose());
318 cancel_observer.Wait(); 339 cancel_observer.Wait();
319 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 340 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
320 341
321 browser()->tab_strip_model() 342 browser()->tab_strip_model()
322 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE); 343 ->CloseWebContentsAt(1, TabStripModel::CLOSE_USER_GESTURE);
323 content::TestNavigationObserver navigation_observer( 344 content::TestNavigationObserver navigation_observer(
324 browser()->tab_strip_model()->GetActiveWebContents(), 1); 345 browser()->tab_strip_model()->GetActiveWebContents(), 1);
325 ASSERT_NO_FATAL_FAILURE( 346 ASSERT_NO_FATAL_FAILURE(
326 NavigateToURLWithDisposition(browser(), 347 NavigateToURLWithDisposition(browser(),
327 GURL(chrome::kChromeUIVersionURL), 348 GURL(chrome::kChromeUIVersionURL),
328 CURRENT_TAB, 349 CURRENT_TAB,
329 ui_test_utils::BROWSER_TEST_NONE)); 350 ui_test_utils::BROWSER_TEST_NONE));
330 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 351 ASSERT_NO_FATAL_FAILURE(AcceptClose());
331 navigation_observer.Wait(); 352 navigation_observer.Wait();
332 353
333 RepeatedNotificationObserver close_observer( 354 RepeatedNotificationObserver close_observer(
334 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 355 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
335 chrome::CloseAllBrowsersAndQuit(); 356 chrome::CloseAllBrowsersAndQuit();
336 close_observer.Wait(); 357 close_observer.Wait();
337 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 358 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
338 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 359 EXPECT_TRUE(BrowserList::GetInstance()->empty());
339 } 360 }
340 361
341 // Test that the tab closed after the aborted shutdown attempt is not re-opened 362 // Test that the tab closed after the aborted shutdown attempt is not re-opened
342 // when restoring the session. 363 // when restoring the session.
343 // Test is flaky on Mac. http://crbug.com/517687
344 #if defined(OS_MACOSX)
345 #define MAYBE_TestSessionRestore DISABLED_TestSessionRestore
346 #else
347 #define MAYBE_TestSessionRestore DISABLED_TestSessionRestore
348 #endif
349 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 364 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
350 MAYBE_TestSessionRestore) { 365 TestSessionRestore) {
351 // The testing framework launches Chrome with about:blank as args. 366 // The testing framework launches Chrome with about:blank as args.
352 EXPECT_EQ(2, browser()->tab_strip_model()->count()); 367 EXPECT_EQ(2, browser()->tab_strip_model()->count());
353 EXPECT_EQ(GURL(chrome::kChromeUIVersionURL), 368 EXPECT_EQ(GURL(chrome::kChromeUIVersionURL),
354 browser()->tab_strip_model()->GetWebContentsAt(0)->GetURL()); 369 browser()->tab_strip_model()->GetWebContentsAt(0)->GetURL());
355 EXPECT_EQ(GURL("about:blank"), 370 EXPECT_EQ(GURL("about:blank"),
356 browser()->tab_strip_model()->GetWebContentsAt(1)->GetURL()); 371 browser()->tab_strip_model()->GetWebContentsAt(1)->GetURL());
357 } 372 }
358 373
359 // Test that browser windows are only closed if all browsers are ready to close 374 // Test that browser windows are only closed if all browsers are ready to close
360 // and that all beforeunload dialogs are shown again after a cancel. 375 // and that all beforeunload dialogs are shown again after a cancel.
361 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) { 376 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, TestMultipleWindows) {
362 ASSERT_TRUE(embedded_test_server()->Start()); 377 ASSERT_TRUE(embedded_test_server()->Start());
363 browsers_.push_back(CreateBrowser(browser()->profile())); 378 browsers_.push_back(CreateBrowser(browser()->profile()));
364 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 379 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
365 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 380 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
366 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 381 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
367 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 382 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
383 DisableHangMonitor(browsers_[0]);
384 DisableHangMonitor(browsers_[1]);
368 385
369 // Cancel shutdown on the first beforeunload event. 386 // Cancel shutdown on the first beforeunload event.
370 { 387 {
371 RepeatedNotificationObserver cancel_observer( 388 RepeatedNotificationObserver cancel_observer(
372 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 389 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
373 chrome::CloseAllBrowsersAndQuit(); 390 chrome::CloseAllBrowsersAndQuit();
374 ASSERT_NO_FATAL_FAILURE(CancelClose()); 391 ASSERT_NO_FATAL_FAILURE(CancelClose());
375 cancel_observer.Wait(); 392 cancel_observer.Wait();
376 } 393 }
377 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 394 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
(...skipping 20 matching lines...) Expand all
398 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 415 ASSERT_NO_FATAL_FAILURE(AcceptClose());
399 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 416 ASSERT_NO_FATAL_FAILURE(AcceptClose());
400 close_observer.Wait(); 417 close_observer.Wait();
401 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 418 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
402 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 419 EXPECT_TRUE(BrowserList::GetInstance()->empty());
403 } 420 }
404 421
405 // Test that tabs in the same window with a beforeunload event that hangs are 422 // Test that tabs in the same window with a beforeunload event that hangs are
406 // treated the same as the user accepting the close, but do not close the tab 423 // treated the same as the user accepting the close, but do not close the tab
407 // early. 424 // early.
408 // Test is flaky on windows, disabled. See http://crbug.com/276366
409 // Test is flaky on Mac. See http://crbug.com/517687.
410 #if defined(OS_WIN) || defined(OS_MACOSX)
411 #define MAYBE_TestHangInBeforeUnloadMultipleTabs \
412 DISABLED_TestHangInBeforeUnloadMultipleTabs
413 #else
414 #define MAYBE_TestHangInBeforeUnloadMultipleTabs \
415 TestHangInBeforeUnloadMultipleTabs
416 #endif
417 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 425 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
418 MAYBE_TestHangInBeforeUnloadMultipleTabs) { 426 TestHangInBeforeUnloadMultipleTabs) {
419 ASSERT_TRUE(embedded_test_server()->Start()); 427 ASSERT_TRUE(embedded_test_server()->Start());
420 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 428 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
421 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 429 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
422 AddBlankTabAndShow(browsers_[0]); 430 AddBlankTabAndShow(browsers_[0]);
423 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 431 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
424 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 432 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
425 AddBlankTabAndShow(browsers_[0]); 433 AddBlankTabAndShow(browsers_[0]);
426 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 434 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
427 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 435 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
436 // Disable the hang monitor in the tab that is not expected to hang, so that
437 // the dialog is guaranteed to show.
438 DisableHangMonitor(browsers_[0]->tab_strip_model()->GetWebContentsAt(1));
428 439
429 RepeatedNotificationObserver cancel_observer( 440 RepeatedNotificationObserver cancel_observer(
430 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 441 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
431 chrome::CloseAllBrowsersAndQuit(); 442 chrome::CloseAllBrowsersAndQuit();
432 ASSERT_NO_FATAL_FAILURE(CancelClose()); 443 ASSERT_NO_FATAL_FAILURE(CancelClose());
433 cancel_observer.Wait(); 444 cancel_observer.Wait();
434 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 445 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
435 // All tabs should still be open. 446 // All tabs should still be open.
436 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count()); 447 EXPECT_EQ(3, browsers_[0]->tab_strip_model()->count());
437 448
(...skipping 13 matching lines...) Expand all
451 TestHangInBeforeUnloadMultipleWindows) { 462 TestHangInBeforeUnloadMultipleWindows) {
452 ASSERT_TRUE(embedded_test_server()->Start()); 463 ASSERT_TRUE(embedded_test_server()->Start());
453 browsers_.push_back(CreateBrowser(browser()->profile())); 464 browsers_.push_back(CreateBrowser(browser()->profile()));
454 browsers_.push_back(CreateBrowser(browser()->profile())); 465 browsers_.push_back(CreateBrowser(browser()->profile()));
455 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 466 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
456 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 467 browsers_[0], embedded_test_server()->GetURL("/beforeunload_hang.html")));
457 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 468 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
458 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 469 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
459 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 470 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
460 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html"))); 471 browsers_[2], embedded_test_server()->GetURL("/beforeunload_hang.html")));
472 // Disable the hang monitor in the tab that is not expected to hang, so that
473 // the dialog is guaranteed to show.
474 DisableHangMonitor(browsers_[1]);
461 475
462 RepeatedNotificationObserver cancel_observer( 476 RepeatedNotificationObserver cancel_observer(
463 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 477 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
464 chrome::CloseAllBrowsersAndQuit(); 478 chrome::CloseAllBrowsersAndQuit();
465 ASSERT_NO_FATAL_FAILURE(CancelClose()); 479 ASSERT_NO_FATAL_FAILURE(CancelClose());
466 cancel_observer.Wait(); 480 cancel_observer.Wait();
467 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 481 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
468 // All windows should still be open. 482 // All windows should still be open.
469 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 483 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
470 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 484 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
471 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count()); 485 EXPECT_EQ(1, browsers_[2]->tab_strip_model()->count());
472 486
473 RepeatedNotificationObserver close_observer( 487 RepeatedNotificationObserver close_observer(
474 chrome::NOTIFICATION_BROWSER_CLOSED, 3); 488 chrome::NOTIFICATION_BROWSER_CLOSED, 3);
475 chrome::CloseAllBrowsersAndQuit(); 489 chrome::CloseAllBrowsersAndQuit();
476 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 490 ASSERT_NO_FATAL_FAILURE(AcceptClose());
477 close_observer.Wait(); 491 close_observer.Wait();
478 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 492 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
479 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 493 EXPECT_TRUE(BrowserList::GetInstance()->empty());
480 } 494 }
481 495
482 // Test that tabs that are slow to respond are not closed prematurely. 496 // Test that tabs that are slow to respond are not closed prematurely.
483 // Regression for crbug.com/365052 caused some of tabs to be closed even if 497 // Regression for crbug.com/365052 caused some of tabs to be closed even if
484 // user chose to cancel browser close. 498 // user chose to cancel browser close.
485 //
486 // Test is disabled as it likely to flack for the same reason as
487 // TestHangInBeforeUnloadMultipleTabs: there is a chance (especially under
488 // load) that normal tab will not answer within
489 // RenderViewHostImpl::kUnloadTimeoutMS thus |AcceptClose| or |CancelClose|
490 // will not find a dialog and fail.
491 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 499 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
492 DISABLED_TestUnloadMultipleSlowTabs) { 500 TestUnloadMultipleSlowTabs) {
493 ASSERT_TRUE(embedded_test_server()->Start()); 501 ASSERT_TRUE(embedded_test_server()->Start());
494 const int kTabCount = 5; 502 const int kTabCount = 5;
495 const int kResposiveTabIndex = 2; 503 const int kResposiveTabIndex = 2;
496 // Create tab strip with all tabs except one responding after 504 // Create tab strip with all tabs except one responding after
497 // RenderViewHostImpl::kUnloadTimeoutMS. 505 // RenderViewHostImpl::kUnloadTimeoutMS.
498 // Minimum configuration is two slow tabs and then responsive tab. 506 // Minimum configuration is two slow tabs and then responsive tab.
499 // But we also want to check how slow tabs behave in tail. 507 // But we also want to check how slow tabs behave in tail.
500 for (int i = 0; i < kTabCount; i++) { 508 for (int i = 0; i < kTabCount; i++) {
501 if (i) 509 if (i)
502 AddBlankTabAndShow(browsers_[0]); 510 AddBlankTabAndShow(browsers_[0]);
503 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 511 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
504 browsers_[0], 512 browsers_[0],
505 embedded_test_server()->GetURL((i == kResposiveTabIndex) 513 embedded_test_server()->GetURL((i == kResposiveTabIndex)
506 ? "/beforeunload.html" 514 ? "/beforeunload.html"
507 : "/beforeunload_slow.html"))); 515 : "/beforeunload_slow.html")));
508 } 516 }
517 // Disable the hang monitor in the tab that is not expected to hang, so that
518 // the dialog is guaranteed to show.
519 DisableHangMonitor(
520 browsers_[0]->tab_strip_model()->GetWebContentsAt(kResposiveTabIndex));
521
509 RepeatedNotificationObserver cancel_observer( 522 RepeatedNotificationObserver cancel_observer(
510 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 523 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
511 chrome::CloseAllBrowsersAndQuit(); 524 chrome::CloseAllBrowsersAndQuit();
512 ASSERT_NO_FATAL_FAILURE(CancelClose()); 525 ASSERT_NO_FATAL_FAILURE(CancelClose());
513 cancel_observer.Wait(); 526 cancel_observer.Wait();
514 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 527 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
515 528
516 // All tabs should still be open. 529 // All tabs should still be open.
517 EXPECT_EQ(kTabCount, browsers_[0]->tab_strip_model()->count()); 530 EXPECT_EQ(kTabCount, browsers_[0]->tab_strip_model()->count());
518 RepeatedNotificationObserver close_observer( 531 RepeatedNotificationObserver close_observer(
519 chrome::NOTIFICATION_BROWSER_CLOSED, 1); 532 chrome::NOTIFICATION_BROWSER_CLOSED, 1);
520 533
521 // Quit, this time accepting close confirmation dialog. 534 // Quit, this time accepting close confirmation dialog.
522 chrome::CloseAllBrowsersAndQuit(); 535 chrome::CloseAllBrowsersAndQuit();
523 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 536 ASSERT_NO_FATAL_FAILURE(AcceptClose());
524 close_observer.Wait(); 537 close_observer.Wait();
525 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 538 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
526 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 539 EXPECT_TRUE(BrowserList::GetInstance()->empty());
527 } 540 }
528 541
529 // Test that tabs in different windows with a slow beforeunload event response 542 // Test that tabs in different windows with a slow beforeunload event response
530 // are treated the same as the user accepting the close, but do not close the 543 // are treated the same as the user accepting the close, but do not close the
531 // tab early. 544 // tab early.
532 // Regression for crbug.com/365052 caused CHECK in tabstrip. 545 // Regression for crbug.com/365052 caused CHECK in tabstrip.
533 //
534 // Test is disabled as it likely to flack for the same reason as
535 // TestHangInBeforeUnloadMultipleTabs: there is a chance (especially under
536 // load) that normal tab will not answer within
537 // RenderViewHostImpl::kUnloadTimeoutMS thus |AcceptClose| or |CancelClose|
538 // will not find a dialog and fail.
539 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 546 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
540 DISABLED_TestBeforeUnloadMultipleSlowWindows) { 547 TestBeforeUnloadMultipleSlowWindows) {
541 ASSERT_TRUE(embedded_test_server()->Start()); 548 ASSERT_TRUE(embedded_test_server()->Start());
542 const int kBrowserCount = 5; 549 const int kBrowserCount = 5;
543 const int kResposiveBrowserIndex = 2; 550 const int kResposiveBrowserIndex = 2;
544 // Create multiple browsers with all tabs except one responding after 551 // Create multiple browsers with all tabs except one responding after
545 // RenderViewHostImpl::kUnloadTimeoutMS . 552 // RenderViewHostImpl::kUnloadTimeoutMS .
546 // Minimum configuration is just one browser with slow tab and then 553 // Minimum configuration is just one browser with slow tab and then
547 // browser with responsive tab. 554 // browser with responsive tab.
548 // But we also want to check how slow tabs behave in tail and make test 555 // But we also want to check how slow tabs behave in tail and make test
549 // more robust. 556 // more robust.
550 for (int i = 0; i < kBrowserCount; i++) { 557 for (int i = 0; i < kBrowserCount; i++) {
551 if (i) 558 if (i)
552 browsers_.push_back(CreateBrowser(browser()->profile())); 559 browsers_.push_back(CreateBrowser(browser()->profile()));
553 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 560 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
554 browsers_[i], 561 browsers_[i],
555 embedded_test_server()->GetURL((i == kResposiveBrowserIndex) 562 embedded_test_server()->GetURL((i == kResposiveBrowserIndex)
556 ? "/beforeunload.html" 563 ? "/beforeunload.html"
557 : "/beforeunload_slow.html"))); 564 : "/beforeunload_slow.html")));
558 } 565 }
566 // Disable the hang monitor in the tab that is not expected to hang, so that
567 // the dialog is guaranteed to show.
568 DisableHangMonitor(browsers_[kResposiveBrowserIndex]);
559 569
560 RepeatedNotificationObserver cancel_observer( 570 RepeatedNotificationObserver cancel_observer(
561 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1); 571 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, kResposiveBrowserIndex + 1);
562 chrome::CloseAllBrowsersAndQuit(); 572 chrome::CloseAllBrowsersAndQuit();
563 ASSERT_NO_FATAL_FAILURE(CancelClose()); 573 ASSERT_NO_FATAL_FAILURE(CancelClose());
564 cancel_observer.Wait(); 574 cancel_observer.Wait();
565 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 575 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
566 576
567 // All windows should still be open. 577 // All windows should still be open.
568 for (int i = 0; i < kBrowserCount; i++) 578 for (int i = 0; i < kBrowserCount; i++)
569 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count()); 579 EXPECT_EQ(1, browsers_[i]->tab_strip_model()->count());
570 580
571 // Quit, this time accepting close confirmation dialog. 581 // Quit, this time accepting close confirmation dialog.
572 RepeatedNotificationObserver close_observer( 582 RepeatedNotificationObserver close_observer(
573 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount); 583 chrome::NOTIFICATION_BROWSER_CLOSED, kBrowserCount);
574 chrome::CloseAllBrowsersAndQuit(); 584 chrome::CloseAllBrowsersAndQuit();
575 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 585 ASSERT_NO_FATAL_FAILURE(AcceptClose());
576 close_observer.Wait(); 586 close_observer.Wait();
577 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 587 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
578 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 588 EXPECT_TRUE(BrowserList::GetInstance()->empty());
579 } 589 }
580 590
581 // Test that a window created during shutdown is closed. 591 // Test that a window created during shutdown is closed.
582 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 592 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
583 TestAddWindowDuringShutdown) { 593 TestAddWindowDuringShutdown) {
584 ASSERT_TRUE(embedded_test_server()->Start()); 594 ASSERT_TRUE(embedded_test_server()->Start());
585 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 595 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
586 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 596 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
597 DisableHangMonitor(browsers_[0]);
587 598
588 RepeatedNotificationObserver close_observer( 599 RepeatedNotificationObserver close_observer(
589 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 600 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
590 chrome::CloseAllBrowsersAndQuit(); 601 chrome::CloseAllBrowsersAndQuit();
591 browsers_.push_back(CreateBrowser(browser()->profile())); 602 browsers_.push_back(CreateBrowser(browser()->profile()));
592 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 603 ASSERT_NO_FATAL_FAILURE(AcceptClose());
593 close_observer.Wait(); 604 close_observer.Wait();
594 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 605 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
595 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 606 EXPECT_TRUE(BrowserList::GetInstance()->empty());
596 } 607 }
597 608
598 // Test that a window created during shutdown with a beforeunload handler can 609 // Test that a window created during shutdown with a beforeunload handler can
599 // cancel the shutdown. 610 // cancel the shutdown.
600 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 611 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
601 TestAddWindowWithBeforeUnloadDuringShutdown) { 612 TestAddWindowWithBeforeUnloadDuringShutdown) {
602 ASSERT_TRUE(embedded_test_server()->Start()); 613 ASSERT_TRUE(embedded_test_server()->Start());
603 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 614 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
604 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 615 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
616 DisableHangMonitor(browsers_[0]);
605 617
606 RepeatedNotificationObserver cancel_observer( 618 RepeatedNotificationObserver cancel_observer(
607 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 619 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
608 chrome::CloseAllBrowsersAndQuit(); 620 chrome::CloseAllBrowsersAndQuit();
609 browsers_.push_back(CreateBrowser(browser()->profile())); 621 browsers_.push_back(CreateBrowser(browser()->profile()));
610 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 622 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
611 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 623 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
624 DisableHangMonitor(browsers_[1]);
612 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 625 ASSERT_NO_FATAL_FAILURE(AcceptClose());
613 ASSERT_NO_FATAL_FAILURE(CancelClose()); 626 ASSERT_NO_FATAL_FAILURE(CancelClose());
614 cancel_observer.Wait(); 627 cancel_observer.Wait();
615 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 628 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
616 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 629 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
617 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 630 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
618 631
619 // Allow shutdown for both beforeunload dialogs. 632 // Allow shutdown for both beforeunload dialogs.
620 RepeatedNotificationObserver close_observer( 633 RepeatedNotificationObserver close_observer(
621 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 634 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
622 chrome::CloseAllBrowsersAndQuit(); 635 chrome::CloseAllBrowsersAndQuit();
623 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 636 ASSERT_NO_FATAL_FAILURE(AcceptClose());
624 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 637 ASSERT_NO_FATAL_FAILURE(AcceptClose());
625 close_observer.Wait(); 638 close_observer.Wait();
626 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 639 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
627 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 640 EXPECT_TRUE(BrowserList::GetInstance()->empty());
628 } 641 }
629 642
630 // Test that tabs added during shutdown are closed. 643 // Test that tabs added during shutdown are closed.
631 // Disabled for being flaky tests: crbug.com/519646
632 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 644 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
633 DISABLED_TestAddTabDuringShutdown) { 645 TestAddTabDuringShutdown) {
634 ASSERT_TRUE(embedded_test_server()->Start()); 646 ASSERT_TRUE(embedded_test_server()->Start());
635 browsers_.push_back(CreateBrowser(browser()->profile())); 647 browsers_.push_back(CreateBrowser(browser()->profile()));
636 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 648 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
637 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 649 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
638 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 650 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
639 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 651 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
652 DisableHangMonitor(browsers_[0]);
653 DisableHangMonitor(browsers_[1]);
640 654
641 RepeatedNotificationObserver close_observer( 655 RepeatedNotificationObserver close_observer(
642 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 656 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
643 chrome::CloseAllBrowsersAndQuit(); 657 chrome::CloseAllBrowsersAndQuit();
644 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 658 ASSERT_NO_FATAL_FAILURE(AcceptClose());
645 AddBlankTabAndShow(browsers_[0]); 659 AddBlankTabAndShow(browsers_[0]);
646 AddBlankTabAndShow(browsers_[1]); 660 AddBlankTabAndShow(browsers_[1]);
647 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 661 ASSERT_NO_FATAL_FAILURE(AcceptClose());
648 close_observer.Wait(); 662 close_observer.Wait();
649 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 663 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
650 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 664 EXPECT_TRUE(BrowserList::GetInstance()->empty());
651 } 665 }
652 666
653 // Test that tabs created during shutdown with beforeunload handlers can cancel 667 // Test that tabs created during shutdown with beforeunload handlers can cancel
654 // the shutdown. 668 // the shutdown.
655 // Disabled for being flaky tests: crbug.com/519646 669
656 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 670 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
657 DISABLED_TestAddTabWithBeforeUnloadDuringShutdown) { 671 TestAddTabWithBeforeUnloadDuringShutdown) {
658 ASSERT_TRUE(embedded_test_server()->Start()); 672 ASSERT_TRUE(embedded_test_server()->Start());
659 browsers_.push_back(CreateBrowser(browser()->profile())); 673 browsers_.push_back(CreateBrowser(browser()->profile()));
660 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 674 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
661 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 675 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
662 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 676 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
663 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 677 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
678 DisableHangMonitor(browsers_[0]);
679 DisableHangMonitor(browsers_[1]);
680
664 RepeatedNotificationObserver cancel_observer( 681 RepeatedNotificationObserver cancel_observer(
665 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 682 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
666 chrome::CloseAllBrowsersAndQuit(); 683 chrome::CloseAllBrowsersAndQuit();
667 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 684 ASSERT_NO_FATAL_FAILURE(AcceptClose());
668 AddBlankTabAndShow(browsers_[0]); 685 AddBlankTabAndShow(browsers_[0]);
669 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 686 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
670 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 687 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
671 AddBlankTabAndShow(browsers_[1]); 688 AddBlankTabAndShow(browsers_[1]);
672 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 689 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
673 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 690 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
691 DisableHangMonitor(browsers_[0]);
692 DisableHangMonitor(browsers_[1]);
674 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 693 ASSERT_NO_FATAL_FAILURE(AcceptClose());
675 ASSERT_NO_FATAL_FAILURE(CancelClose()); 694 ASSERT_NO_FATAL_FAILURE(CancelClose());
676 cancel_observer.Wait(); 695 cancel_observer.Wait();
677 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 696 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
678 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count()); 697 EXPECT_EQ(2, browsers_[0]->tab_strip_model()->count());
679 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count()); 698 EXPECT_EQ(2, browsers_[1]->tab_strip_model()->count());
680 699
681 RepeatedNotificationObserver close_observer( 700 RepeatedNotificationObserver close_observer(
682 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 701 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
683 chrome::CloseAllBrowsersAndQuit(); 702 chrome::CloseAllBrowsersAndQuit();
684 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 703 ASSERT_NO_FATAL_FAILURE(AcceptClose());
685 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 704 ASSERT_NO_FATAL_FAILURE(AcceptClose());
686 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 705 ASSERT_NO_FATAL_FAILURE(AcceptClose());
687 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 706 ASSERT_NO_FATAL_FAILURE(AcceptClose());
688 707
689 close_observer.Wait(); 708 close_observer.Wait();
690 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 709 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
691 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 710 EXPECT_TRUE(BrowserList::GetInstance()->empty());
692 } 711 }
693 712
694 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 713 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
695 TestCloseTabDuringShutdown) { 714 TestCloseTabDuringShutdown) {
696 ASSERT_TRUE(embedded_test_server()->Start()); 715 ASSERT_TRUE(embedded_test_server()->Start());
697 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 716 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
698 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 717 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
718 DisableHangMonitor(browsers_[0]);
719
699 RepeatedNotificationObserver cancel_observer( 720 RepeatedNotificationObserver cancel_observer(
700 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 721 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
701 chrome::CloseAllBrowsersAndQuit(); 722 chrome::CloseAllBrowsersAndQuit();
702 723
703 browsers_.push_back(CreateBrowser(browser()->profile())); 724 browsers_.push_back(CreateBrowser(browser()->profile()));
704 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 725 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
705 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 726 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
727 DisableHangMonitor(browsers_[1]);
706 browsers_[1]->tab_strip_model()->CloseAllTabs(); 728 browsers_[1]->tab_strip_model()->CloseAllTabs();
707 ASSERT_NO_FATAL_FAILURE(CancelClose()); 729 ASSERT_NO_FATAL_FAILURE(CancelClose());
708 ASSERT_NO_FATAL_FAILURE(CancelClose()); 730 ASSERT_NO_FATAL_FAILURE(CancelClose());
709 cancel_observer.Wait(); 731 cancel_observer.Wait();
710 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 732 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
711 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 733 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
712 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 734 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
713 735
714 RepeatedNotificationObserver close_observer( 736 RepeatedNotificationObserver close_observer(
715 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 737 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
716 chrome::CloseAllBrowsersAndQuit(); 738 chrome::CloseAllBrowsersAndQuit();
717 browsers_[1]->tab_strip_model()->CloseAllTabs(); 739 browsers_[1]->tab_strip_model()->CloseAllTabs();
718 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 740 ASSERT_NO_FATAL_FAILURE(AcceptClose());
719 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 741 ASSERT_NO_FATAL_FAILURE(AcceptClose());
720 742
721 close_observer.Wait(); 743 close_observer.Wait();
722 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 744 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
723 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 745 EXPECT_TRUE(BrowserList::GetInstance()->empty());
724 } 746 }
725 747
726 // Test is flaky on Windows and Mac. See http://crbug.com/276366.
727 #if defined(OS_WIN) || defined(OS_MACOSX)
728 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \
729 DISABLED_TestOpenAndCloseWindowDuringShutdown
730 #else
731 #define MAYBE_TestOpenAndCloseWindowDuringShutdown \
732 TestOpenAndCloseWindowDuringShutdown
733 #endif
734 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 748 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
735 MAYBE_TestOpenAndCloseWindowDuringShutdown) { 749 TestOpenAndCloseWindowDuringShutdown) {
736 ASSERT_TRUE(embedded_test_server()->Start()); 750 ASSERT_TRUE(embedded_test_server()->Start());
737 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 751 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
738 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 752 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
753 DisableHangMonitor(browsers_[0]);
754
739 RepeatedNotificationObserver cancel_observer( 755 RepeatedNotificationObserver cancel_observer(
740 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2); 756 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 2);
741 chrome::CloseAllBrowsersAndQuit(); 757 chrome::CloseAllBrowsersAndQuit();
742 758
743 browsers_.push_back(CreateBrowser(browser()->profile())); 759 browsers_.push_back(CreateBrowser(browser()->profile()));
744 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 760 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
745 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 761 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
762 DisableHangMonitor(browsers_[1]);
746 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); 763 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
747 ASSERT_NO_FATAL_FAILURE(CancelClose()); 764 ASSERT_NO_FATAL_FAILURE(CancelClose());
748 ASSERT_NO_FATAL_FAILURE(CancelClose()); 765 ASSERT_NO_FATAL_FAILURE(CancelClose());
749 cancel_observer.Wait(); 766 cancel_observer.Wait();
750 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 767 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
751 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 768 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
752 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 769 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
753 770
754 RepeatedNotificationObserver close_observer( 771 RepeatedNotificationObserver close_observer(
755 chrome::NOTIFICATION_BROWSER_CLOSED, 2); 772 chrome::NOTIFICATION_BROWSER_CLOSED, 2);
756 chrome::CloseAllBrowsersAndQuit(); 773 chrome::CloseAllBrowsersAndQuit();
757 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow()); 774 ASSERT_FALSE(browsers_[1]->ShouldCloseWindow());
758 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 775 ASSERT_NO_FATAL_FAILURE(AcceptClose());
759 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 776 ASSERT_NO_FATAL_FAILURE(AcceptClose());
760 777
761 close_observer.Wait(); 778 close_observer.Wait();
762 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 779 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
763 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 780 EXPECT_TRUE(BrowserList::GetInstance()->empty());
764 } 781 }
765 782
766 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest, 783 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerBrowserTest,
767 TestCloseWindowDuringShutdown) { 784 TestCloseWindowDuringShutdown) {
768 ASSERT_TRUE(embedded_test_server()->Start()); 785 ASSERT_TRUE(embedded_test_server()->Start());
769 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 786 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
770 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html"))); 787 browsers_[0], embedded_test_server()->GetURL("/beforeunload.html")));
771 browsers_.push_back(CreateBrowser(browser()->profile())); 788 browsers_.push_back(CreateBrowser(browser()->profile()));
772 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 789 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
773 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html"))); 790 browsers_[1], embedded_test_server()->GetURL("/beforeunload.html")));
791 DisableHangMonitor(browsers_[0]);
792 DisableHangMonitor(browsers_[1]);
793
774 RepeatedNotificationObserver cancel_observer( 794 RepeatedNotificationObserver cancel_observer(
775 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1); 795 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1);
776 chrome::CloseAllBrowsersAndQuit(); 796 chrome::CloseAllBrowsersAndQuit();
777 797
778 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow()); 798 ASSERT_FALSE(browsers_[0]->ShouldCloseWindow());
779 ASSERT_NO_FATAL_FAILURE(CancelClose()); 799 ASSERT_NO_FATAL_FAILURE(CancelClose());
780 cancel_observer.Wait(); 800 cancel_observer.Wait();
781 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 801 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
782 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count()); 802 EXPECT_EQ(1, browsers_[0]->tab_strip_model()->count());
783 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count()); 803 EXPECT_EQ(1, browsers_[1]->tab_strip_model()->count());
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 close_observer.Wait(); 1022 close_observer.Wait();
1003 EXPECT_TRUE(browser_shutdown::IsTryingToQuit()); 1023 EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
1004 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 1024 EXPECT_TRUE(BrowserList::GetInstance()->empty());
1005 if (browser_defaults::kBrowserAliveWithNoWindows) 1025 if (browser_defaults::kBrowserAliveWithNoWindows)
1006 EXPECT_EQ(1, DownloadService::NonMaliciousDownloadCountAllProfiles()); 1026 EXPECT_EQ(1, DownloadService::NonMaliciousDownloadCountAllProfiles());
1007 else 1027 else
1008 EXPECT_EQ(0, DownloadService::NonMaliciousDownloadCountAllProfiles()); 1028 EXPECT_EQ(0, DownloadService::NonMaliciousDownloadCountAllProfiles());
1009 } 1029 }
1010 1030
1011 // Test shutdown with downloads in progress and beforeunload handlers. 1031 // Test shutdown with downloads in progress and beforeunload handlers.
1012 // Disabled, see http://crbug.com/315754.
1013 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest, 1032 IN_PROC_BROWSER_TEST_P(BrowserCloseManagerWithDownloadsBrowserTest,
1014 DISABLED_TestBeforeUnloadAndDownloads) { 1033 TestBeforeUnloadAndDownloads) {
1015 ASSERT_TRUE(embedded_test_server()->Start()); 1034 ASSERT_TRUE(embedded_test_server()->Start());
1016 SetDownloadPathForProfile(browser()->profile()); 1035 SetDownloadPathForProfile(browser()->profile());
1017 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser())); 1036 ASSERT_NO_FATAL_FAILURE(CreateStalledDownload(browser()));
1018 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL( 1037 ASSERT_NO_FATAL_FAILURE(ui_test_utils::NavigateToURL(
1019 browser(), embedded_test_server()->GetURL("/beforeunload.html"))); 1038 browser(), embedded_test_server()->GetURL("/beforeunload.html")));
1039 DisableHangMonitor(browser());
1020 1040
1021 content::WindowedNotificationObserver cancel_observer( 1041 content::WindowedNotificationObserver cancel_observer(
1022 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED, 1042 chrome::NOTIFICATION_BROWSER_CLOSE_CANCELLED,
1023 content::NotificationService::AllSources()); 1043 content::NotificationService::AllSources());
1024 TestBrowserCloseManager::AttemptClose( 1044 TestBrowserCloseManager::AttemptClose(
1025 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE); 1045 TestBrowserCloseManager::USER_CHOICE_USER_CANCELS_CLOSE);
1026 ASSERT_NO_FATAL_FAILURE(AcceptClose()); 1046 ASSERT_NO_FATAL_FAILURE(AcceptClose());
1027 cancel_observer.Wait(); 1047 cancel_observer.Wait();
1028 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 1048 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
1029 1049
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 1152
1133 chrome::CloseAllBrowsers(); 1153 chrome::CloseAllBrowsers();
1134 EXPECT_FALSE(browser_shutdown::IsTryingToQuit()); 1154 EXPECT_FALSE(browser_shutdown::IsTryingToQuit());
1135 EXPECT_TRUE(BrowserList::GetInstance()->empty()); 1155 EXPECT_TRUE(BrowserList::GetInstance()->empty());
1136 EXPECT_TRUE(IsBackgroundModeSuspended()); 1156 EXPECT_TRUE(IsBackgroundModeSuspended());
1137 } 1157 }
1138 1158
1139 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest, 1159 INSTANTIATE_TEST_CASE_P(BrowserCloseManagerWithBackgroundModeBrowserTest,
1140 BrowserCloseManagerWithBackgroundModeBrowserTest, 1160 BrowserCloseManagerWithBackgroundModeBrowserTest,
1141 testing::Bool()); 1161 testing::Bool());
OLDNEW
« no previous file with comments | « blimp/engine/feature/engine_render_widget_feature_unittest.cc ('k') | content/browser/renderer_host/render_widget_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698