# Accessibility Object Model **Authors:** - Alice Boxhall, Google, aboxhall@google.com - James Craig, Apple, jcraig@apple.com - Dominic Mazzoni, Google, dmazzoni@google.com - Alexander Surkov, Mozilla, surkov.alexander@gmail.com **Table of Contents** - [Introduction](#introduction) - [Motivating use cases](#motivating-use-cases) - [The Accessibility Object Model](#the-accessibility-object-model) - [Reflecting ARIA attributes](#reflecting-aria-attributes) - [Spec/implementation status](#specimplementation-status) - [Reflecting Element references](#reflecting-element-references) - [Use case 2: Setting relationship properties without needing to use IDREFs](#use-case-2-setting-relationship-properties-without-needing-to-use-idrefs) - [Spec/implementation status](#specimplementation-status-1) - [Default semantics for Custom Elements via the `ElementInternals` object](#default-semantics-for-custom-elements-via-the-elementinternals-object) - [Use case 1: Setting non-reflected (“default”) accessibility properties for Web Components](#use-case-1-setting-non-reflected-default-accessibility-properties-for-web-components) - [Spec/implementation status](#specimplementation-status-2) - [Shipping, Needs Testing: User action events from Assistive Technology](#user-action-events-from-assistive-technology) - [Abandoned: New InputEvent types](#new-inputevent-types) - [Use case 3: Listening for events from Assistive Technology](#use-case-3-listening-for-events-from-assistive-technology) - [Spec/implementation status](#specimplementation-status-3) - [Speculative, Blocked: Virtual Accessibility Nodes](#virtual-accessibility-nodes) - [Use case 4: Adding non-DOM nodes (“virtual nodes”) to the Accessibility tree](#use-case-4-adding-non-dom-nodes-virtual-nodes-to-the-accessibility-tree) - [Spec/implementation status](#specimplementation-status-4) - [Full Introspection of an Accessibility Tree](#full-introspection-of-an-accessibility-tree) - [Use case 5: Introspecting the computed tree](#use-case-5-introspecting-the-computed-tree) - [Spec/implementation status](#specimplementation-status-5) - [Why is accessing the computed properties being addressed last?](#why-is-accessing-the-computed-properties-being-addressed-last) - [Audience for the proposed API](#audience-for-the-proposed-api) - [What happened to `AccessibleNode`?](#what-happened-to-accessiblenode) - [Next Steps](#next-steps) - [Incubation](#incubation) - [Additional thanks](#additional-thanks) - [Appendices](#appendices) - [Background: assistive technology and the accessibility tree](#background-assistive-technology-and-the-accessibility-tree) - [Accessibility node properties](#accessibility-node-properties) - [Background: DOM tree, accessibility tree and platform accessibility APIs](#background-dom-tree-accessibility-tree-and-platform-accessibility-apis) - [Mapping native HTML to the accessibility tree](#mapping-native-html-to-the-accessibility-tree) - [ARIA](#aria) - [Abandoned: Appendix: `AccessibleNode` naming](#appendix-accessiblenode-naming) - [Abandoned: Appendix: Partial proposed IDL for virtual accessibility nodes](#appendix-partial-proposed-idl-for-virtual-accessibility-nodes) - [Abandoned: Appendix: partial proposed IDL for `ComputedAccessibleNode`](#appendix-partial-proposed-idl-for-computedaccessiblenode) ## Introduction This effort aims to develop additions to the web platform to allow developers to provide information to assistive technology APIs, and to understand what information browsers provide to those APIs. ## Motivating use cases (More background on existing APIs can be found in the [Appendices](#appendices).) Web apps that push the boundaries of what's possible on the web struggle to make them accessible because the APIs aren't yet sufficient - in particular, they are much less expressive than the native APIs that the browser communicates with. 1. Setting non-reflected (“default”) accessibility properties for [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_Components) which can be overridden by page authors - Currently, Web Components are forced to use ARIA to declare their default semantics. This causes ARIA attributes which are really implementation details to "leak" into the DOM. - This capability _need not_, but _may_ be limited to Web Components. 2. Setting [relationship properties](https://www.w3.org/TR/wai-aria-1.1/#attrs_relationships) without needing to use IDREFs - Currently, to specify any ARIA relationship, an author must specify a unique ID on any element which may be the target of the relationship. - In the case of something like [`aria-activedescendant`](https://www.w3.org/TR/wai-aria-1.1/#aria-activedescendant), this may be one of hundreds or thousands of elements, depending on the UI. This requirement makes these APIs cumbersome to use and lead to many extra DOM attributes being necessary. 3. Listening for events from Assistive Technology - Currently, _only_ built-in elements have the capability to react to events, typically triggered by user actions such as ["increment"](https://developer.apple.com/documentation/objectivec/nsobject/1615076-accessibilityincrement). 4. Adding non-DOM nodes (“virtual nodes”) to the Accessibility tree - For example, to express a complex UI built out of a `` element, or streaming a remote desktop to a `