From MozillaWiki
Jump to: navigation, search

This page provides information about our efforts in 2020 to improve Firefox accessibility on OSX.


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.


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 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


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 our 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.


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.

Full Query
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 RESOLVED

9 Total; 0 Open (0%); 5 Resolved (55.56%); 4 Verified (44.44%);

Firefox 76

  • Basic VoiceOver Support
  • Automated Testing
  • Code Modernization and Refactors

In Firefox 76 we are focusing on basic VoiceOver support and begining to apply our knowledge of what is needed towards refactors, cleanup, and hopefully a start on automated testing.

Full Query
ID Summary Priority Status
417564 protect against Obj-C exceptions in "accessible" top-level directory P1 RESOLVED
718624 [Mac] "pressing" links does not work P1 RESOLVED
718627 [Mac] Navigating by character, or interacting with, the text in the awesome bar does not speak the character. P1 RESOLVED
718633 [Mac] Links inside headings are prepresented by an "object replacement character", their text should be expanded. P1 VERIFIED
718637 [Mac] Firefox doesn't tell VoiceOver when a page has finished loading. P1 RESOLVED
720995 [Mac] VoiceOver does not see form fields that are nested inside label elements P1 RESOLVED
721001 [Mac] password entry fields not identified as such, entering password does not generate typical audible click P1 RESOLVED
740696 [Mac] we have children that are expired. P1 RESOLVED
1124681 [Mac] The checked state of a checkbox is not correctly exposed P1 RESOLVED
1617308 Fieldsets not announced as groupings in VoiceOver P1 RESOLVED
1617310 has popup menu items should be spoken as buttons in voiceover P1 RESOLVED
1617311 Details element and state are not spoken in VoiceOver P1 RESOLVED
1617312 Text leaves should not have description attributes P1 RESOLVED
1617314 aria-current not spoken in VoiceOver P1 RESOLVED
1617316 List items with non-list parent are not spoken in VoiceOver P1 RESOLVED
1618700 Selected aria tab is not indicated in VoiceOver or announced when selected. P1 RESOLVED
1618705 VoiceOver says HTML table has 0 columns P1 NEW
1618706 VoiceOver does not speak cells in a table with role of grid P1 NEW
1618708 VoiceOver does not speak value changes in slider P1 RESOLVED
1618712 aria heading level is not announced in VoiceOver P1 RESOLVED
1618716 aria-invalid is not announced in VoiceOver P1 VERIFIED
1618718 support aria-pressed P1 RESOLVED
1618719 support role=radiogroup in VoiceOver P1 RESOLVED
1619438 Null-check mContent before trying to get dom node id P1 RESOLVED
1619752 VoiceOver doesn't recognise link-groups in firefox P1 NEW
1620318 Invisible context menu shows up as a top level group even when it is not open P1 RESOLVED
1622731 Crash in [@ mozilla::dom::XULTreeElement::GetTreeBodyFrame] P1 VERIFIED
1624729 Introduce Mac platform mochitests P1 RESOLVED
1625293 Crash potential when root accessible is destroyed P1 RESOLVED

29 Total; 3 Open (10.34%); 23 Resolved (79.31%); 3 Verified (10.34%);

Firefox 77


Full Query
ID Summary Priority Status
1624909 Position of radio button and required attribute not reported P2 NEW
1624936 VoiceOver does not speak 'required' attribute on radio buttons P2 NEW
1624938 VoiceOver does not speak 'aria-required' attribute on radio buttons P2 NEW
1624940 VoiceOver does not report disabled options in selects P2 NEW
1624945 Incorrect role, type, value, attrs provided for input[type=image] buttons P2 RESOLVED
1624954 Support other aria-haspopup values besides "true" P2 NEW
1624958 VoiceOver cursor is lost when container changes role P2 NEW
1624964 VoiceOver does not speak "visited" link status P2 NEW
1625184 Support dialog role in mac P2 NEW
1625192 Support select element in VoiceOver P2 NEW
1625196 Support select[multiple] element in VoiceOver P2 NEW
1625266 VoiceOver does not report value, value changes for stepper P2 NEW
1625489 Speak list bullets/numbers in VoiceOver P2 NEW

13 Total; 12 Open (92.31%); 1 Resolved (7.69%); 0 Verified (0%);


Full Query
ID Summary Priority Status
716091 mac platform layer's cache of the role can get out of date P3 NEW
717820 [mac] localize "readable" strings in the Mac accessibilty code P3 NEW
746160 [Meta] Various new Mac a11y Mochitest failures P3 NEW
746177 Test timeout in events/test_focus_autocomplete.xul when testing the Yahoo! search field. P3 NEW
746183 Unexpected termination of complete test run in events/test_focus_contextmenu.xul P3 NEW
746519 Test timeout in events/test_focus_general.html when testing link tab shift. P3 NEW
746534 events/test_focus_selects.html unexpectedly terminates P3 NEW
746971 events/test_focus_tabbox.xul fails on Mac imminently P3 NEW
746974 Some hittest/ tests receive wrong deepest child on Mac P3 NEW
746977 tree/test_cssoverflow.html: shift tab failing, no focus event and a test timeout P3 NEW
751665 [Mac] TEST-UNEXPECTED-FAIL | chrome://mochitests/content/a11y/accessible/events/test_focus_menu.xul | Test timed out. P3 NEW
759236 a11y::TreeWalker timer is blocking the main thread P3 NEW
759412 [Mac] expire should make sure that the parent no longer reference P3 NEW
771113 Implement Accessible::Attribute(const nsIAtom* aName, nsAString& aValue) P3 NEW
890795 Intermittent TEST-UNEXPECTED-FAIL | events/test_focus_autocomplete.xhtml,test_focus_autocomplete.xul | uncaught exception - NS_ERROR_ILLEGAL_VALUE: Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIAccessible. P3 REOPENED
914052 Implement necessary text retrieval bits of NSAccessibility protocol P3 NEW
914054 Implement proper accessibility for door hangers P3 NEW
1143122 Firefox on Mac with VoiceOver fails to say the letter as you type in any text input field P3 NEW
1167937 test_doc_busy.html attempts to install an empty XPI file, leaving behind a popup notification that interferes with other tests P3 NEW
1198336 Firefox/Voiceover: aria-live regions not being announced P3 NEW
1226473 Firefox does not read selected text P3 NEW
1275513 Fix and re-enable a few combobox keyboard tests on OSX P3 NEW
1408620 "Speak selected text when the key is pressed" (TTS) feature of OSX no longer works in Firefox 57 P3 UNCONFIRMED
1413307 Screen reader clicks are not registered on custom inputs P3 UNCONFIRMED
1613749 Rotor does not show any items. P3 NEW
1616670 VoiceOver repeats bugzilla menubar twice P3 NEW
1625178 Support aria-roledescription in Mac P3 NEW

27 Total; 27 Open (100%); 0 Resolved (0%); 0 Verified (0%);