diff options
Diffstat (limited to 'browser/base/content/test/general/browser_beforeunload_duplicate_dialogs.js')
-rw-r--r-- | browser/base/content/test/general/browser_beforeunload_duplicate_dialogs.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_beforeunload_duplicate_dialogs.js b/browser/base/content/test/general/browser_beforeunload_duplicate_dialogs.js new file mode 100644 index 000000000..91a4a7e9c --- /dev/null +++ b/browser/base/content/test/general/browser_beforeunload_duplicate_dialogs.js @@ -0,0 +1,76 @@ +const TEST_PAGE = "http://mochi.test:8888/browser/browser/base/content/test/general/file_double_close_tab.html"; + +var expectingDialog = false; +var wantToClose = true; +var resolveDialogPromise; +function onTabModalDialogLoaded(node) { + ok(expectingDialog, "Should be expecting this dialog."); + expectingDialog = false; + if (wantToClose) { + // This accepts the dialog, closing it + node.Dialog.ui.button0.click(); + } else { + // This keeps the page open + node.Dialog.ui.button1.click(); + } + if (resolveDialogPromise) { + resolveDialogPromise(); + } +} + +SpecialPowers.pushPrefEnv({"set": [["dom.require_user_interaction_for_beforeunload", false]]}); + +// Listen for the dialog being created +Services.obs.addObserver(onTabModalDialogLoaded, "tabmodal-dialog-loaded", false); +registerCleanupFunction(() => { + Services.prefs.clearUserPref("browser.tabs.warnOnClose"); + Services.obs.removeObserver(onTabModalDialogLoaded, "tabmodal-dialog-loaded"); +}); + +add_task(function* closeLastTabInWindow() { + let newWin = yield promiseOpenAndLoadWindow({}, true); + let firstTab = newWin.gBrowser.selectedTab; + yield promiseTabLoadEvent(firstTab, TEST_PAGE); + let windowClosedPromise = promiseWindowWillBeClosed(newWin); + expectingDialog = true; + // close tab: + document.getAnonymousElementByAttribute(firstTab, "anonid", "close-button").click(); + yield windowClosedPromise; + ok(!expectingDialog, "There should have been a dialog."); + ok(newWin.closed, "Window should be closed."); +}); + +add_task(function* closeWindowWithMultipleTabsIncludingOneBeforeUnload() { + Services.prefs.setBoolPref("browser.tabs.warnOnClose", false); + let newWin = yield promiseOpenAndLoadWindow({}, true); + let firstTab = newWin.gBrowser.selectedTab; + yield promiseTabLoadEvent(firstTab, TEST_PAGE); + yield promiseTabLoadEvent(newWin.gBrowser.addTab(), "http://example.com/"); + let windowClosedPromise = promiseWindowWillBeClosed(newWin); + expectingDialog = true; + newWin.BrowserTryToCloseWindow(); + yield windowClosedPromise; + ok(!expectingDialog, "There should have been a dialog."); + ok(newWin.closed, "Window should be closed."); + Services.prefs.clearUserPref("browser.tabs.warnOnClose"); +}); + +add_task(function* closeWindoWithSingleTabTwice() { + let newWin = yield promiseOpenAndLoadWindow({}, true); + let firstTab = newWin.gBrowser.selectedTab; + yield promiseTabLoadEvent(firstTab, TEST_PAGE); + let windowClosedPromise = promiseWindowWillBeClosed(newWin); + expectingDialog = true; + wantToClose = false; + let firstDialogShownPromise = new Promise((resolve, reject) => { resolveDialogPromise = resolve; }); + document.getAnonymousElementByAttribute(firstTab, "anonid", "close-button").click(); + yield firstDialogShownPromise; + info("Got initial dialog, now trying again"); + expectingDialog = true; + wantToClose = true; + resolveDialogPromise = null; + document.getAnonymousElementByAttribute(firstTab, "anonid", "close-button").click(); + yield windowClosedPromise; + ok(!expectingDialog, "There should have been a dialog."); + ok(newWin.closed, "Window should be closed."); +}); |