diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /browser/base/content/test/general/browser_tabkeynavigation.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | browser/base/content/test/general/browser_tabkeynavigation.js | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_tabkeynavigation.js b/browser/base/content/test/general/browser_tabkeynavigation.js new file mode 100644 index 0000000000..765bf5c21d --- /dev/null +++ b/browser/base/content/test/general/browser_tabkeynavigation.js @@ -0,0 +1,223 @@ +/* + * This test checks that keyboard navigation for tabs isn't blocked by content + */ +add_task(async function test() { + let testPage1 = + "data:text/html,<html id='tab1'><body><button id='button1'>Tab 1</button></body></html>"; + let testPage2 = + "data:text/html,<html id='tab2'><body><button id='button2'>Tab 2</button><script>function preventDefault(event) { event.preventDefault(); event.stopImmediatePropagation(); } window.addEventListener('keydown', preventDefault, true); window.addEventListener('keypress', preventDefault, true);</script></body></html>"; + let testPage3 = + "data:text/html,<html id='tab3'><body><button id='button3'>Tab 3</button></body></html>"; + + let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, testPage1); + let browser1 = gBrowser.getBrowserForTab(tab1); + let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser, testPage2); + let tab3 = await BrowserTestUtils.openNewForegroundTab(gBrowser, testPage3); + + await SpecialPowers.pushPrefEnv({ + set: [["browser.ctrlTab.sortByRecentlyUsed", false]], + }); + + // Disable tab animations + gReduceMotionOverride = true; + + gBrowser.selectedTab = tab1; + browser1.focus(); + + is(gBrowser.selectedTab, tab1, "Tab1 should be activated"); + EventUtils.synthesizeKey("VK_TAB", { ctrlKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated by pressing Ctrl+Tab on Tab1" + ); + + EventUtils.synthesizeKey("VK_TAB", { ctrlKey: true }); + is( + gBrowser.selectedTab, + tab3, + "Tab3 should be activated by pressing Ctrl+Tab on Tab2" + ); + + EventUtils.synthesizeKey("VK_TAB", { ctrlKey: true, shiftKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated by pressing Ctrl+Shift+Tab on Tab3" + ); + + EventUtils.synthesizeKey("VK_TAB", { ctrlKey: true, shiftKey: true }); + is( + gBrowser.selectedTab, + tab1, + "Tab1 should be activated by pressing Ctrl+Shift+Tab on Tab2" + ); + + gBrowser.selectedTab = tab1; + browser1.focus(); + + is(gBrowser.selectedTab, tab1, "Tab1 should be activated"); + EventUtils.synthesizeKey("VK_PAGE_DOWN", { ctrlKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated by pressing Ctrl+PageDown on Tab1" + ); + + EventUtils.synthesizeKey("VK_PAGE_DOWN", { ctrlKey: true }); + is( + gBrowser.selectedTab, + tab3, + "Tab3 should be activated by pressing Ctrl+PageDown on Tab2" + ); + + EventUtils.synthesizeKey("VK_PAGE_UP", { ctrlKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated by pressing Ctrl+PageUp on Tab3" + ); + + EventUtils.synthesizeKey("VK_PAGE_UP", { ctrlKey: true }); + is( + gBrowser.selectedTab, + tab1, + "Tab1 should be activated by pressing Ctrl+PageUp on Tab2" + ); + + if (gBrowser.tabbox._handleMetaAltArrows) { + gBrowser.selectedTab = tab1; + browser1.focus(); + + let ltr = window.getComputedStyle(gBrowser.tabbox).direction == "ltr"; + let advanceKey = ltr ? "VK_RIGHT" : "VK_LEFT"; + let reverseKey = ltr ? "VK_LEFT" : "VK_RIGHT"; + + is(gBrowser.selectedTab, tab1, "Tab1 should be activated"); + EventUtils.synthesizeKey(advanceKey, { altKey: true, metaKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated by pressing Ctrl+" + advanceKey + " on Tab1" + ); + + EventUtils.synthesizeKey(advanceKey, { altKey: true, metaKey: true }); + is( + gBrowser.selectedTab, + tab3, + "Tab3 should be activated by pressing Ctrl+" + advanceKey + " on Tab2" + ); + + EventUtils.synthesizeKey(reverseKey, { altKey: true, metaKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated by pressing Ctrl+" + reverseKey + " on Tab3" + ); + + EventUtils.synthesizeKey(reverseKey, { altKey: true, metaKey: true }); + is( + gBrowser.selectedTab, + tab1, + "Tab1 should be activated by pressing Ctrl+" + reverseKey + " on Tab2" + ); + } + + gBrowser.selectedTab = tab2; + is(gBrowser.selectedTab, tab2, "Tab2 should be activated"); + is(gBrowser.tabContainer.selectedIndex, 2, "Tab2 index should be 2"); + + EventUtils.synthesizeKey("VK_PAGE_DOWN", { ctrlKey: true, shiftKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated after Ctrl+Shift+PageDown" + ); + is( + gBrowser.tabContainer.selectedIndex, + 3, + "Tab2 index should be 1 after Ctrl+Shift+PageDown" + ); + + EventUtils.synthesizeKey("VK_PAGE_UP", { ctrlKey: true, shiftKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated after Ctrl+Shift+PageUp" + ); + is( + gBrowser.tabContainer.selectedIndex, + 2, + "Tab2 index should be 2 after Ctrl+Shift+PageUp" + ); + + if (navigator.platform.indexOf("Mac") == 0) { + gBrowser.selectedTab = tab1; + browser1.focus(); + + // XXX Currently, Command + "{" and "}" don't work if keydown event is + // consumed because following keypress event isn't fired. + + let ltr = window.getComputedStyle(gBrowser.tabbox).direction == "ltr"; + let advanceKey = ltr ? "}" : "{"; + let reverseKey = ltr ? "{" : "}"; + + is(gBrowser.selectedTab, tab1, "Tab1 should be activated"); + + EventUtils.synthesizeKey(advanceKey, { metaKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated by pressing Ctrl+" + advanceKey + " on Tab1" + ); + + EventUtils.synthesizeKey(advanceKey, { metaKey: true }); + is( + gBrowser.selectedTab, + tab3, + "Tab3 should be activated by pressing Ctrl+" + advanceKey + " on Tab2" + ); + + EventUtils.synthesizeKey(reverseKey, { metaKey: true }); + is( + gBrowser.selectedTab, + tab2, + "Tab2 should be activated by pressing Ctrl+" + reverseKey + " on Tab3" + ); + + EventUtils.synthesizeKey(reverseKey, { metaKey: true }); + is( + gBrowser.selectedTab, + tab1, + "Tab1 should be activated by pressing Ctrl+" + reverseKey + " on Tab2" + ); + } else { + gBrowser.selectedTab = tab2; + EventUtils.synthesizeKey("VK_F4", { type: "keydown", ctrlKey: true }); + + isnot( + gBrowser.selectedTab, + tab2, + "Tab2 should be closed by pressing Ctrl+F4 on Tab2" + ); + is( + gBrowser.tabs.length, + 3, + "The count of tabs should be 3 since tab2 should be closed" + ); + + // NOTE: keypress event shouldn't be fired since the keydown event should + // be consumed by tab2. + EventUtils.synthesizeKey("VK_F4", { type: "keyup", ctrlKey: true }); + is( + gBrowser.tabs.length, + 3, + "The count of tabs should be 3 since renaming key events shouldn't close other tabs" + ); + } + + gBrowser.selectedTab = tab3; + while (gBrowser.tabs.length > 1) { + gBrowser.removeCurrentTab(); + } +}); |