[UIA] Implement foundations of native UIA implementation
Categories
(Core :: Disability Access APIs, task)
Tracking
()
Tracking | Status | |
---|---|---|
firefox126 | --- | fixed |
People
(Reporter: Jamie, Assigned: Jamie)
References
(Blocks 1 open bug)
Details
Attachments
(8 files)
48 bytes,
text/x-phabricator-request
|
Details | Review | |
48 bytes,
text/x-phabricator-request
|
Details | Review | |
48 bytes,
text/x-phabricator-request
|
Details | Review | |
48 bytes,
text/x-phabricator-request
|
Details | Review | |
48 bytes,
text/x-phabricator-request
|
Details | Review | |
48 bytes,
text/x-phabricator-request
|
Details | Review | |
48 bytes,
text/x-phabricator-request
|
Details | Review | |
48 bytes,
text/x-phabricator-request
|
Details | Review |
Our current UIA implementation is based on IAccessibleEx. We want to do a proper native implementation because the IA2 -> UIA proxy is very slow (see bug 762769 comment 4) and has other bugs/quirks beyond our control.
In this bug, we will respond to WM_GETOBJECT as native UIA expects, implement tree traversal, and get our existing (small) UIA test suite passing.
Assignee | ||
Comment 1•7 months ago
|
||
- Respond to WM_GETOBJECT with our IRawElementProviderSimple implementation for the root Accessible of the HWND.
- Don't allow QueryInterface to UIA interfaces if the UIA pref is disabled. This stops WM_GETOBJECT from returning our UIA implementation in this case.
- Specify the appropriate provider options.
Assignee | ||
Comment 2•7 months ago
|
||
Our IUnknownImpl macros avoid boilerplate, but they weren't designed to handle the quirky inheritance of our MSAA/UIA implementation.
Among other things, using these macros required us to override AddRef and Release in uiaRawElmProvider, which was a bit confusing.
Rather than perpetuating this weirdness as things get more complex, just implement what we need by hand.
Assignee | ||
Comment 3•7 months ago
|
||
This is how UIA traverses the tree.
Assignee | ||
Comment 4•7 months ago
|
||
This identifies the root of our implementation and allows for focus querying and hit testing.
We also implement IRawElementProviderSimple::get_HostRawElementProvider to connect to UIA's HWND provider.
Assignee | ||
Comment 5•7 months ago
|
||
We need this for our tests so they can find elements they're testing.
Assignee | ||
Comment 6•7 months ago
|
||
The actual ControlType property implementation is the subject of a subsequent patch.
Assignee | ||
Comment 7•7 months ago
|
||
Aside from being a fundamental part of semantics, this is needed for our tests.
These mappings are based on the Core AAM and HTML AAM specs, plus some personal judgement where Gecko roles weren't covered by these specs.
UIA control types are rather limited and they apparently expect us to expose a lot of things using LocalizedControlType, but that isn't implemented for now.
I expect these will need to be revised in future, but this is a starting point.
Assignee | ||
Comment 8•7 months ago
|
||
See the code comments for explanation.
Comment 10•7 months ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/7a390b42c154
https://hg.mozilla.org/mozilla-central/rev/99e2e8077f6c
https://hg.mozilla.org/mozilla-central/rev/106d9f34baf0
https://hg.mozilla.org/mozilla-central/rev/0535814eafd8
https://hg.mozilla.org/mozilla-central/rev/99f3316bea22
https://hg.mozilla.org/mozilla-central/rev/6a0c55ad599b
https://hg.mozilla.org/mozilla-central/rev/46bbfc5941c2
https://hg.mozilla.org/mozilla-central/rev/19d905446a32
Description
•