mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 15:25:52 +00:00
Bug 1672694 - P2: Don't fire AXSelectedTextChanged if target is not selectable. r=morgan
This causes VoiceOver to mess with `AXFocused` and as a result redirect the VO cursor. Differential Revision: https://phabricator.services.mozilla.com/D95784
This commit is contained in:
parent
8a078f1f55
commit
f80fe575c5
@ -941,6 +941,9 @@ struct RoleDescrComparator {
|
||||
NSAccessibilitySelectedChildrenChangedNotification];
|
||||
break;
|
||||
case nsIAccessibleEvent::EVENT_TEXT_CARET_MOVED: {
|
||||
if (![self stateWithMask:states::SELECTABLE_TEXT]) {
|
||||
break;
|
||||
}
|
||||
// We consider any caret move event to be a selected text change event.
|
||||
// So dispatching an event for EVENT_TEXT_SELECTION_CHANGED would be
|
||||
// reduntant.
|
||||
|
@ -5,7 +5,7 @@
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Test rotor with heading
|
||||
* Test simple text selection
|
||||
*/
|
||||
addAccessibleTask(`<p id="p">Hello World</p>`, async (browser, accDoc) => {
|
||||
let macDoc = accDoc.nativeInterface.QueryInterface(
|
||||
@ -47,3 +47,62 @@ addAccessibleTask(`<p id="p">Hello World</p>`, async (browser, accDoc) => {
|
||||
range = macDoc.getAttributeValue("AXSelectedTextMarkerRange");
|
||||
is(stringForRange(macDoc, range), "Hello");
|
||||
});
|
||||
|
||||
/**
|
||||
* Test text selection events caused by focus change
|
||||
*/
|
||||
addAccessibleTask(`<p>
|
||||
Hello <a href="#" id="link">World</a>,
|
||||
I <a href="#" style="user-select: none;" id="unselectable_link">love</a>
|
||||
<button id="button">you</button></p>`,
|
||||
async (browser, accDoc) => {
|
||||
// Set up an AXSelectedTextChanged listener here. It will get resolved
|
||||
// on the first non-root event it encounters, so if we test its data at the end
|
||||
// of this test it will show us the first text-selectable object that was focused,
|
||||
// which is "link".
|
||||
let selTextChanged = waitForMacEvent(
|
||||
"AXSelectedTextChanged",
|
||||
e => e.getAttributeValue("AXDOMIdentifier") != "body"
|
||||
);
|
||||
|
||||
let focusChanged = waitForMacEvent("AXFocusedUIElementChanged");
|
||||
await SpecialPowers.spawn(browser, [], () => {
|
||||
content.document.getElementById("unselectable_link").focus();
|
||||
});
|
||||
let focusChangedTarget = await focusChanged;
|
||||
is(
|
||||
focusChangedTarget.getAttributeValue("AXDOMIdentifier"),
|
||||
"unselectable_link",
|
||||
"Correct event target"
|
||||
);
|
||||
|
||||
focusChanged = waitForMacEvent("AXFocusedUIElementChanged");
|
||||
await SpecialPowers.spawn(browser, [], () => {
|
||||
content.document.getElementById("button").focus();
|
||||
});
|
||||
focusChangedTarget = await focusChanged;
|
||||
is(
|
||||
focusChangedTarget.getAttributeValue("AXDOMIdentifier"),
|
||||
"button",
|
||||
"Correct event target"
|
||||
);
|
||||
|
||||
focusChanged = waitForMacEvent("AXFocusedUIElementChanged");
|
||||
await SpecialPowers.spawn(browser, [], () => {
|
||||
content.document.getElementById("link").focus();
|
||||
});
|
||||
focusChangedTarget = await focusChanged;
|
||||
is(
|
||||
focusChangedTarget.getAttributeValue("AXDOMIdentifier"),
|
||||
"link",
|
||||
"Correct event target"
|
||||
);
|
||||
|
||||
let selTextChangedTarget = await selTextChanged;
|
||||
is(
|
||||
selTextChangedTarget.getAttributeValue("AXDOMIdentifier"),
|
||||
"link",
|
||||
"Correct event target"
|
||||
);
|
||||
}
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user