Bug 1881820 - Tweak browser_ext_sidebarAction to cover the fix with a regression test. r=willdurand

Depends on D205440

Differential Revision: https://phabricator.services.mozilla.com/D205753
This commit is contained in:
Luca Greco 2024-03-27 13:18:34 +00:00
parent e235286b96
commit ed14dccfea

View file

@ -204,14 +204,16 @@ add_task(async function sidebar_isOpen() {
}); });
add_task(async function testShortcuts() { add_task(async function testShortcuts() {
function verifyShortcut(id, commandKey) { function verifyShortcut(id, commandKey, win = window) {
const doc = win.document;
// We're just testing the command key since the modifiers have different // We're just testing the command key since the modifiers have different
// icons on different platforms. // icons on different platforms.
let menuitem = document.getElementById( let menuitem = doc.getElementById(
`sidebarswitcher_menu_${makeWidgetId(id)}-sidebar-action` `sidebarswitcher_menu_${makeWidgetId(id)}-sidebar-action`
); );
ok(menuitem, `Expect a menuitem for ${id}`);
ok(menuitem.hasAttribute("key"), "The menu item has a key specified"); ok(menuitem.hasAttribute("key"), "The menu item has a key specified");
let key = document.getElementById(menuitem.getAttribute("key")); let key = doc.getElementById(menuitem.getAttribute("key"));
ok(key, "The key attribute finds the related key element"); ok(key, "The key attribute finds the related key element");
ok( ok(
menuitem.getAttribute("acceltext").endsWith(commandKey), menuitem.getAttribute("acceltext").endsWith(commandKey),
@ -219,6 +221,16 @@ add_task(async function testShortcuts() {
); );
} }
async function toggleSwitcherPanel(win = window) {
// Open and close the switcher panel to trigger shortcut content rendering.
let switcherPanelShown = promisePopupShown(win.SidebarUI._switcherPanel);
win.SidebarUI.showSwitcherPanel();
await switcherPanelShown;
let switcherPanelHidden = promisePopupHidden(win.SidebarUI._switcherPanel);
win.SidebarUI.hideSwitcherPanel();
await switcherPanelHidden;
}
let extension1 = ExtensionTestUtils.loadExtension( let extension1 = ExtensionTestUtils.loadExtension(
getExtData({ getExtData({
commands: { commands: {
@ -244,25 +256,48 @@ add_task(async function testShortcuts() {
await extension1.startup(); await extension1.startup();
await extension1.awaitMessage("sidebar"); await extension1.awaitMessage("sidebar");
await extension2.startup();
await extension2.awaitMessage("sidebar");
// Open and close the switcher panel to trigger shortcut content rendering. info("Open a second window");
let switcherPanelShown = promisePopupShown(SidebarUI._switcherPanel); const win = await BrowserTestUtils.openNewBrowserWindow();
SidebarUI.showSwitcherPanel(); info("Wait for extension2 sidebar to be open in the new window");
await switcherPanelShown; await extension2.awaitMessage("sidebar");
let switcherPanelHidden = promisePopupHidden(SidebarUI._switcherPanel);
SidebarUI.hideSwitcherPanel(); info("Toggle switcher panel");
await switcherPanelHidden; await toggleSwitcherPanel();
await toggleSwitcherPanel(win);
// Test that the key is set for the extension after the shortcuts are rendered. // Test that the key is set for the extension after the shortcuts are rendered.
verifyShortcut(extension1.id, "I"); verifyShortcut(extension1.id, "I");
verifyShortcut(extension1.id, "I", win);
await extension2.startup();
await extension2.awaitMessage("sidebar");
// Once the switcher panel has been opened new shortcuts should be added // Once the switcher panel has been opened new shortcuts should be added
// automatically. // automatically.
verifyShortcut(extension2.id, "E"); verifyShortcut(extension2.id, "E");
verifyShortcut(extension2.id, "E", win);
// Regression test (see Bug 1881820).
info(
"Reload the addon and verify the sidebar shortcut still works as expected"
);
const addon = await AddonManager.getAddonByID(extension1.id);
await addon.reload();
const keysetId1 = `#ext-keyset-id-${makeWidgetId(extension1.id)}`;
Assert.equal(
window.document.querySelectorAll(keysetId1).length,
1,
"Expect no keyset leaked in the 1st window after addon reload"
);
Assert.equal(
win.document.querySelectorAll(keysetId1).length,
1,
"Expect no keyset leaked in the 2nd window after addon reload"
);
await extension1.unload(); await extension1.unload();
await extension2.unload(); await extension2.unload();
await BrowserTestUtils.closeWindow(win);
}); });