summaryrefslogtreecommitdiffstats
path: root/uriloader/exthandler/tests/mochitest/browser_standalone_application_chooser_window_fallback.js
diff options
context:
space:
mode:
Diffstat (limited to 'uriloader/exthandler/tests/mochitest/browser_standalone_application_chooser_window_fallback.js')
-rw-r--r--uriloader/exthandler/tests/mochitest/browser_standalone_application_chooser_window_fallback.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/uriloader/exthandler/tests/mochitest/browser_standalone_application_chooser_window_fallback.js b/uriloader/exthandler/tests/mochitest/browser_standalone_application_chooser_window_fallback.js
new file mode 100644
index 0000000000..40496fb3b2
--- /dev/null
+++ b/uriloader/exthandler/tests/mochitest/browser_standalone_application_chooser_window_fallback.js
@@ -0,0 +1,67 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test the fallback fixed in bug 1875460, if the modern tab dialog box is not
+// supported.
+
+const TEST_URL =
+ "https://example.com/browser/" +
+ "uriloader/exthandler/tests/mochitest/FTPprotocolHandler.html";
+
+add_task(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [["security.external_protocol_requires_permission", false]],
+ });
+
+ // Load a page with an FTP link.
+ let browser = gBrowser.selectedBrowser;
+ BrowserTestUtils.startLoadingURIString(browser, TEST_URL);
+ await BrowserTestUtils.browserLoaded(browser, false, TEST_URL);
+
+ // Make sure no handler is set, forcing the dialog to show.
+ let protoSvc = Cc[
+ "@mozilla.org/uriloader/external-protocol-service;1"
+ ].getService(Ci.nsIExternalProtocolService);
+ let protoInfo = protoSvc.getProtocolHandlerInfo("ftp");
+ ok(!protoInfo.preferredApplicationHandler, "no preferred handler is set");
+ let handlers = protoInfo.possibleApplicationHandlers;
+ is(0, handlers.length, "no handler registered for ftp");
+ protoInfo.alwaysAskBeforeHandling = true;
+ let handlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].getService(
+ Ci.nsIHandlerService
+ );
+ handlerSvc.store(protoInfo);
+
+ // Delete getTabDialogBox from gBrowser, to test the fallback to the standalone
+ // application chooser window.
+ let _getTabDialogBox = gBrowser.getTabDialogBox;
+ delete gBrowser.getTabDialogBox;
+
+ let appChooserDialogOpenPromise = BrowserTestUtils.domWindowOpened(
+ null,
+ async win => {
+ await BrowserTestUtils.waitForEvent(win, "load");
+ Assert.ok(
+ win.document.documentURI ==
+ "chrome://mozapps/content/handling/appChooser.xhtml",
+ "application chooser dialog opened"
+ );
+ return true;
+ }
+ );
+ let link = "#link";
+ await BrowserTestUtils.synthesizeMouseAtCenter(link, {}, browser);
+ let appChooserDialog = await appChooserDialogOpenPromise;
+
+ let appChooserDialogClosePromise =
+ BrowserTestUtils.domWindowClosed(appChooserDialog);
+ let dialog = appChooserDialog.document.getElementsByTagName("dialog")[0];
+ let cancelButton = dialog.getButton("cancel");
+ cancelButton.click();
+ await appChooserDialogClosePromise;
+
+ // Restore the original getTabDialogBox(), to not affect other tests.
+ gBrowser.getTabDialogBox = _getTabDialogBox;
+});