Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
async function openContextMenu() {
let contextMenu = document.getElementById("tabContextMenu");
let popupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
EventUtils.synthesizeMouseAtCenter(gBrowser.selectedTab, {
type: "contextmenu",
button: 2,
});
await popupShown;
}
async function closeContextMenu() {
let contextMenu = document.getElementById("tabContextMenu");
let popupHidden = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
EventUtils.synthesizeKey("KEY_Escape");
await popupHidden;
}
add_task(async function test() {
if (Services.prefs.getBoolPref("widget.macos.native-context-menus", false)) {
ok(
true,
"This bug is not possible when native context menus are enabled on macOS."
);
return;
}
// Ensure tabs are focusable.
await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] });
// There should be one tab when we start the test.
let tab1 = gBrowser.selectedTab;
let tab2 = BrowserTestUtils.addTab(gBrowser);
tab1.focus();
is(document.activeElement, tab1, "tab1 should be focused");
// Ensure that DownArrow doesn't switch to tab2 while the context menu is open.
await openContextMenu();
EventUtils.synthesizeKey("KEY_ArrowDown");
await closeContextMenu();
is(gBrowser.selectedTab, tab1, "tab1 should still be active");
if (AppConstants.platform == "macosx") {
// On Mac, focus doesn't return to the tab after dismissing the context menu.
// Since we're not testing that here, work around it by just focusing again.
tab1.focus();
}
is(document.activeElement, tab1, "tab1 should be focused");
// Switch to tab2 by pressing DownArrow.
await BrowserTestUtils.switchTab(gBrowser, () =>
EventUtils.synthesizeKey("KEY_ArrowDown")
);
is(gBrowser.selectedTab, tab2, "should have switched to tab2");
is(document.activeElement, tab2, "tab2 should now be focused");
// Ensure that UpArrow doesn't switch to tab1 while the context menu is open.
await openContextMenu();
EventUtils.synthesizeKey("KEY_ArrowUp");
await closeContextMenu();
is(gBrowser.selectedTab, tab2, "tab2 should still be active");
gBrowser.removeTab(tab2);
});