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 --- .../test/browser/browser_ext_sidebarAction.js | 268 +++++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_sidebarAction.js (limited to 'browser/components/extensions/test/browser/browser_ext_sidebarAction.js') diff --git a/browser/components/extensions/test/browser/browser_ext_sidebarAction.js b/browser/components/extensions/test/browser/browser_ext_sidebarAction.js new file mode 100644 index 0000000000..e943b708cb --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_sidebarAction.js @@ -0,0 +1,268 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +requestLongerTimeout(2); + +let extData = { + manifest: { + sidebar_action: { + default_panel: "sidebar.html", + }, + }, + useAddonManager: "temporary", + + files: { + "sidebar.html": ` + + + + + + + A Test Sidebar + + `, + + "sidebar.js": function () { + window.onload = () => { + browser.test.sendMessage("sidebar"); + }; + }, + }, + + background: function () { + browser.test.onMessage.addListener(async ({ msg, data }) => { + if (msg === "set-panel") { + await browser.sidebarAction.setPanel({ panel: null }); + browser.test.assertEq( + await browser.sidebarAction.getPanel({}), + browser.runtime.getURL("sidebar.html"), + "Global panel can be reverted to the default." + ); + } else if (msg === "isOpen") { + let { arg = {}, result } = data; + let isOpen = await browser.sidebarAction.isOpen(arg); + browser.test.assertEq(result, isOpen, "expected value from isOpen"); + } + browser.test.sendMessage("done"); + }); + }, +}; + +function getExtData(manifestUpdates = {}) { + return { + ...extData, + manifest: { + ...extData.manifest, + ...manifestUpdates, + }, + }; +} + +async function sendMessage(ext, msg, data = undefined) { + ext.sendMessage({ msg, data }); + await ext.awaitMessage("done"); +} + +add_task(async function sidebar_initial_install() { + ok( + document.getElementById("sidebar-box").hidden, + "sidebar box is not visible" + ); + let extension = ExtensionTestUtils.loadExtension(getExtData()); + await extension.startup(); + await extension.awaitMessage("sidebar"); + + // Test sidebar is opened on install + ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible"); + + await extension.unload(); + // Test that the sidebar was closed on unload. + ok( + document.getElementById("sidebar-box").hidden, + "sidebar box is not visible" + ); +}); + +add_task(async function sidebar__install_closed() { + ok( + document.getElementById("sidebar-box").hidden, + "sidebar box is not visible" + ); + let tempExtData = getExtData(); + tempExtData.manifest.sidebar_action.open_at_install = false; + let extension = ExtensionTestUtils.loadExtension(tempExtData); + await extension.startup(); + + // Test sidebar is closed on install + ok(document.getElementById("sidebar-box").hidden, "sidebar box is hidden"); + + await extension.unload(); + // This is the default value + tempExtData.manifest.sidebar_action.open_at_install = true; +}); + +add_task(async function sidebar_two_sidebar_addons() { + let extension2 = ExtensionTestUtils.loadExtension(getExtData()); + await extension2.startup(); + // Test sidebar is opened on install + await extension2.awaitMessage("sidebar"); + ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible"); + + // Test second sidebar install opens new sidebar + let extension3 = ExtensionTestUtils.loadExtension(getExtData()); + await extension3.startup(); + // Test sidebar is opened on install + await extension3.awaitMessage("sidebar"); + ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible"); + await extension3.unload(); + + // We just close the sidebar on uninstall of the current sidebar. + ok( + document.getElementById("sidebar-box").hidden, + "sidebar box is not visible" + ); + + await extension2.unload(); +}); + +add_task(async function sidebar_empty_panel() { + let extension = ExtensionTestUtils.loadExtension(getExtData()); + await extension.startup(); + // Test sidebar is opened on install + await extension.awaitMessage("sidebar"); + ok( + !document.getElementById("sidebar-box").hidden, + "sidebar box is visible in first window" + ); + await sendMessage(extension, "set-panel"); + await extension.unload(); +}); + +add_task(async function sidebar_isOpen() { + info("Load extension1"); + let extension1 = ExtensionTestUtils.loadExtension(getExtData()); + await extension1.startup(); + + info("Test extension1's sidebar is opened on install"); + await extension1.awaitMessage("sidebar"); + await sendMessage(extension1, "isOpen", { result: true }); + let sidebar1ID = SidebarUI.currentID; + + info("Load extension2"); + let extension2 = ExtensionTestUtils.loadExtension(getExtData()); + await extension2.startup(); + + info("Test extension2's sidebar is opened on install"); + await extension2.awaitMessage("sidebar"); + await sendMessage(extension1, "isOpen", { result: false }); + await sendMessage(extension2, "isOpen", { result: true }); + + info("Switch back to extension1's sidebar"); + SidebarUI.show(sidebar1ID); + await extension1.awaitMessage("sidebar"); + await sendMessage(extension1, "isOpen", { result: true }); + await sendMessage(extension2, "isOpen", { result: false }); + + info("Test passing a windowId parameter"); + let windowId = window.docShell.outerWindowID; + let WINDOW_ID_CURRENT = -2; + await sendMessage(extension1, "isOpen", { arg: { windowId }, result: true }); + await sendMessage(extension2, "isOpen", { arg: { windowId }, result: false }); + await sendMessage(extension1, "isOpen", { + arg: { windowId: WINDOW_ID_CURRENT }, + result: true, + }); + await sendMessage(extension2, "isOpen", { + arg: { windowId: WINDOW_ID_CURRENT }, + result: false, + }); + + info("Open a new window"); + open("", "", "noopener"); + let newWin = Services.wm.getMostRecentWindow("navigator:browser"); + + info("The new window has no sidebar"); + await sendMessage(extension1, "isOpen", { result: false }); + await sendMessage(extension2, "isOpen", { result: false }); + + info("But the original window still does"); + await sendMessage(extension1, "isOpen", { arg: { windowId }, result: true }); + await sendMessage(extension2, "isOpen", { arg: { windowId }, result: false }); + + info("Close the new window"); + newWin.close(); + + info("Close the sidebar in the original window"); + SidebarUI.hide(); + await sendMessage(extension1, "isOpen", { result: false }); + await sendMessage(extension2, "isOpen", { result: false }); + + await extension1.unload(); + await extension2.unload(); +}); + +add_task(async function testShortcuts() { + function verifyShortcut(id, commandKey) { + // We're just testing the command key since the modifiers have different + // icons on different platforms. + let button = document.getElementById( + `button_${makeWidgetId(id)}-sidebar-action` + ); + ok(button.hasAttribute("key"), "The menu item has a key specified"); + let key = document.getElementById(button.getAttribute("key")); + ok(key, "The key attribute finds the related key element"); + ok( + button.getAttribute("shortcut").endsWith(commandKey), + "The shortcut has the right key" + ); + } + + let extension1 = ExtensionTestUtils.loadExtension( + getExtData({ + commands: { + _execute_sidebar_action: { + suggested_key: { + default: "Ctrl+Shift+I", + }, + }, + }, + }) + ); + let extension2 = ExtensionTestUtils.loadExtension( + getExtData({ + commands: { + _execute_sidebar_action: { + suggested_key: { + default: "Ctrl+Shift+E", + }, + }, + }, + }) + ); + + await extension1.startup(); + await extension1.awaitMessage("sidebar"); + + // Open and close the switcher panel to trigger shortcut content rendering. + let switcherPanelShown = promisePopupShown(SidebarUI._switcherPanel); + SidebarUI.showSwitcherPanel(); + await switcherPanelShown; + let switcherPanelHidden = promisePopupHidden(SidebarUI._switcherPanel); + SidebarUI.hideSwitcherPanel(); + await switcherPanelHidden; + + // Test that the key is set for the extension after the shortcuts are rendered. + verifyShortcut(extension1.id, "I"); + + await extension2.startup(); + await extension2.awaitMessage("sidebar"); + + // Once the switcher panel has been opened new shortcuts should be added + // automatically. + verifyShortcut(extension2.id, "E"); + + await extension1.unload(); + await extension2.unload(); +}); -- cgit v1.2.3