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.
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.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
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.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
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.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
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.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
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.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
Firefox 80
- VoiceOver Text Support
- VoiceOver Rotor Support
In Firefox 80 we plan to have initial VoiceOver text and rotor support.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
Firefox 81
- VoiceOver Text Support
- VoiceOver Rotor Support
In Firefox 81 we will continue to implement initial VoiceOver text and rotor support.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
Firefox 82
- VoiceOver Text Support
- VoiceOver Rotor Support
In Firefox 82 we will continue to implement initial VoiceOver text and rotor support.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
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.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
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.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
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.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
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).
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
Firefox 87
- VoiceOver Quality & Performance
- VoiceOver missing pieces
In this release we will be maintaining quality and performance. We will also introduce attributed text.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1
Backlog
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 429 [1] => Unknown Error ) ) 1