From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../siteIdentity/browser_identityPopup_focus.js | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 browser/base/content/test/siteIdentity/browser_identityPopup_focus.js (limited to 'browser/base/content/test/siteIdentity/browser_identityPopup_focus.js') 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"); + }); +}); -- cgit v1.2.3