Topic: e10s a11y, bug 646596
Approach: each process has own accessible tree, i.e. no unified tree.
Motivation: every process keeps its DOM tree and its frame tree, keeping accessible tree in a process allows to minimize proxy and caching requirements, from AT and browser interaction perspective it allows AT keep working if one process hangs.
Approach 1: Each process has own window (HWND), no unified tree. This is most performant approach and it allows AT to communicate with documents independently. If AT needs to crawl hierarchy then they need to operate on HWND hierarchy.
Approach 2: Each process has own window (HWND), unified MSAA tree. When process boundaries are crossed then rely on windows marshaling magic. The boundaries crossing makes sense for out-of-process calls.
The approach 1 breaks user experience in NVDA bug 649720. The same time certain screen readers feels fine with this approach. Maybe AT sniffing is a way to go.
Actions: Work with AT vendors to make their products working with new Firefox.
- keep a preference allowing to run browser in one process,
- make installer to autodetect if incompatible AT is running, switch on the preference if needed.
AT-SPI is going to work with unified tree by socket mechanism currently used by plugins
(bug 480317). The chrome process gets atk plugid from content process, creates the socket and connects it with the given plugid. Communication between treads is preformed by IPDL.
Needs investigation. Maybe it makes sense to get it working on one-process Firefox at all before that. Otherwise it's hard to check whether we were succeed or not.
- accessibility service lives in each process (that makes DOM events and nsIWebProgressListener work)
- application accessible should live in chrome process
- root accessible should be a root in own process (not per a window) (that makes DOM events working)
Mochitests are depended we have unified tree, we should replace these assumptions on equivalent ones.
- Change DOMi UI to inspect accessibility (maybe DOMi itself requires changes to work on multiprocess browser)
- What's happen with other tools (just curious). If accProbe is based on hierarchy then it shows only chrome process tree. Work with tool developers to make sure they work with Firefox.
Manual test plan
All of these tests must be performed with various assistive technologies, primarily screen readers since these make the most use of accessibility APIs.
- Make sure electrolysis-enabled Firefox with only one tab open behaves identical to non-electrolysis Firefox. This is assuming the first tab always lives in the chrome process.
- Make sure traversal between chrome and content does not lead to any unexpected results.
- Test forms mode in various screen readers.
- Make sure multiple tabs behave similar to the first tab which lives in the chrome process.
- Activate links and make sure this works as expected. Also use links list or other listing features of ATs to make sure they still get relevant information.
- Test forms mode. Make sure screen readers transition properly in and out, get text updates in text fields/textareas etc, and are able to activate other elements such as radio buttons or checkboxes without using forms mode.
- Test the return to previous page.
- Test mouse cursor routing to make sure people are still able to click elements in case web page authors ttrap keyboard access in their web apps.
- Test transition of keyboard focus between content and chrome.
- Make sure focus doesn't get lost when tabbing between UI elements of the browser and the page, like the tab bar, awesome bar, search box, and back into the content area.
- Open and close both regular menus and context menus to make sure screen readers don't get stuck on any transition.
- Open and close chrome dialogs like About window, Options dialog, printing etc and make sure screen readers keep track.
- Test accessible tree traversal with screen reader tools (e. g. object navigator in NVDA) to see if it gets stuck anywhere when transitioning from content to chrome and back.