Issue metadata
Sign in to add a comment
|
IAccessible::get_accChild on sub-documents should only return descendants |
||||||||||||||||||||||||
Issue descriptionVersion: 51.0.2680.0 canary (64-bit) OS: Windows 10 64-bit STR: 1. Start NVDA. 2. Open the attached test case in Chrome. 3. Tab once to "A link in the root doc". 4. Tab again to "A link in the sub-doc". 5. Shift+tab back to "A link in the root doc". 6. Press control+page up to move the browse mode cursor to the top of the document. Expected: NVDA should say "This is the root doc." Actual: It sometimes says "This is the sub-doc." Note: This is intermittent because the data structure in which NVDA tracks documents is an unordered set. If you get the expected result, refresh and repeat from step 1. You may need to do this several times. In NVDA, sub-documents like this are rendered separately from the root document. When focus is in the sub-document, the browse mode cursor should be "trapped" inside it. In order to determine which document to use when handling an event, NVDA needs to be able to quickly determine whether the event object is inside a given document. It does this by calling IAccessible::get_accChild on the document, passing the id of the event object. If the call succeeds, the object is inside the document. If it fails, it isn't. Unfortunately, with the above example in Chrome, calling IAccessible::get_accChild on the sub-document passing the id of "A link in the root doc" succeeds. That is, even though the link is an ancestor of the sub-document (not a descendant), it still succeeds. A way to work around this is to crawl the ancestors for every event. However, this can be extremely expensive with deep hierarchies for out-of-process queries such as NVDA uses here. Note that Firefox does implement get_accChild in this manner. It's worth noting that as an optimisation, this does not need to work as described here for *all* objects. We only use this to test for descendants in documents. This includes HTML body elements, as well as nodes with an ARIA role of document, application or dialog. (The latter two are needed because users sometimes want to reat an ARIA dialog/application as a document, mostly due to poor authoring.) Impact: NVDA users can't reliably use sites that use ARIA dialogs/sub-documents. twitter.com is one good example. Related NVDA issue: https://github.com/nvaccess/nvda/issues/5818
,
Mar 18 2016
Correct. And yes, asking a parent document for the descendant of a sub-document should succeed.
,
Mar 18 2016
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/cc0f7046968cec63bf2fbebc60ed10a5c725b3d3 commit cc0f7046968cec63bf2fbebc60ed10a5c725b3d3 Author: dmazzoni <dmazzoni@chromium.org> Date: Fri Mar 18 19:30:07 2016 IAccessible::get_accChild should only return a descendant. BUG= 595959 Review URL: https://codereview.chromium.org/1811403002 Cr-Commit-Position: refs/heads/master@{#382050} [modify] https://crrev.com/cc0f7046968cec63bf2fbebc60ed10a5c725b3d3/content/browser/accessibility/browser_accessibility_win.cc [modify] https://crrev.com/cc0f7046968cec63bf2fbebc60ed10a5c725b3d3/content/browser/accessibility/browser_accessibility_win_unittest.cc [modify] https://crrev.com/cc0f7046968cec63bf2fbebc60ed10a5c725b3d3/ui/accessibility/platform/ax_platform_node_base.cc [modify] https://crrev.com/cc0f7046968cec63bf2fbebc60ed10a5c725b3d3/ui/accessibility/platform/ax_platform_node_win.cc [modify] https://crrev.com/cc0f7046968cec63bf2fbebc60ed10a5c725b3d3/ui/accessibility/platform/ax_platform_node_win_unittest.cc
,
Mar 18 2016
|
|||||||||||||||||||||||||
►
Sign in to add a comment |
|||||||||||||||||||||||||
Comment 1 by dmazz...@chromium.org
, Mar 18 2016