NVDA does not read visible text leaf when fuzzy hit testing with generics
Categories
(Core :: Disability Access APIs, defect)
Tracking
()
Tracking | Status | |
---|---|---|
firefox116 | --- | fixed |
People
(Reporter: nlapre, Assigned: morgan)
References
Details
Attachments
(1 file)
(deleted),
text/x-phabricator-request
|
Details |
The fix for Bug 1832686 does not seem to have worked on Windows with NVDA. This exists on LinkedIn.
STR:
- Open the following test case:
data:text/html,<a href="example.com" id="link"><span style="overflow:hidden;" id="generic"><span aria-hidden="true" id="visible">I am some visible text</span><span id="invisible" style="overflow:hidden; height: 1px; width: 1px; position:absolute; clip: rect(0 0 0 0); display:block;">I am some invisible text</span></span></a>
- Attempt to hit test the visible text with the mouse.
Expected: NVDA will read the visible text, "I am some visible text".
Actual: NVDA says "text frame"
I think this is an NVDA problem since this test - added in Morgan's patch - passes in central. This test is the same test case in the STR above.
Comment 1•1 year ago
|
||
:nlapre, if you think that's a regression, could you try to find a regression range using for example mozregression?
Reporter | ||
Comment 2•1 year ago
|
||
Similar, maybe the same bug:
<head><style>.visually-hidden {display: block !important;border: 0 !important;clip: rect(0 0 0 0) !important;height: 1px !important;margin: -1px !important;overflow: hidden !important;padding: 0 !important;position: absolute !important;white-space: nowrap !important;width: 1px !important;}</style></head><span title="Michael is a Premium member"><span aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" width="21" height="21"><g><path d="M19.5 0h-18A1.5 1.5 0 000 1.5v18A1.5 1.5 0 001.5 21h18a1.5 1.5 0 001.5-1.5v-18A1.5 1.5 0 0019.5 0zM6 18H3V8h3zM4.5 6.25a1.75 1.75 0 110-3.5 1.75 1.75 0 110 3.5zM18 18h-3v-5.09c0-1.62-.74-2.44-1.84-2.44A2.31 2.31 0 0011 13v5H8V8h3v1.39a4.06 4.06 0 013.3-1.63c1.77 0 3.66.93 3.66 4z"></path></g></svg></span><span class="visually-hidden">Michael has a premium account</span><a tabindex="0" href="https://www.linkedin.com/premium/products?upsellOrderOrigin=premium_badge_profile_upsell"><span class="visually-hidden">Click to upgrade to Premium</span></a></span>
Hit test the graphic and note that NVDA does not say "Michael has a premium account" as we'd expect.
Comment 3•1 year ago
|
||
This isn't a bug in NVDA. The test isn't wrong either. It's just not testing everything that NVDA does.
When VoiceOver (and some other screen readers) hit tests, they just find the deepest Accessible at the requested point (RemoteAccessibleBase::ChildAtPoint) and report its content. That works well enough, but doesn't allow you to report with finer text granularity; e.g. character, word, line or paragraph under the mouse. Instead, NVDA uses the text interface. Here's what it does (including the Gecko functions it maps to):
- Get the screen point under the mouse cursor. Let this be M.
- Hit test (RemoteAccessibleBase::ChildAtPoint) the root Accessible to get the deepest (eDeepestChild) Accessible at M. Let this target Accessible be T.
- If T is a text leaf, walk to its parent to get a HyperTextAccessible. Otherwise, just use T. Let this be H.
- On H, get the offset (HyperTextAccessibleBase::OffsetAtPoint) at M.
The hack in bug 1832686 deals with step 2. It doesn't deal with step 4. Since the point M is outside the bounds of HyperText H, we fail early in OffsetAtPoint. To fix this, we'd need to implement yet another hack there which detects this case and compensates for it.
Assignee | ||
Updated•1 year ago
|
Assignee | ||
Comment 4•1 year ago
|
||
Updated•1 year ago
|
Comment 6•1 year ago
|
||
bugherder |
Description
•