mozilla/gecko-dev
Accessibility
accessible/ implements the platform accessibility APIs that screen readers (NVDA, JAWS, VoiceOver, Orca, TalkBack) use to interact with web content. It exposes the DOM through MSAA / IA2 (Windows), AT-SPI (Linux), AppKit accessibility (macOS), and AccessibilityNodeInfo (Android).
What's in the directory
accessible/
├── base/ # Core: nsAccessibilityService, AccessibleWrap, role definitions
├── generic/ # Frame ↔ Accessible mapping, default trees
├── html/ # HTML-element-specific accessibles
├── ipc/ # Cross-process accessibility tree (RemoteAccessible)
├── windows/ # MSAA + IA2
├── mac/ # NSAccessibility
├── atk/ # AT-SPI
├── android/ # AccessibilityNodeInfo bridge
├── tests/ # mochitests
└── xpcom/ # nsIAccessibilityService etc.How it works
graph LR
DOM[DOM tree] --> A11ySvc[nsAccessibilityService]
A11ySvc --> Accessible[mozilla::a11y::Accessible<br/>(LocalAccessible / RemoteAccessible)]
Accessible --> Platform[Platform binding<br/>MSAA / IA2 / AT-SPI / NSA / Android]
Platform --> AT[Assistive technology]For each document, an accessibility tree is built lazily mirroring the visible content tree. Roles, names (computed via Accessible Name and Description Computation algorithm), states, and relationships propagate through it.
Under Fission, the accessibility tree is sharded across processes. The parent process sees a unified tree composed of RemoteAccessible proxies; events come over IPDL.
Cache mode
A relatively recent change moved the accessibility implementation to a cache-driven model: the parent maintains a serialized cache of all relevant accessible state, updated incrementally from each content process. This reduces sync IPC and improves reliability for screen-reader scenarios.
Related
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.