diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /browser/base/content/test/siteIdentity/browser_identityPopup_focus.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | browser/base/content/test/siteIdentity/browser_identityPopup_focus.js | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/browser/base/content/test/siteIdentity/browser_identityPopup_focus.js b/browser/base/content/test/siteIdentity/browser_identityPopup_focus.js new file mode 100644 index 0000000000..80e70619ff --- /dev/null +++ b/browser/base/content/test/siteIdentity/browser_identityPopup_focus.js @@ -0,0 +1,120 @@ +/* Tests the focus behavior of the identity popup. */ + +// Focusing on the identity box is handled by the ToolbarKeyboardNavigator +// component (see browser/base/content/browser-toolbarKeyNav.js). +async function focusIdentityBox() { + gURLBar.inputField.focus(); + is(document.activeElement, gURLBar.inputField, "urlbar should be focused"); + const focused = BrowserTestUtils.waitForEvent( + gIdentityHandler._identityIconBox, + "focus" + ); + EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }); + EventUtils.synthesizeKey("ArrowRight"); + await focused; +} + +// Access the identity popup via mouseclick. Focus should not be moved inside. +add_task(async function testIdentityPopupFocusClick() { + await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] }); + await BrowserTestUtils.withNewTab("https://example.com", async function () { + let shown = BrowserTestUtils.waitForEvent( + window, + "popupshown", + true, + event => event.target == gIdentityHandler._identityPopup + ); + EventUtils.synthesizeMouseAtCenter(gIdentityHandler._identityIconBox, {}); + await shown; + isnot( + Services.focus.focusedElement, + document.getElementById("identity-popup-security-button") + ); + }); +}); + +// Access the identity popup via keyboard. Focus should be moved inside. +add_task(async function testIdentityPopupFocusKeyboard() { + await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] }); + await BrowserTestUtils.withNewTab("https://example.com", async function () { + await focusIdentityBox(); + let shown = BrowserTestUtils.waitForEvent( + window, + "popupshown", + true, + event => event.target == gIdentityHandler._identityPopup + ); + EventUtils.sendString(" "); + await shown; + is( + Services.focus.focusedElement, + document.getElementById("identity-popup-security-button") + ); + }); +}); + +// Access the Site Security panel, then move focus with the tab key. +// Tabbing should be able to reach the More Information button. +add_task(async function testSiteSecurityTabOrder() { + await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] }); + await BrowserTestUtils.withNewTab("https://example.com", async function () { + // 1. Access the identity popup. + await focusIdentityBox(); + let shown = BrowserTestUtils.waitForEvent( + window, + "popupshown", + true, + event => event.target == gIdentityHandler._identityPopup + ); + EventUtils.sendString(" "); + await shown; + is( + Services.focus.focusedElement, + document.getElementById("identity-popup-security-button") + ); + + // 2. Access the Site Security section. + let securityView = document.getElementById("identity-popup-securityView"); + shown = BrowserTestUtils.waitForEvent(securityView, "ViewShown"); + EventUtils.sendString(" "); + await shown; + + // 3. Custom root learn more info should be focused by default + // This is probably not present in real-world scenarios, but needs to be present in our test infrastructure. + let customRootLearnMore = document.getElementById( + "identity-popup-custom-root-learn-more" + ); + is( + Services.focus.focusedElement, + customRootLearnMore, + "learn more option for custom roots is focused" + ); + + // 4. First press of tab should move to the More Information button. + let moreInfoButton = document.getElementById("identity-popup-more-info"); + let focused = BrowserTestUtils.waitForEvent( + gIdentityHandler._identityPopup, + "focusin" + ); + EventUtils.sendKey("tab"); + await focused; + is( + Services.focus.focusedElement, + moreInfoButton, + "more info button is focused" + ); + + // 5. Second press of tab should focus the Back button. + let backButton = gIdentityHandler._identityPopup.querySelector( + ".subviewbutton-back" + ); + // Wait for focus to move somewhere. We use focusin because focus doesn't bubble. + focused = BrowserTestUtils.waitForEvent( + gIdentityHandler._identityPopup, + "focusin" + ); + EventUtils.sendKey("tab"); + await focused; + is(Services.focus.focusedElement, backButton, "back button is focused"); + }); +}); |