diff --git a/accessible/tests/browser/windows/ia2/browser_text.js b/accessible/tests/browser/windows/ia2/browser_text.js index fa41cf38aec0..550b559572d4 100644 --- a/accessible/tests/browser/windows/ia2/browser_text.js +++ b/accessible/tests/browser/windows/ia2/browser_text.js @@ -97,3 +97,37 @@ addAccessibleTask(``, async function testAddressBarTextModel() { const attrs = await runPython(`urlBar.attributes`); ok(attrs.includes("text-model:a1;"), "Address bar includes text-model:a1"); }); + +/** + * Test that HyperTextAccessible isn't used for XUL box/hbox/vbox elements; + * e.g. the address bar's action buttons. See bug 2069276. + */ +addAccessibleTask(``, async function testXulBoxNoTextInterface() { + info("Focusing address bar"); + let focused = waitForEvent(EVENT_FOCUS, "urlbar-input"); + gURLBar.inputField.focus(); + await focused; + + info("Tabbing to address bar action button"); + focused = waitForEvent( + EVENT_FOCUS, + evt => + evt.accessible.DOMNode.tagName == "hbox" && + evt.accessible.DOMNode.role == "button" + ); + EventUtils.synthesizeKey("KEY_Tab"); + await focused; + ok(true, "Address bar action button got focus"); + + const hasTextInterface = await runPython(` + try: + toIa2(getDocIa2().accFocus).QueryInterface(IAccessibleText) + return True + except COMError: + return False + `); + ok( + !hasTextInterface, + "Address bar action button does not support IAccessibleText" + ); +}); diff --git a/accessible/windows/msaa/MsaaAccessible.cpp b/accessible/windows/msaa/MsaaAccessible.cpp index 832c1591f1eb..3582dc88db83 100644 --- a/accessible/windows/msaa/MsaaAccessible.cpp +++ b/accessible/windows/msaa/MsaaAccessible.cpp @@ -71,9 +71,19 @@ MsaaAccessible* MsaaAccessible::Create(Accessible* aAcc) { return new ia2AccessibleImage(aAcc); } if (LocalAccessible* localAcc = aAcc->AsLocal()) { - if (localAcc->GetContent() && - localAcc->GetContent()->IsXULElement(nsGkAtoms::menuitem)) { - return new MsaaXULMenuitemAccessible(aAcc); + if (nsIContent* content = localAcc->GetContent()) { + if (content->IsXULElement(nsGkAtoms::menuitem)) { + return new MsaaXULMenuitemAccessible(aAcc); + } + if (content->IsXULElement(nsGkAtoms::box) || + content->IsXULElement(nsGkAtoms::hbox)) { + // Bug 2069276: Exposing text interfaces for XUL boxes causes problems + // for some clients; e.g. NVDA mouse tracking on address bar action + // buttons. Generally, XUL is more like desktop UI anyway, which usually + // doesn't expose text interfaces for buttons. Therefore, don't use + // ia2AccessibleHypertext for these. + return new MsaaAccessible(aAcc); + } } } if (aAcc->IsHyperText()) {