OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #if defined(OS_POSIX) | 5 #if defined(OS_POSIX) |
6 #include <signal.h> | 6 #include <signal.h> |
7 #endif | 7 #endif |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 void ClickModalDialogButton(bool accept) { | 197 void ClickModalDialogButton(bool accept) { |
198 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); | 198 app_modal::AppModalDialog* dialog = ui_test_utils::WaitForAppModalDialog(); |
199 ASSERT_TRUE(dialog->IsJavaScriptModalDialog()); | 199 ASSERT_TRUE(dialog->IsJavaScriptModalDialog()); |
200 app_modal::JavaScriptAppModalDialog* js_dialog = | 200 app_modal::JavaScriptAppModalDialog* js_dialog = |
201 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); | 201 static_cast<app_modal::JavaScriptAppModalDialog*>(dialog); |
202 if (accept) | 202 if (accept) |
203 js_dialog->native_dialog()->AcceptAppModalDialog(); | 203 js_dialog->native_dialog()->AcceptAppModalDialog(); |
204 else | 204 else |
205 js_dialog->native_dialog()->CancelAppModalDialog(); | 205 js_dialog->native_dialog()->CancelAppModalDialog(); |
206 } | 206 } |
| 207 |
| 208 void PrepareForDialog(Browser* browser) { |
| 209 for (int i = 0; i < browser->tab_strip_model()->count(); i++) { |
| 210 content::PrepContentsForBeforeUnloadTest( |
| 211 browser->tab_strip_model()->GetWebContentsAt(i)); |
| 212 } |
| 213 } |
207 }; | 214 }; |
208 | 215 |
209 // Navigate to a page with an infinite unload handler. | 216 // Navigate to a page with an infinite unload handler. |
210 // Then two async crosssite requests to ensure | 217 // Then two async crosssite requests to ensure |
211 // we don't get confused and think we're closing the tab. | 218 // we don't get confused and think we're closing the tab. |
212 // | 219 // |
213 // This test is flaky on the valgrind UI bots. http://crbug.com/39057 | 220 // This test is flaky on the valgrind UI bots. http://crbug.com/39057 |
214 IN_PROC_BROWSER_TEST_F(UnloadTest, CrossSiteInfiniteUnloadAsync) { | 221 IN_PROC_BROWSER_TEST_F(UnloadTest, CrossSiteInfiniteUnloadAsync) { |
215 // Tests makes no sense in single-process mode since the renderer is hung. | 222 // Tests makes no sense in single-process mode since the renderer is hung. |
216 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 223 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 // Tests closing the browser on a page with an unload listener registered. | 282 // Tests closing the browser on a page with an unload listener registered. |
276 // Test marked as flaky in http://crbug.com/51698 | 283 // Test marked as flaky in http://crbug.com/51698 |
277 IN_PROC_BROWSER_TEST_F(UnloadTest, DISABLED_BrowserCloseUnload) { | 284 IN_PROC_BROWSER_TEST_F(UnloadTest, DISABLED_BrowserCloseUnload) { |
278 LoadUrlAndQuitBrowser(UNLOAD_HTML, "unload"); | 285 LoadUrlAndQuitBrowser(UNLOAD_HTML, "unload"); |
279 } | 286 } |
280 | 287 |
281 // Tests closing the browser with a beforeunload handler and clicking | 288 // Tests closing the browser with a beforeunload handler and clicking |
282 // OK in the beforeunload confirm dialog. | 289 // OK in the beforeunload confirm dialog. |
283 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseBeforeUnloadOK) { | 290 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseBeforeUnloadOK) { |
284 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 291 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
285 // Disable the hang monitor, otherwise there will be a race between the | 292 PrepareForDialog(browser()); |
286 // beforeunload dialog and the beforeunload hang timer. | |
287 browser() | |
288 ->tab_strip_model() | |
289 ->GetActiveWebContents() | |
290 ->GetMainFrame() | |
291 ->DisableBeforeUnloadHangMonitorForTesting(); | |
292 | 293 |
293 content::WindowedNotificationObserver window_observer( | 294 content::WindowedNotificationObserver window_observer( |
294 chrome::NOTIFICATION_BROWSER_CLOSED, | 295 chrome::NOTIFICATION_BROWSER_CLOSED, |
295 content::NotificationService::AllSources()); | 296 content::NotificationService::AllSources()); |
296 chrome::CloseWindow(browser()); | 297 chrome::CloseWindow(browser()); |
297 ClickModalDialogButton(true); | 298 ClickModalDialogButton(true); |
298 window_observer.Wait(); | 299 window_observer.Wait(); |
299 } | 300 } |
300 | 301 |
301 // Tests closing the browser with a beforeunload handler and clicking | 302 // Tests closing the browser with a beforeunload handler and clicking |
302 // CANCEL in the beforeunload confirm dialog. | 303 // CANCEL in the beforeunload confirm dialog. |
303 // If this test flakes, reopen http://crbug.com/123110 | 304 // If this test flakes, reopen http://crbug.com/123110 |
304 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseBeforeUnloadCancel) { | 305 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseBeforeUnloadCancel) { |
305 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 306 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
306 // Disable the hang monitor, otherwise there will be a race between the | 307 PrepareForDialog(browser()); |
307 // beforeunload dialog and the beforeunload hang timer. | |
308 browser() | |
309 ->tab_strip_model() | |
310 ->GetActiveWebContents() | |
311 ->GetMainFrame() | |
312 ->DisableBeforeUnloadHangMonitorForTesting(); | |
313 | |
314 chrome::CloseWindow(browser()); | 308 chrome::CloseWindow(browser()); |
315 | 309 |
316 // We wait for the title to change after cancelling the closure of browser | 310 // We wait for the title to change after cancelling the closure of browser |
317 // window, to ensure that in-flight IPCs from the renderer reach the browser. | 311 // window, to ensure that in-flight IPCs from the renderer reach the browser. |
318 // Otherwise the browser won't put up the beforeunload dialog because it's | 312 // Otherwise the browser won't put up the beforeunload dialog because it's |
319 // waiting for an ack from the renderer. | 313 // waiting for an ack from the renderer. |
320 base::string16 expected_title = base::ASCIIToUTF16("cancelled"); | 314 base::string16 expected_title = base::ASCIIToUTF16("cancelled"); |
321 content::TitleWatcher title_watcher( | 315 content::TitleWatcher title_watcher( |
322 browser()->tab_strip_model()->GetActiveWebContents(), expected_title); | 316 browser()->tab_strip_model()->GetActiveWebContents(), expected_title); |
323 ClickModalDialogButton(false); | 317 ClickModalDialogButton(false); |
(...skipping 25 matching lines...) Expand all Loading... |
349 false); | 343 false); |
350 window_observer.Wait(); | 344 window_observer.Wait(); |
351 EXPECT_EQ(1, unload_results.get_successes()); | 345 EXPECT_EQ(1, unload_results.get_successes()); |
352 EXPECT_EQ(0, unload_results.get_aborts()); | 346 EXPECT_EQ(0, unload_results.get_aborts()); |
353 } | 347 } |
354 | 348 |
355 // Tests closing the browser by BrowserList::CloseAllBrowsersWithProfile, with a | 349 // Tests closing the browser by BrowserList::CloseAllBrowsersWithProfile, with a |
356 // beforeunload handler and clicking Leave in the beforeunload confirm dialog. | 350 // beforeunload handler and clicking Leave in the beforeunload confirm dialog. |
357 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseBeforeUnloadOK) { | 351 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseBeforeUnloadOK) { |
358 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 352 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
359 // Disable the hang monitor, otherwise there will be a race between the | 353 PrepareForDialog(browser()); |
360 // beforeunload dialog and the beforeunload hang timer. | |
361 browser() | |
362 ->tab_strip_model() | |
363 ->GetActiveWebContents() | |
364 ->GetMainFrame() | |
365 ->DisableBeforeUnloadHangMonitorForTesting(); | |
366 | 354 |
367 content::WindowedNotificationObserver window_observer( | 355 content::WindowedNotificationObserver window_observer( |
368 chrome::NOTIFICATION_BROWSER_CLOSED, | 356 chrome::NOTIFICATION_BROWSER_CLOSED, |
369 content::NotificationService::AllSources()); | 357 content::NotificationService::AllSources()); |
370 UnloadResults unload_results; | 358 UnloadResults unload_results; |
371 BrowserList::CloseAllBrowsersWithProfile( | 359 BrowserList::CloseAllBrowsersWithProfile( |
372 browser()->profile(), | 360 browser()->profile(), |
373 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), | 361 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
374 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), | 362 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
375 false); | 363 false); |
376 ClickModalDialogButton(true); | 364 ClickModalDialogButton(true); |
377 window_observer.Wait(); | 365 window_observer.Wait(); |
378 EXPECT_EQ(1, unload_results.get_successes()); | 366 EXPECT_EQ(1, unload_results.get_successes()); |
379 EXPECT_EQ(0, unload_results.get_aborts()); | 367 EXPECT_EQ(0, unload_results.get_aborts()); |
380 } | 368 } |
381 | 369 |
382 // Tests closing the browser by BrowserList::CloseAllBrowsersWithProfile, with a | 370 // Tests closing the browser by BrowserList::CloseAllBrowsersWithProfile, with a |
383 // beforeunload handler and clicking Stay in the beforeunload confirm dialog. | 371 // beforeunload handler and clicking Stay in the beforeunload confirm dialog. |
384 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseBeforeUnloadCancel) { | 372 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseBeforeUnloadCancel) { |
385 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 373 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
386 // Disable the hang monitor, otherwise there will be a race between the | 374 PrepareForDialog(browser()); |
387 // beforeunload dialog and the beforeunload hang timer. | |
388 browser() | |
389 ->tab_strip_model() | |
390 ->GetActiveWebContents() | |
391 ->GetMainFrame() | |
392 ->DisableBeforeUnloadHangMonitorForTesting(); | |
393 | 375 |
394 UnloadResults unload_results; | 376 UnloadResults unload_results; |
395 BrowserList::CloseAllBrowsersWithProfile( | 377 BrowserList::CloseAllBrowsersWithProfile( |
396 browser()->profile(), | 378 browser()->profile(), |
397 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), | 379 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
398 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), | 380 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
399 false); | 381 false); |
400 | 382 |
401 // We wait for the title to change after cancelling the closure of browser | 383 // We wait for the title to change after cancelling the closure of browser |
402 // window, to ensure that in-flight IPCs from the renderer reach the browser. | 384 // window, to ensure that in-flight IPCs from the renderer reach the browser. |
(...skipping 15 matching lines...) Expand all Loading... |
418 content::NotificationService::AllSources()); | 400 content::NotificationService::AllSources()); |
419 chrome::CloseWindow(browser()); | 401 chrome::CloseWindow(browser()); |
420 ClickModalDialogButton(true); | 402 ClickModalDialogButton(true); |
421 window_observer.Wait(); | 403 window_observer.Wait(); |
422 } | 404 } |
423 | 405 |
424 // Tests double calls to BrowserList::CloseAllBrowsersWithProfile, with a | 406 // Tests double calls to BrowserList::CloseAllBrowsersWithProfile, with a |
425 // beforeunload handler and clicking Leave in the beforeunload confirm dialog. | 407 // beforeunload handler and clicking Leave in the beforeunload confirm dialog. |
426 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListDoubleCloseBeforeUnloadOK) { | 408 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListDoubleCloseBeforeUnloadOK) { |
427 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 409 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
428 // Disable the hang monitor, otherwise there will be a race between the | 410 PrepareForDialog(browser()); |
429 // beforeunload dialog and the beforeunload hang timer. | |
430 browser() | |
431 ->tab_strip_model() | |
432 ->GetActiveWebContents() | |
433 ->GetMainFrame() | |
434 ->DisableBeforeUnloadHangMonitorForTesting(); | |
435 | 411 |
436 content::WindowedNotificationObserver window_observer( | 412 content::WindowedNotificationObserver window_observer( |
437 chrome::NOTIFICATION_BROWSER_CLOSED, | 413 chrome::NOTIFICATION_BROWSER_CLOSED, |
438 content::NotificationService::AllSources()); | 414 content::NotificationService::AllSources()); |
439 UnloadResults unload_results; | 415 UnloadResults unload_results; |
440 BrowserList::CloseAllBrowsersWithProfile( | 416 BrowserList::CloseAllBrowsersWithProfile( |
441 browser()->profile(), | 417 browser()->profile(), |
442 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), | 418 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
443 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), | 419 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
444 false); | 420 false); |
445 BrowserList::CloseAllBrowsersWithProfile( | 421 BrowserList::CloseAllBrowsersWithProfile( |
446 browser()->profile(), | 422 browser()->profile(), |
447 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), | 423 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
448 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), | 424 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
449 false); | 425 false); |
450 ClickModalDialogButton(true); | 426 ClickModalDialogButton(true); |
451 window_observer.Wait(); | 427 window_observer.Wait(); |
452 EXPECT_EQ(1, unload_results.get_successes()); | 428 EXPECT_EQ(1, unload_results.get_successes()); |
453 EXPECT_EQ(0, unload_results.get_aborts()); | 429 EXPECT_EQ(0, unload_results.get_aborts()); |
454 } | 430 } |
455 | 431 |
456 // Tests double calls to BrowserList::CloseAllBrowsersWithProfile, with a | 432 // Tests double calls to BrowserList::CloseAllBrowsersWithProfile, with a |
457 // beforeunload handler and clicking Stay in the beforeunload confirm dialog. | 433 // beforeunload handler and clicking Stay in the beforeunload confirm dialog. |
458 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListDoubleCloseBeforeUnloadCancel) { | 434 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListDoubleCloseBeforeUnloadCancel) { |
459 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 435 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
460 // Disable the hang monitor, otherwise there will be a race between the | 436 PrepareForDialog(browser()); |
461 // beforeunload dialog and the beforeunload hang timer. | |
462 browser() | |
463 ->tab_strip_model() | |
464 ->GetActiveWebContents() | |
465 ->GetMainFrame() | |
466 ->DisableBeforeUnloadHangMonitorForTesting(); | |
467 | 437 |
468 UnloadResults unload_results; | 438 UnloadResults unload_results; |
469 BrowserList::CloseAllBrowsersWithProfile( | 439 BrowserList::CloseAllBrowsersWithProfile( |
470 browser()->profile(), | 440 browser()->profile(), |
471 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), | 441 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
472 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), | 442 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
473 false); | 443 false); |
474 BrowserList::CloseAllBrowsersWithProfile( | 444 BrowserList::CloseAllBrowsersWithProfile( |
475 browser()->profile(), | 445 browser()->profile(), |
476 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), | 446 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
(...skipping 30 matching lines...) Expand all Loading... |
507 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 477 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
508 EXPECT_EQ(kill(base::GetCurrentProcessHandle(), SIGTERM), 0); | 478 EXPECT_EQ(kill(base::GetCurrentProcessHandle(), SIGTERM), 0); |
509 } | 479 } |
510 #endif | 480 #endif |
511 | 481 |
512 // Tests closing the browser and clicking OK in the beforeunload confirm dialog | 482 // Tests closing the browser and clicking OK in the beforeunload confirm dialog |
513 // if an inner frame has the focus. | 483 // if an inner frame has the focus. |
514 // If this flakes, use http://crbug.com/32615 and http://crbug.com/45675 | 484 // If this flakes, use http://crbug.com/32615 and http://crbug.com/45675 |
515 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseWithInnerFocusedFrame) { | 485 IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseWithInnerFocusedFrame) { |
516 NavigateToDataURL(INNER_FRAME_WITH_FOCUS_HTML, "innerframewithfocus"); | 486 NavigateToDataURL(INNER_FRAME_WITH_FOCUS_HTML, "innerframewithfocus"); |
517 // Disable the hang monitor, otherwise there will be a race between the | 487 PrepareForDialog(browser()); |
518 // beforeunload dialog and the beforeunload hang timer. | |
519 browser() | |
520 ->tab_strip_model() | |
521 ->GetActiveWebContents() | |
522 ->GetMainFrame() | |
523 ->DisableBeforeUnloadHangMonitorForTesting(); | |
524 | 488 |
525 content::WindowedNotificationObserver window_observer( | 489 content::WindowedNotificationObserver window_observer( |
526 chrome::NOTIFICATION_BROWSER_CLOSED, | 490 chrome::NOTIFICATION_BROWSER_CLOSED, |
527 content::NotificationService::AllSources()); | 491 content::NotificationService::AllSources()); |
528 chrome::CloseWindow(browser()); | 492 chrome::CloseWindow(browser()); |
529 ClickModalDialogButton(true); | 493 ClickModalDialogButton(true); |
530 window_observer.Wait(); | 494 window_observer.Wait(); |
531 } | 495 } |
532 | 496 |
533 // Tests closing the browser with a beforeunload handler that takes forever | 497 // Tests closing the browser with a beforeunload handler that takes forever |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
888 WindowCloseAfterBeforeUnloadCrash | 852 WindowCloseAfterBeforeUnloadCrash |
889 #endif | 853 #endif |
890 IN_PROC_BROWSER_TEST_F(FastUnloadTest, | 854 IN_PROC_BROWSER_TEST_F(FastUnloadTest, |
891 MAYBE_WindowCloseAfterBeforeUnloadCrash) { | 855 MAYBE_WindowCloseAfterBeforeUnloadCrash) { |
892 // Tests makes no sense in single-process mode since the renderer is hung. | 856 // Tests makes no sense in single-process mode since the renderer is hung. |
893 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 857 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
894 switches::kSingleProcess)) | 858 switches::kSingleProcess)) |
895 return; | 859 return; |
896 | 860 |
897 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 861 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
| 862 PrepareForDialog(browser()); |
898 content::WebContents* beforeunload_contents = | 863 content::WebContents* beforeunload_contents = |
899 browser()->tab_strip_model()->GetActiveWebContents(); | 864 browser()->tab_strip_model()->GetActiveWebContents(); |
900 | 865 |
901 content::WindowedNotificationObserver window_observer( | 866 content::WindowedNotificationObserver window_observer( |
902 chrome::NOTIFICATION_BROWSER_CLOSED, | 867 chrome::NOTIFICATION_BROWSER_CLOSED, |
903 content::NotificationService::AllSources()); | 868 content::NotificationService::AllSources()); |
904 chrome::CloseWindow(browser()); | 869 chrome::CloseWindow(browser()); |
905 CrashTab(beforeunload_contents); | 870 CrashTab(beforeunload_contents); |
906 window_observer.Wait(); | 871 window_observer.Wait(); |
907 } | 872 } |
(...skipping 12 matching lines...) Expand all Loading... |
920 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), | 885 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
921 true); | 886 true); |
922 window_observer.Wait(); | 887 window_observer.Wait(); |
923 EXPECT_EQ(1, unload_results.get_successes()); | 888 EXPECT_EQ(1, unload_results.get_successes()); |
924 EXPECT_EQ(0, unload_results.get_aborts()); | 889 EXPECT_EQ(0, unload_results.get_aborts()); |
925 } | 890 } |
926 | 891 |
927 IN_PROC_BROWSER_TEST_F(FastUnloadTest, | 892 IN_PROC_BROWSER_TEST_F(FastUnloadTest, |
928 BrowserListForceCloseWithBeforeUnloadWithFastUnload) { | 893 BrowserListForceCloseWithBeforeUnloadWithFastUnload) { |
929 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 894 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
| 895 PrepareForDialog(browser()); |
930 | 896 |
931 content::WindowedNotificationObserver window_observer( | 897 content::WindowedNotificationObserver window_observer( |
932 chrome::NOTIFICATION_BROWSER_CLOSED, | 898 chrome::NOTIFICATION_BROWSER_CLOSED, |
933 content::NotificationService::AllSources()); | 899 content::NotificationService::AllSources()); |
934 UnloadResults unload_results; | 900 UnloadResults unload_results; |
935 BrowserList::CloseAllBrowsersWithProfile( | 901 BrowserList::CloseAllBrowsersWithProfile( |
936 browser()->profile(), | 902 browser()->profile(), |
937 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), | 903 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
938 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), | 904 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
939 true); | 905 true); |
940 window_observer.Wait(); | 906 window_observer.Wait(); |
941 EXPECT_EQ(1, unload_results.get_successes()); | 907 EXPECT_EQ(1, unload_results.get_successes()); |
942 EXPECT_EQ(0, unload_results.get_aborts()); | 908 EXPECT_EQ(0, unload_results.get_aborts()); |
943 } | 909 } |
944 | 910 |
945 IN_PROC_BROWSER_TEST_F(FastUnloadTest, | 911 IN_PROC_BROWSER_TEST_F(FastUnloadTest, |
946 BrowserListForceCloseAfterNormalCloseWithFastUnload) { | 912 BrowserListForceCloseAfterNormalCloseWithFastUnload) { |
947 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); | 913 NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
| 914 PrepareForDialog(browser()); |
948 | 915 |
949 content::WindowedNotificationObserver window_observer( | 916 content::WindowedNotificationObserver window_observer( |
950 chrome::NOTIFICATION_BROWSER_CLOSED, | 917 chrome::NOTIFICATION_BROWSER_CLOSED, |
951 content::NotificationService::AllSources()); | 918 content::NotificationService::AllSources()); |
952 UnloadResults unload_results; | 919 UnloadResults unload_results; |
953 BrowserList::CloseAllBrowsersWithProfile( | 920 BrowserList::CloseAllBrowsersWithProfile( |
954 browser()->profile(), | 921 browser()->profile(), |
955 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), | 922 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
956 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), | 923 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
957 false); | 924 false); |
958 BrowserList::CloseAllBrowsersWithProfile( | 925 BrowserList::CloseAllBrowsersWithProfile( |
959 browser()->profile(), | 926 browser()->profile(), |
960 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), | 927 base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
961 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), | 928 base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
962 true); | 929 true); |
963 window_observer.Wait(); | 930 window_observer.Wait(); |
964 EXPECT_EQ(1, unload_results.get_successes()); | 931 EXPECT_EQ(1, unload_results.get_successes()); |
965 EXPECT_EQ(0, unload_results.get_aborts()); | 932 EXPECT_EQ(0, unload_results.get_aborts()); |
966 } | 933 } |
967 | 934 |
968 // TODO(ojan): Add tests for unload/beforeunload that have multiple tabs | 935 // TODO(ojan): Add tests for unload/beforeunload that have multiple tabs |
969 // and multiple windows. | 936 // and multiple windows. |
OLD | NEW |