Bug 1867044 - Fire name change for xul labels. r=Jamie

Differential Revision: https://phabricator.services.mozilla.com/D248979
This commit is contained in:
Eitan Isaacson
2025-05-15 16:14:06 +00:00
committed by eisaacson@mozilla.com
parent cbd46c3767
commit 77a5fc0c85
3 changed files with 43 additions and 3 deletions

View File

@@ -1431,9 +1431,9 @@ void LocalAccessible::DOMAttributeChanged(int32_t aNameSpaceID,
} }
// Fire name change and description change events. // Fire name change and description change events.
if (aAttribute == nsGkAtoms::aria_label) { if (aAttribute == nsGkAtoms::aria_label || aAttribute == nsGkAtoms::label) {
// A valid aria-labelledby would take precedence so an aria-label change // A valid aria-labelledby would take precedence over an aria-label or a xul
// won't change the name. // label attribute. So if that relation exists the name won't change.
AssociatedElementsIterator iter(mDoc, elm, nsGkAtoms::aria_labelledby); AssociatedElementsIterator iter(mDoc, elm, nsGkAtoms::aria_labelledby);
if (!iter.NextElem()) { if (!iter.NextElem()) {
mDoc->FireDelayedEvent(nsIAccessibleEvent::EVENT_NAME_CHANGE, this); mDoc->FireDelayedEvent(nsIAccessibleEvent::EVENT_NAME_CHANGE, this);

View File

@@ -14,6 +14,8 @@ support-files = [
["browser_menu_and_alerts.js"] ["browser_menu_and_alerts.js"]
["browser_tab_name_change.js"]
["browser_test_A11yUtils_announce.js"] ["browser_test_A11yUtils_announce.js"]
["browser_test_caret_move_granularity.js"] ["browser_test_caret_move_granularity.js"]

View File

@@ -0,0 +1,38 @@
/* 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/. */
"use strict";
/* import-globals-from ../../mochitest/role.js */
loadScripts({ name: "role.js", dir: MOCHITESTS_DIR });
addAccessibleTask(``, async function (browser, _accDoc) {
let tabChanged = waitForEvent(
EVENT_FOCUS,
e => e.accessible.name == "One" && e.accessible.role == ROLE_DOCUMENT
);
// Put new tab in foreground
let tab = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
url: "data:text/html,<title>One</title>",
});
await tabChanged;
let nameChanged = waitForEvent(
EVENT_NAME_CHANGE,
e => e.accessible.name == "Two" && e.accessible.role == ROLE_PAGETAB
);
// Change name of background tab
BrowserTestUtils.startLoadingURIString(
browser,
"data:text/html,<title>Two</title>"
);
await nameChanged;
BrowserTestUtils.removeTab(tab);
});