mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-03 09:48:38 +02:00
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:
parent
e235286b96
commit
ed14dccfea
1 changed files with 48 additions and 13 deletions
|
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue