Accessibility/Mac2020
This page provides information about our efforts in 2020 to improve Firefox accessibility on OSX. Contributors are encouraged to look at our contributor guide, and our architectural overview.
Contents
Rationale
OSX is a popular platform among web developers and designers. It is important we provide a means for testing web content accessibility in OSX. Historically, our OSX support has been plagued with performance issues, but we can still provide a good benchmark for developers to test with. After we reach API completeness, we will do a second pass to optimize the experience for VoiceOver users and assure the performance is optimal and comparable to other browsers.
Plan
Throught 2020 we plan to improve Firefox VoiceOver support to provide an accessible experience to users, and a dependable testing platform for web developers who see to make their web applications accessible.
With this work we hope to tackle several areas:
External Tooling
This includes scripts and programs that will give us insight into our current support and browser compliance in general. Examples of such tools include a tree dumper, event logger, VoiceOver automation tool, and VoiceOver benchmarking.
Automated Testing
We should strive to have as much automated test coverage as possible. With the exception of Android we don't currently have any real platform accessibility testing happening in-tree in CI. There is a potential to introduce this in Mac. This will allow us to maintain a our Mac accessibility support as our attention goes elsewhere.
Code Modernization and Refactors
The current Mac code was written for older Mac SDKs and uses deprecated calls. In addition, the Mac platform code was introduced before e10s shipped. There are many places where we should be streamlining our codebase so we can continue to extend our Mac support.
Basic VoiceOver Support
Basic support means anything that is needed for VoiceOver to present web content correctly. This includes role, state, events and actions mappings. Most things in https://a11ysupport.io/ that are supported by Safari fall into this category.
VoiceOver Text Support
This includes text editing, so a user has feedback from insertions, deletions, caret and selection changes. and granular text navigation. In addition this would include read-only text navigation by granularity such as character, word and line.
VoiceOver Live Regions
Live regions allow users to know an important part of the page changed. We support Live regions on all major platforms except OSX.
Rotor VoiceOver Support
VoiceOver has a feature called a "rotor" that opens a list of all similar types of items on a page, like headings, links or form controls. We currently don't support it. We need to find an efficient way to do it so that it will be responsive and quick. This has proven tricky in the past since it requires a full tree traversal on potentially very large documents.
VoiceOver Performance
Historically, Firefox's VoiceOver performance made it unusable to casual users. A simple cursor navigation in a page, which should never be more than a small fraction of a second, could sometimes take up to 30 seconds. This year we have already made progress on this front and are in reach of Safari and Chrome response times. With a benchmarking tool we can find additional hotspots and make the VoiceOver experience even smoother. This may involve some selective caching of certain properties and other tricks.
IPC Redirection (exploration)
If time permits it would be cool to explore the possibility of having accessibility services talk directly to content processes and not use the synchronous IPDL calls that link content to the top level process. This can improve performance and help do away with janky synchronous calls.
User Scenarios
Here are the initial, in-scope, and agreed-upon web sites / applications that the engineering and test teams are to make sure have supported and useful VoiceOver experiences (navigation, primary interactions like search and compose, etc.):
- New York Times
- Gmail
- Google Calendar
- Google Drive
- Google Docs
- YouTube
- Amazon
- GitHub
- Slack
- Wikipedia homepage
- Wikipedia: Starlink
- Google search
- about:newtab
- about:logins
- about:addons
- History, Bookmarks manager
- addons.mozilla.org
- Mozilla.org
See also: More detail and test instructions for these scenarios (Mozilla-internal Google Doc link)
Roadmap
Since the task is large and hard to scope we will be breaking down the work for each Firefox release with the hope to tackle a common user story or theme on each iteration. While we work on one release we will formalize plans for the next one.
Firefox 75
- Basic VoiceOver Support
- VoiceOver Performance
- External Tooling
In Firefox 75 we focused on building tools for querying Mac accessibility APIs and VoiceOver. This helped us better understand the space and gives us what we need to continue building our Mac support. We also got our feet wet in the Mac codebase and resolved some pressing issues we noticed immediately like focus behavior and labeling. Notably, we uncovered a major performance bug that quickly made us quick.
ID | Summary | Priority | Status |
---|---|---|---|
1380027 | OSX VoiceOver cursor does not respond to tab key press with e10s | P3 | VERIFIED |
1611428 | aria-label does not work in input field with VoiceOver | P3 | RESOLVED |
1614079 | Hit testing does not cross process boundaries in e10s | P3 | RESOLVED |
1614834 | Items don't scroll into view with VoiceOver cursor | P3 | VERIFIED |
1614835 | Items don't focus when VoiceOver's cursor lands on them | P3 | VERIFIED |
1617301 | VoiceOver does not follow keyboard focus | P2 | VERIFIED |
1618364 | Allow AppKit to cache accessible tree | P2 | RESOLVED |
1619438 | Null-check mContent before trying to get dom node id | P1 | RESOLVED |
1619458 | Don't expose browser tooltips to VoiceOver | P2 | VERIFIED |
9 Total; 0 Open (0%); 4 Resolved (44.44%); 5 Verified (55.56%);
Firefox 76
- Basic VoiceOver Support
- Automated Testing
- Code Modernization and Refactors
In Firefox 76 we are focusing on basic VoiceOver support and beginning to apply our knowledge of what is needed towards refactors, cleanup, and hopefully a start on automated testing.
27 Total; 0 Open (0%); 8 Resolved (29.63%); 19 Verified (70.37%);
Firefox 77
- Basic VoiceOver Support
- Code Modernization and Refactors
In Firefox 77 we will continue to focus on basic VoiceOver support, refactor and modernize our codebase, and expand our Mac test coverage.
15 Total; 0 Open (0%); 5 Resolved (33.33%); 10 Verified (66.67%);
Firefox 78
- Basic VoiceOver Support
- Code Modernization and Refactors
In Firefox 78 we will continue to focus on basic VoiceOver support, refactor and modernize our codebase, and expand our Mac test coverage.
22 Total; 0 Open (0%); 18 Resolved (81.82%); 4 Verified (18.18%);
Firefox 79
- Code Modernization and Refactors
- VoiceOver Text Support
In Firefox 79 we plan to finish the refactor we started in 78 and start working on VoiceOver text support.
ID | Summary | Priority | Status |
---|---|---|---|
1630292 | Line breaks should not be read aloud by VoiceOver | P1 | VERIFIED |
1637076 | Rework accessible/mac classes to abide by new protocol and base/sub class invariants | P1 | RESOLVED |
1641932 | Transfer Mac subrole mappings into RoleMap.h | P1 | RESOLVED |
1641984 | Add Parameterized Attributes to MOX protocol | P2 | RESOLVED |
1642024 | Remove method-based NSAccessibility attributes and actions | P2 | RESOLVED |
1642030 | Support parameterized attributes in our XPCOM mac interface | P2 | RESOLVED |
1642033 | Refactor mozTextAccessible to use MOXAccessible API | P2 | RESOLVED |
1642448 | Replace remaining NSAssert statements in accessible/mac/ with MOZ_ASSERT's | P2 | RESOLVED |
1642707 | Firefox no longer sends VoiceOver a notification that the page finished loading. | P1 | VERIFIED |
1643168 | AXFocusable should only be settable on focusable items. | P1 | RESOLVED |
1647828 | AXPress is available on all nodes | P2 | RESOLVED |
11 Total; 0 Open (0%); 9 Resolved (81.82%); 2 Verified (18.18%);
Firefox 80
- VoiceOver Text Support
- VoiceOver Rotor Support
In Firefox 80 we plan to have initial VoiceOver text and rotor support.
ID | Summary | Priority | Status |
---|---|---|---|
1226473 | Firefox does not read selected text | P1 | RESOLVED |
1628236 | VoiceOver speaks wrong column number for cells following one that has a col span > 1 | P1 | VERIFIED |
1628241 | When traversing to a table with VoiceOver, VoiceOver immediately lands on the first cell. | P3 | RESOLVED |
1643765 | Move gathering of ignored children to MOXAccessibleBase | P1 | RESOLVED |
1649575 | Introduce basic TextMarker and TextMarkerRange support | P1 | RESOLVED |
1650740 | Crash in [@ mozilla::a11y::GeckoTextMarkerRange::TextInternal] | P1 | RESOLVED |
1653039 | Support text word boundaries API in mac | P1 | RESOLVED |
1653421 | Add data to text value change events in mac | P1 | RESOLVED |
1654601 | Crash in [@ mozilla::a11y::GeckoTextMarker::NormalizePrevious] | P1 | RESOLVED |
9 Total; 0 Open (0%); 8 Resolved (88.89%); 1 Verified (11.11%);
Firefox 81
- VoiceOver Text Support
- VoiceOver Rotor Support
In Firefox 81 we will continue to implement initial VoiceOver text and rotor support.
ID | Summary | Priority | Status |
---|---|---|---|
1652809 | [VoiceOver] add rotor support for headings | P1 | RESOLVED |
1654603 | contentEditables with embedded divs throw off textmarkers. | P1 | RESOLVED |
1654679 | Add selected text marker range to text selection changed events | P1 | RESOLVED |
1655779 | Crash in [@ mozilla::a11y::GeckoTextMarkerRange::LinkCount] | P1 | RESOLVED |
1657193 | Crash in [@ mozilla::a11y::GeckoTextMarkerRange::TextInternal] | P1 | RESOLVED |
1657653 | Calling certain text operations in mac hangs firefox | P1 | VERIFIED |
1657665 | Cannot navigate past initial link with VO | P1 | RESOLVED |
1657765 | Implement mac text API in content process | P1 | RESOLVED |
1658427 | Add mac platform logging | P2 | RESOLVED |
1658832 | Add articles to VoiceOver Rotor | P1 | RESOLVED |
1659215 | Expose previously slow text attributes | P1 | RESOLVED |
1660109 | Support AXBoundsForTextMarkerRange | P1 | RESOLVED |
12 Total; 0 Open (0%); 11 Resolved (91.67%); 1 Verified (8.33%);
Firefox 82
- VoiceOver Text Support
- VoiceOver Rotor Support
In Firefox 82 we will continue to implement initial VoiceOver text and rotor support.
21 Total; 0 Open (0%); 21 Resolved (100%); 0 Verified (0%);
Firefox 83
- VoiceOver Text Support
- VoiceOver Live Regions
In Firefox 83 we will work on Live Regions support, continue progress on text APIs and polish our rotor API.
32 Total; 0 Open (0%); 28 Resolved (87.5%); 4 Verified (12.5%);
Firefox 84
- VoiceOver Quality & Performance
- VoiceOver support for tree views
In this release we focused on quality, performance, and introduced initial support for tree views.
18 Total; 0 Open (0%); 11 Resolved (61.11%); 7 Verified (38.89%);
Firefox 85
- VoiceOver Quality & Performance
- VoiceOver Live Regions
In this release we will be focusing on quality, performance, and introduce live regions. This is targeted towards being the consumer preview release for VoiceOver support.
16 Total; 0 Open (0%); 11 Resolved (68.75%); 5 Verified (31.25%);
Consumer Preview Tasks
By Firefox 85 (complete December 15th, Release on January 26, 2021) we will have completed:
- ✅ Scenarios (scope) definition
- 🏃♀️ Engineering and Test Engineering run the Scenarios test suite (weekly)
- ✅ Scenarios provided and PI request submitted
- ⏸ "Preview Blocking" bugs filed against full Scenarios test suite
- ⏸ PI bugs filed and Engineering triage (blockers vs. non-blockers)
- ⏸ Blocking bugs fixed
- 🏃♀️ Preview Announcement (Release Notes blurb) drafted and submitted
- 🏃♀️ Hacks/Accessibility blog post drafted and published
- ⏸ Internal Platform-wide Demo and follow-up email for feedback and visibility
✅ means Completed, Done 🏃♀️ means In Progress, Running ⏸ means Paused, Not Ready, Blocked
Firefox 86
- VoiceOver Quality & Performance
- VoiceOver missing pieces
In this release we will be focusing on quality, performance, and address feedback from the consumer preview release (see above).
17 Total; 0 Open (0%); 15 Resolved (88.24%); 2 Verified (11.76%);
Firefox 87
- VoiceOver Quality & Performance
- VoiceOver missing pieces
In this release we will be maintaining quality and performance. We will also introduce attributed text.
13 Total; 0 Open (0%); 13 Resolved (100%); 0 Verified (0%);
Backlog
31 Total; 31 Open (100%); 0 Resolved (0%); 0 Verified (0%);