From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../browser_tabdialogbox_content_prompts.js | 179 +++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 browser/base/content/test/tabdialogs/browser_tabdialogbox_content_prompts.js (limited to 'browser/base/content/test/tabdialogs/browser_tabdialogbox_content_prompts.js') diff --git a/browser/base/content/test/tabdialogs/browser_tabdialogbox_content_prompts.js b/browser/base/content/test/tabdialogs/browser_tabdialogbox_content_prompts.js new file mode 100644 index 0000000000..3067c53873 --- /dev/null +++ b/browser/base/content/test/tabdialogs/browser_tabdialogbox_content_prompts.js @@ -0,0 +1,179 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const CONTENT_PROMPT_PREF = "prompts.contentPromptSubDialog"; +const TEST_ROOT_CHROME = getRootDirectory(gTestPath); +const TEST_DIALOG_PATH = TEST_ROOT_CHROME + "subdialog.xhtml"; + +const TEST_DATA_URI = "data:text/html,"; +const TEST_EXTENSION_DATA = { + background() { + // eslint-disable-next-line no-undef + browser.test.sendMessage("url", browser.runtime.getURL("alert.html")); + }, + manifest: { + name: "Test Extension", + }, + files: { + "alert.html": ` + + + + TabDialogBox Content Modal Test page + + + +

TabDialogBox Content Modal

+ +`, + "alert.js": `window.addEventListener("load", () => alert("Hi"));`, + }, +}; +// eslint-disable-next-line @microsoft/sdl/no-insecure-url +const TEST_ORIGIN = "http://example.com"; +const TEST_PAGE = + TEST_ROOT_CHROME.replace("chrome://mochitests/content", TEST_ORIGIN) + + "test_page.html"; + +var commonDialogsBundle = Services.strings.createBundle( + "chrome://global/locale/commonDialogs.properties" +); + +// Setup. +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [[CONTENT_PROMPT_PREF, true]], + }); +}); + +/** + * Test that a manager for content prompts is added to tab dialog box. + */ +add_task(async function test_tabdialog_content_prompts() { + await BrowserTestUtils.withNewTab( + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + "http://example.com", + async function (browser) { + info("Open a tab prompt."); + let dialogBox = gBrowser.getTabDialogBox(browser); + dialogBox.open(TEST_DIALOG_PATH); + + info("Check the content prompt dialog is only created when needed."); + let contentPromptDialog = document.querySelector( + ".content-prompt-dialog" + ); + ok(!contentPromptDialog, "Content prompt dialog should not be created."); + + info("Open a content prompt"); + dialogBox.open(TEST_DIALOG_PATH, { + modalType: Ci.nsIPrompt.MODAL_TYPE_CONTENT, + }); + + contentPromptDialog = document.querySelector(".content-prompt-dialog"); + ok(contentPromptDialog, "Content prompt dialog should be created."); + let contentPromptManager = dialogBox.getContentDialogManager(); + + is( + contentPromptManager._dialogs.length, + 1, + "Content prompt manager should have 1 dialog box." + ); + } + ); +}); + +/** + * Test origin text for a null principal. + */ +add_task(async function test_tabdialog_null_principal_title() { + let dialogShown = BrowserTestUtils.waitForEvent( + gBrowser, + "DOMWillOpenModalDialog" + ); + + await BrowserTestUtils.withNewTab(TEST_DATA_URI, async function (browser) { + info("Waiting for dialog to open."); + await dialogShown; + await checkOriginText(browser); + }); +}); + +/** + * Test origin text for an extension page. + */ +add_task(async function test_tabdialog_extension_title() { + let extension = ExtensionTestUtils.loadExtension(TEST_EXTENSION_DATA); + + await extension.startup(); + let url = await extension.awaitMessage("url"); + let dialogShown = BrowserTestUtils.waitForEvent( + gBrowser, + "DOMWillOpenModalDialog" + ); + + await BrowserTestUtils.withNewTab(url, async function (browser) { + info("Waiting for dialog to open."); + await dialogShown; + await checkOriginText(browser, "Test Extension"); + }); + + await extension.unload(); +}); + +/** + * Test origin text for a regular page. + */ +add_task(async function test_tabdialog_page_title() { + let dialogShown = BrowserTestUtils.waitForEvent( + gBrowser, + "DOMWillOpenModalDialog" + ); + + await BrowserTestUtils.withNewTab(TEST_PAGE, async function (browser) { + info("Waiting for dialog to open."); + await dialogShown; + await checkOriginText(browser, TEST_ORIGIN); + }); +}); + +/** + * Test helper for checking the origin header of a dialog. + * + * @param {Object} browser + * The browser the dialog was opened from. + * @param {String|null} origin + * The page origin that should be displayed in the header, if any. + */ +async function checkOriginText(browser, origin = null) { + info("Check the title is visible."); + let dialogBox = gBrowser.getTabDialogBox(browser); + let contentPromptManager = dialogBox.getContentDialogManager(); + let dialog = contentPromptManager._dialogs[0]; + + info("Waiting for dialog frame to be ready."); + await dialog._dialogReady; + + let dialogDoc = dialog._frame.contentWindow.document; + let titleSelector = "#titleText"; + let infoTitle = dialogDoc.querySelector(titleSelector); + ok(BrowserTestUtils.is_visible(infoTitle), "Title text is visible"); + + info("Check the displayed origin text is correct."); + if (origin) { + let host = origin; + try { + host = new URL(origin).host; + } catch (ex) { + /* will fail for the extension case. */ + } + is(infoTitle.textContent, host, "Origin should be in header."); + } else { + is( + infoTitle.dataset.l10nId, + "common-dialog-title-null", + "Null principal string should be in header." + ); + } +} -- cgit v1.2.3