Index: chrome/browser/unload_browsertest.cc |
diff --git a/chrome/browser/unload_browsertest.cc b/chrome/browser/unload_browsertest.cc |
index 3f7201234df277d4756e52f32d4cd8cc990890d5..2af1a45082547fa5dad650df28f6867d2e6445cd 100644 |
--- a/chrome/browser/unload_browsertest.cc |
+++ b/chrome/browser/unload_browsertest.cc |
@@ -326,7 +326,8 @@ IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseNoUnloadListeners) { |
BrowserList::CloseAllBrowsersWithProfile( |
browser()->profile(), |
base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
- base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results))); |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ false); |
window_observer.Wait(); |
EXPECT_EQ(1, unload_results.get_successes()); |
EXPECT_EQ(0, unload_results.get_aborts()); |
@@ -344,7 +345,8 @@ IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseBeforeUnloadOK) { |
BrowserList::CloseAllBrowsersWithProfile( |
browser()->profile(), |
base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
- base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results))); |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ false); |
ClickModalDialogButton(true); |
window_observer.Wait(); |
EXPECT_EQ(1, unload_results.get_successes()); |
@@ -360,7 +362,8 @@ IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListCloseBeforeUnloadCancel) { |
BrowserList::CloseAllBrowsersWithProfile( |
browser()->profile(), |
base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
- base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results))); |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ false); |
// We wait for the title to change after cancelling the closure of browser |
// window, to ensure that in-flight IPCs from the renderer reach the browser. |
@@ -397,11 +400,13 @@ IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListDoubleCloseBeforeUnloadOK) { |
BrowserList::CloseAllBrowsersWithProfile( |
browser()->profile(), |
base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
- base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results))); |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ false); |
BrowserList::CloseAllBrowsersWithProfile( |
browser()->profile(), |
base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
- base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results))); |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ false); |
ClickModalDialogButton(true); |
window_observer.Wait(); |
EXPECT_EQ(1, unload_results.get_successes()); |
@@ -417,11 +422,13 @@ IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListDoubleCloseBeforeUnloadCancel) { |
BrowserList::CloseAllBrowsersWithProfile( |
browser()->profile(), |
base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
- base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results))); |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ false); |
BrowserList::CloseAllBrowsersWithProfile( |
browser()->profile(), |
base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
- base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results))); |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ false); |
// We wait for the title to change after cancelling the closure of browser |
// window, to ensure that in-flight IPCs from the renderer reach the browser. |
@@ -569,6 +576,62 @@ IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserCloseTabWhenOtherTabHasListener) { |
CheckTitle("only_one_unload"); |
} |
+IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListForceCloseNoUnloadListeners) { |
+ NavigateToDataURL(NOLISTENERS_HTML, "nolisteners"); |
+ |
+ content::WindowedNotificationObserver window_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, |
+ content::NotificationService::AllSources()); |
+ UnloadResults unload_results; |
+ BrowserList::CloseAllBrowsersWithProfile( |
+ browser()->profile(), |
+ base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ true); |
+ window_observer.Wait(); |
+ EXPECT_EQ(1, unload_results.get_successes()); |
+ EXPECT_EQ(0, unload_results.get_aborts()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListForceCloseWithBeforeUnload) { |
+ NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
+ |
+ content::WindowedNotificationObserver window_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, |
+ content::NotificationService::AllSources()); |
+ UnloadResults unload_results; |
+ BrowserList::CloseAllBrowsersWithProfile( |
+ browser()->profile(), |
+ base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ true); |
+ window_observer.Wait(); |
+ EXPECT_EQ(1, unload_results.get_successes()); |
+ EXPECT_EQ(0, unload_results.get_aborts()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(UnloadTest, BrowserListForceCloseAfterNormalClose) { |
+ NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
+ |
+ content::WindowedNotificationObserver window_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, |
+ content::NotificationService::AllSources()); |
+ UnloadResults unload_results; |
+ BrowserList::CloseAllBrowsersWithProfile( |
+ browser()->profile(), |
+ base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ false); |
+ BrowserList::CloseAllBrowsersWithProfile( |
+ browser()->profile(), |
+ base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ true); |
+ window_observer.Wait(); |
+ EXPECT_EQ(1, unload_results.get_successes()); |
+ EXPECT_EQ(0, unload_results.get_aborts()); |
+} |
+ |
class FastUnloadTest : public UnloadTest { |
public: |
void SetUpCommandLine(base::CommandLine* command_line) override { |
@@ -789,5 +852,64 @@ IN_PROC_BROWSER_TEST_F(FastUnloadTest, |
window_observer.Wait(); |
} |
+IN_PROC_BROWSER_TEST_F(FastUnloadTest, |
+ BrowserListForceCloseNoUnloadListenersWithFastUnload) { |
+ NavigateToDataURL(NOLISTENERS_HTML, "nolisteners"); |
+ |
+ content::WindowedNotificationObserver window_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, |
+ content::NotificationService::AllSources()); |
+ UnloadResults unload_results; |
+ BrowserList::CloseAllBrowsersWithProfile( |
+ browser()->profile(), |
+ base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ true); |
+ window_observer.Wait(); |
+ EXPECT_EQ(1, unload_results.get_successes()); |
+ EXPECT_EQ(0, unload_results.get_aborts()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(FastUnloadTest, |
+ BrowserListForceCloseWithBeforeUnloadWithFastUnload) { |
+ NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
+ |
+ content::WindowedNotificationObserver window_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, |
+ content::NotificationService::AllSources()); |
+ UnloadResults unload_results; |
+ BrowserList::CloseAllBrowsersWithProfile( |
+ browser()->profile(), |
+ base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ true); |
+ window_observer.Wait(); |
+ EXPECT_EQ(1, unload_results.get_successes()); |
+ EXPECT_EQ(0, unload_results.get_aborts()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(FastUnloadTest, |
+ BrowserListForceCloseAfterNormalCloseWithFastUnload) { |
+ NavigateToDataURL(BEFORE_UNLOAD_HTML, "beforeunload"); |
+ |
+ content::WindowedNotificationObserver window_observer( |
+ chrome::NOTIFICATION_BROWSER_CLOSED, |
+ content::NotificationService::AllSources()); |
+ UnloadResults unload_results; |
+ BrowserList::CloseAllBrowsersWithProfile( |
+ browser()->profile(), |
+ base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ false); |
+ BrowserList::CloseAllBrowsersWithProfile( |
+ browser()->profile(), |
+ base::Bind(&UnloadResults::AddSuccess, base::Unretained(&unload_results)), |
+ base::Bind(&UnloadResults::AddAbort, base::Unretained(&unload_results)), |
+ true); |
+ window_observer.Wait(); |
+ EXPECT_EQ(1, unload_results.get_successes()); |
+ EXPECT_EQ(0, unload_results.get_aborts()); |
+} |
+ |
// TODO(ojan): Add tests for unload/beforeunload that have multiple tabs |
// and multiple windows. |