Accessibility interop in Chrome: from 88% to 100%

Chrome began 2024 with an 88.2% pass rate on the accessibility focus area of Interop 2024 web platform tests. By June 2024, Chrome became the first browser to reach a perfect 100% score. The path to that milestone involved aligning accessible name and computed role behavior with the specifications, plus several targeted fixes.

What the test suite covers

The accessibility tests in Interop 2024 verify that all browsers generate accessible names and computed roles consistently. An accessible name conveys an element's purpose to assistive technology users, and its calculation is defined by the accname specification, with a practical walkthrough in the ARIA practices guide.

The computed role is a string representation of an element's role as determined by the browser engine. It appears in developer tools and is exposed through commands like getComputedRole in WebDriver, which makes it a key enabler for interoperability testing.

Main work streams in Chromium

The Chrome team tackled two substantial areas: remapping certain roles to generic roles, and removing a deprecated role. Several smaller fixes rounded out the effort, and the team also coordinated with Microsoft on Chromium contributions targeting the same focus area.

Roles that lost their semantics

Mapping a role to a generic role strips an element of its accessibility semantics. Since generic elements hold no value in the accessibility tree, they get excluded from it entirely. That trims the tree, which makes parsing easier and faster for assistive technology. The following elements now map to generic roles:

  • A <header> within <main> or inside a sectioning content element (<article>, <aside>, <nav>, or <section>).
  • A <footer> with the same scoping.
  • An <aside> inside a sectioning content element that has no accessible name.
  • A <section> without an accessible name.
  • Orphaned list items, <li> elements outside any list.

The first four items usually map to landmark roles. When landmarks proliferate, page navigation gets harder for screen reader users, so this change cuts redundant landmarks. The last item typically signals an authoring error—list items belong inside lists—so the generic role is an appropriate fallback.

Retiring a role

The directory role is deprecated in ARIA 1.2, which states it is equivalent to list and should be replaced by it. To preserve the semantics of older content that still uses directory, Chrome now maps it to the list role.

Additional fixes and refinements

The gridcell role now has its own support. This separates it from the more limited cell role: a gridcell can be focusable, editable, and selectable.

Chrome also implemented fallback role calculation. Previously, when a declared role was invalid, the engine simply used a different role rather than following the specified error handling.

Contextual role validation got stricter. These roles now require a valid parent:

  • row needs to sit inside table, grid, rowgroup, or treegrid.
  • rowgroup relies on table, grid, tree, or treegrid.
  • listitem only makes sense inside a list.

When a role is used in an invalid context, Chrome now derives an alternative role from other available information, such as the underlying HTML element.

Finally, thead and tfooter elements are no longer flagged as ignored in the accessibility tree. They were previously marked as ignored yet still present; now table headers and footers are properly exposed for assistive technology to parse.

These changes are largely invisible to day-to-day web development, but they matter. When every engine exposes roles consistently, assistive technology can rely on the same behavior everywhere, and that consistency is the point of the joint interoperability effort.