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

Unified Diff: chrome/browser/unload_browsertest.cc

Issue 2681203002: Add Browser::SkipCallBeforeUnload so that the browser windows can be closed regardless of beforeunl… (Closed)
Patch Set: rebase from master Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698