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_identityBlock_focus.js | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 browser/base/content/test/siteIdentity/browser_identityBlock_focus.js (limited to 'browser/base/content/test/siteIdentity/browser_identityBlock_focus.js') diff --git a/browser/base/content/test/siteIdentity/browser_identityBlock_focus.js b/browser/base/content/test/siteIdentity/browser_identityBlock_focus.js new file mode 100644 index 0000000000..858cd3d632 --- /dev/null +++ b/browser/base/content/test/siteIdentity/browser_identityBlock_focus.js @@ -0,0 +1,126 @@ +/* Tests that the identity block can be reached via keyboard + * shortcuts and that it has the correct tab order. + */ + +const TEST_PATH = getRootDirectory(gTestPath).replace( + "chrome://mochitests/content", + "https://example.com" +); +const PERMISSIONS_PAGE = TEST_PATH + "permissions.html"; + +// The DevEdition has the DevTools button in the toolbar by default. Remove it +// to prevent branch-specific rules what button should be focused. +CustomizableUI.removeWidgetFromArea("developer-button"); + +registerCleanupFunction(async function resetToolbar() { + await CustomizableUI.reset(); +}); + +add_task(async function setupHomeButton() { + // Put the home button in the pre-proton placement to test focus states. + CustomizableUI.addWidgetToArea( + "home-button", + "nav-bar", + CustomizableUI.getPlacementOfWidget("stop-reload-button").position + 1 + ); +}); + +function synthesizeKeyAndWaitForFocus(element, keyCode, options) { + let focused = BrowserTestUtils.waitForEvent(element, "focus"); + EventUtils.synthesizeKey(keyCode, options); + return focused; +} + +// Checks that the tracking protection icon container is the next element after +// the urlbar to be focused if there are no active notification anchors. +add_task(async function testWithoutNotifications() { + await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] }); + await BrowserTestUtils.withNewTab("https://example.com", async function () { + await synthesizeKeyAndWaitForFocus(gURLBar, "l", { accelKey: true }); + is(document.activeElement, gURLBar.inputField, "urlbar should be focused"); + await synthesizeKeyAndWaitForFocus( + gProtectionsHandler._trackingProtectionIconContainer, + "VK_TAB", + { shiftKey: true } + ); + is( + document.activeElement, + gProtectionsHandler._trackingProtectionIconContainer, + "tracking protection icon container should be focused" + ); + }); +}); + +// Checks that when there is a notification anchor, it will receive +// focus before the identity block. +add_task(async function testWithNotifications() { + await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] }); + await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, async function (browser) { + let popupshown = BrowserTestUtils.waitForEvent( + PopupNotifications.panel, + "popupshown" + ); + // Request a permission; + BrowserTestUtils.synthesizeMouseAtCenter("#geo", {}, browser); + await popupshown; + + await synthesizeKeyAndWaitForFocus(gURLBar, "l", { accelKey: true }); + is(document.activeElement, gURLBar.inputField, "urlbar should be focused"); + await synthesizeKeyAndWaitForFocus( + gProtectionsHandler._trackingProtectionIconContainer, + "VK_TAB", + { shiftKey: true } + ); + is( + document.activeElement, + gProtectionsHandler._trackingProtectionIconContainer, + "tracking protection icon container should be focused" + ); + await synthesizeKeyAndWaitForFocus( + gIdentityHandler._identityIconBox, + "ArrowRight" + ); + is( + document.activeElement, + gIdentityHandler._identityIconBox, + "identity block should be focused" + ); + let geoIcon = document.getElementById("geo-notification-icon"); + await synthesizeKeyAndWaitForFocus(geoIcon, "ArrowRight"); + is( + document.activeElement, + geoIcon, + "notification anchor should be focused" + ); + }); +}); + +// Checks that with invalid pageproxystate the identity block is ignored. +add_task(async function testInvalidPageProxyState() { + await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] }); + await BrowserTestUtils.withNewTab("about:blank", async function (browser) { + // Loading about:blank will automatically focus the urlbar, which, however, can + // race with the test code. So we only send the shortcut if the urlbar isn't focused yet. + if (document.activeElement != gURLBar.inputField) { + await synthesizeKeyAndWaitForFocus(gURLBar, "l", { accelKey: true }); + } + is(document.activeElement, gURLBar.inputField, "urlbar should be focused"); + await synthesizeKeyAndWaitForFocus( + document.getElementById("home-button"), + "VK_TAB", + { shiftKey: true } + ); + await synthesizeKeyAndWaitForFocus( + document.getElementById("tabs-newtab-button"), + "VK_TAB", + { shiftKey: true } + ); + isnot( + document.activeElement, + gProtectionsHandler._trackingProtectionIconContainer, + "tracking protection icon container should not be focused" + ); + // Restore focus to the url bar. + gURLBar.focus(); + }); +}); -- cgit v1.2.3