From MozillaWiki
Jump to: navigation, search

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.


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

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.


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

Full Query
ID Summary Priority Status
1124681 [Mac] The checked state of a checkbox is not correctly exposed P1 VERIFIED
1371712 AXSubrole missing for ARIA landmark roles used on non-landmark HTML elements P3 RESOLVED
1616679 VoiceOver doesn't announce clickable item P1 VERIFIED
1617308 Fieldsets not announced as groupings in VoiceOver P1 VERIFIED
1617310 has popup menu items should be spoken as buttons in voiceover P1 VERIFIED
1617311 Details element and state are not spoken in VoiceOver P1 VERIFIED
1617312 Text leaves should not have description attributes P1 VERIFIED
1617314 aria-current not spoken in VoiceOver P1 VERIFIED
1618700 Selected aria tab is not indicated in VoiceOver or announced when selected. P1 VERIFIED
1618706 VoiceOver does not speak cells in a table with role of grid P1 VERIFIED
1618708 VoiceOver does not speak value changes in slider P1 VERIFIED
1618712 aria heading level is not announced in VoiceOver P1 VERIFIED
1618716 aria-invalid is not announced in VoiceOver P1 VERIFIED
1618718 support aria-pressed P1 VERIFIED
1618719 support role=radiogroup in VoiceOver P1 VERIFIED
1620318 Invisible context menu shows up as a top level group even when it is not open P1 VERIFIED
1621724 aria-invalid does not report correct value when e10s are disabled on mac P1 RESOLVED
1622731 Crash in [@ mozilla::dom::XULTreeElement::GetTreeBodyFrame] P1 VERIFIED
1623399 Doorhangers remain visible in VO after they are gone. P1 VERIFIED
1623402 "Show Context Menu" action is not supported when using VoiceOver P1 RESOLVED
1624434 VoiceOver repeats text in table headers P1 VERIFIED
1624729 Introduce Mac platform mochitests P1 RESOLVED
1625293 Crash potential when root accessible is destroyed P1 RESOLVED
1625832 VoiceOver "Show context menu" clicks in the wrong place P1 VERIFIED
1626036 Cache as many states as possible P1 RESOLVED
1626638 Tabs do not report correct subrole in OSX P1 RESOLVED
1626639 Radio buttons do not pass checked state in OSX P2 RESOLVED

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.

Full Query
ID Summary Priority Status
1618705 VoiceOver says HTML table has 0 columns P1 VERIFIED
1619752 VoiceOver doesn't recognise link-groups in firefox P1 VERIFIED
1624936 VoiceOver does not speak 'required' attribute on radio buttons P1 VERIFIED
1624954 Support other aria-haspopup values besides "true" P1 RESOLVED
1624964 VoiceOver does not speak "visited" link status P1 VERIFIED
1625266 VoiceOver does not report value, value changes for stepper P1 VERIFIED
1625489 Speak list bullets/numbers in VoiceOver P1 VERIFIED
1625864 Non-linked html:a elements should not be exposed as links to VoiceOver. P1 VERIFIED
1625870 Support figure and figcaption in OS X. P1 VERIFIED
1627311 Remove unnecessary link actions P1 RESOLVED
1627763 Context Menu should launch from center of focused item, not upper left P1 VERIFIED
1627765 Stop caching children in mac P1 RESOLVED
1627832 Prune all invisible children of top-level window P1 RESOLVED
1627899 Intermittent accessible/tests/browser/mac/browser_app.js | Test timed out - P1 RESOLVED
1631406 VoiceOver calls HR elements splitters, not separators like Safari does. P1 RESOLVED

15 Total; 0 Open (0%); 6 Resolved (40%); 9 Verified (60%);

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.

Full Query
ID Summary Priority Status
1624909 Position of radio button and required attribute not reported P1 RESOLVED
1625184 Support dialog role in mac P1 RESOLVED
1625192 Support select element in VoiceOver P1 RESOLVED
1625196 Support select[multiple] element in VoiceOver P1 RESOLVED
1632252 AccessibleOrProxy Rework for Mac Platform Code 😬 P2 RESOLVED
1634373 Add tests for role/subrole combinations for HTML and WAI-ARIA P1 RESOLVED
1635184 AXSubrole SearchField is never exposed to VoiceOver. P1 RESOLVED
1635483 Avoid making IPC calls on subrole calculations whenever possible. P1 RESOLVED
1635517 Filter out certain nodes in native mac accessibility tree P1 RESOLVED
1635521 MathML Roles and attributes should be factored out P1 RESOLVED
1635527 role=status elements need a proper role and subrole P1 RESOLVED
1635538 Image maps get AXUnknown roles in mac P1 RESOLVED
1638147 Add mochitests for mac's mathml support -- RESOLVED
1639623 When toggling radio button VO reports wrong state P1 RESOLVED
1641002 Implement base class and protocol to abstract apple methods P1 RESOLVED
1641644 Refactor mozAccessible to use MOXAccessible API P1 RESOLVED
1641654 Refactor mozHTMLAccessible classes to use MOXAccessible API P1 RESOLVED
1641655 Refactor mozSelectableElements classes to use MOXAccessible API P1 RESOLVED
1641657 Refactor mozRootAccessible to use MOXAccessible API P1 RESOLVED
1641659 Refactor mozActionElements to use MOXAccessible API P1 RESOLVED
1641665 Refactor mozTableAccessible to use MOXAccessible API P1 RESOLVED
1641960 Add test coverage for mozTextAccessible P2 RESOLVED

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

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.

Full Query
ID Summary Priority Status
914052 Implement necessary text retrieval bits of NSAccessibility protocol P1 NEW
1143122 Firefox on Mac with VoiceOver fails to say the letter as you type in any text input field P1 NEW
1620324 VoiceOver expects sub-group between HTML Content node and web content P1 NEW
1624938 VoiceOver does not speak 'aria-required' attribute on radio buttons P1 RESOLVED
1624940 VoiceOver does not report disabled options in selects P1 RESOLVED
1625880 Support heading announcements inside summary elements. P1 NEW
1628236 VoiceOver speaks wrong column number for cells following one that has a col span > 1 P1 NEW
1631276 Crash in [@ mozilla::ipc::FatalError | mozilla::ipc::IProtocol::HandleFatalError | mozilla::a11y::PDocAccessibleParent::SendChildAtPoint] P1 NEW
1637076 Rework accessible/mac classes to abide by new protocol and base/sub class invariants P1 NEW
1641932 Transfer Mac subrole mappings into RoleMap.h P1 RESOLVED
1642707 Firefox no longer sends VoiceOver a notification that the page finished loading. P1 NEW
1643168 AXFocusable should only be settable on focusable items. P1 NEW
1643765 Move gathering of ignored children to MOXAccessibleBase P1 NEW

13 Total; 10 Open (76.92%); 3 Resolved (23.08%); 0 Verified (0%);


Full Query
ID Summary Priority Status
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
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
914054 Implement proper accessibility for door hangers 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
1624958 VoiceOver cursor is lost when container changes role P3 NEW
1625178 Support aria-roledescription in Mac P3 NEW
1625868 Items in definition lists are counted wrong. P3 NEW
1625915 Support aria-errormessage in OS X. P3 NEW
1625929 Support aria-modal in OS X. P3 NEW
1625953 Support aria-controls and aria-flowto in OS X. P3 NEW
1628241 When traversing to a table with VoiceOver, VoiceOver immediately lands on the first cell. P3 NEW
1630292 Line breaks should not be read aloud by VoiceOver P3 NEW

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