diff options
Diffstat (limited to 'toolkit/mozapps/update/tests/browser/browser_aboutDialog_fc_apply_blocked.js')
-rw-r--r-- | toolkit/mozapps/update/tests/browser/browser_aboutDialog_fc_apply_blocked.js | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/toolkit/mozapps/update/tests/browser/browser_aboutDialog_fc_apply_blocked.js b/toolkit/mozapps/update/tests/browser/browser_aboutDialog_fc_apply_blocked.js new file mode 100644 index 0000000000..6cb2b9d10d --- /dev/null +++ b/toolkit/mozapps/update/tests/browser/browser_aboutDialog_fc_apply_blocked.js @@ -0,0 +1,94 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const { PromptTestUtils } = ChromeUtils.importESModule( + "resource://testing-common/PromptTestUtils.sys.mjs" +); + +const BUILDER_URL = "https://example.com/document-builder.sjs?html="; +const PAGE_MARKUP = ` +<html> +<head> + <script> + window.onbeforeunload = function() { + return true; + }; + </script> +</head> +<body>TEST PAGE</body> +</html> +`; +const TEST_URL = BUILDER_URL + encodeURI(PAGE_MARKUP); + +add_setup(async () => { + await SpecialPowers.pushPrefEnv({ + set: [["dom.require_user_interaction_for_beforeunload", false]], + }); +}); + +// Test for About Dialog foreground check for updates +// and apply but restart is blocked by a page. +add_task(async function aboutDialog_foregroundCheck_apply_blocked() { + let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_URL); + + let downloadInfo = []; + if (Services.prefs.getBoolPref(PREF_APP_UPDATE_BITS_ENABLED)) { + downloadInfo[0] = { patchType: "partial", bitsResult: "0" }; + } else { + downloadInfo[0] = { patchType: "partial", internalResult: "0" }; + } + + let aboutDialog; + let handlePromise = (async () => { + let dialog = await PromptTestUtils.waitForPrompt(window, { + modalType: Ci.nsIPrompt.MODAL_TYPE_CONTENT, + promptType: "confirmEx", + }); + Assert.equal( + aboutDialog.gAppUpdater.selectedPanel.id, + "restarting", + "The restarting panel should be displayed" + ); + + await PromptTestUtils.handlePrompt(dialog, { buttonNumClick: 1 }); + })(); + + // Since the partial should be successful specify an invalid size for the + // complete update. + let params = { queryString: "&invalidCompleteSize=1&promptWaitTime=0" }; + await runAboutDialogUpdateTest(params, [ + { + panelId: "checkingForUpdates", + checkActiveUpdate: null, + continueFile: CONTINUE_CHECK, + }, + { + panelId: "downloading", + checkActiveUpdate: { state: STATE_DOWNLOADING }, + continueFile: CONTINUE_DOWNLOAD, + downloadInfo, + }, + async function getAboutDialogHandle(dialog) { + aboutDialog = dialog; + }, + { + panelId: "apply", + checkActiveUpdate: { state: STATE_PENDING }, + continueFile: null, + forceApply: true, + }, + async function ensureDialogHasBeenCanceled() { + await handlePromise; + }, + // A final check to ensure that we are back in the apply state. + { + panelId: "apply", + checkActiveUpdate: { state: STATE_PENDING }, + continueFile: null, + }, + ]); + + BrowserTestUtils.removeTab(tab, { skipPermitUnload: true }); +}); |