blob: 4ba75dc947c331c08de4d61f6c63782e7b17482e [file] [log] [blame] [view]
David Tsengdbb358b2021-11-24 00:01:111# How accessibility works
2
3## Overview
4In modern operating systems, accessibility can be thought of as the set of
5features which allow for alternative interactions with the system. In practice,
6it is all about letting users work in the best way they can, regardless of
7ability or disability. Since users have almost an unbounded set of needs,
8accessibility has to constantly keep up and adapt to include increasing numbers
9of alternate interactions. It is this very challenge which gives accessibility
10at the level of an operating system such complexity, depth, and interest.
11
12For Chrome OS, this document will provide the reader with a technical survey of
13the major system components to give a good foundation for additional
14exploration.
15
16At a glance, Chrome OS accessibility roughly decomposes into three major
17entities, separated by large abstractions like process boundaries or api layers.
18
19Through a slightly different lens, the three entities can also be thought of as the three major stakeholders in any accessibility interaction:
20- accessibility feature: an assitive technology (AT) developer can produce services targeting a specific audience. For example, screen readers such as ChromeVox. The extension system serves as a rich runtime with apis to transform the user interface into something a user can use.
21- frameworks: an operating system developer abstracts away low-level details to provide for a clean AT developer experience. In Chrome OS, this framework mainly comes by way of extension apis, though other internal api surfaces exist in C++ for Chromium developers as well. The apis are backed by libraries and executables run in native or sandboxed contexts.
22- renderers: app developers and web page authors have their content executed and drawn on-screen. This is where all user interactions such as key events end up. The developers and authors here also expose accessibility information for an accessibility tree.
23
24### Renderers
25A renderer as used by this document, is any component that draws to the
26screen. Some examples include Blink (for web content), ARC++ (for Android apps).
27
28Each of these renderers store an in-memory representation of their user
29interfaces. For Blink, this is the DOM or the render tree. For Android, this is
30the application view tree.
31
32In almost all modern renderers, there is an equivalent parallel structure, built
33off of the source of truth UI tree, called the accessibility tree. It is here
34where Chrome OS accessibility extracts all it needs.
35
36The accessibility tree is constructed and updated as the user interface changes
37in any way. Every single text change, scroll, load, and more gets
38represented. Likewise, every type of data provided by either a developer or the
39underlying framework is consumed and stored. This includes things like the
40rendered text, styling information, bounding boxes, tree relationships, and much
41more.
42
43When this construction finishes or updates with new content, the renderer will
44serialize the tree and prepare it for export out of process if needed. That
45moves the data to the framework entity below.
46
47For the web, PDF, and Android, renderers exist out of process. For the Aura
48windowing system, along with its Views toolkit, the accessible tree lives in the
49Ash process.
50
51#### Deep dives
52- [Chrome web accessibility](../browser/how_a11y_works.md)
53
54### Frameworks
55Here are a few key api surfaces on which accessibility depends.
56
57#### Public apis
58- [chrome.automation](https://developer.chrome.com/docs/extensions/reference/automation/)
59- [chrome.tts](https://developer.chrome.com/docs/extensions/reference/tts/)
60- [chrome.ttsEngine](https://developer.chrome.com/docs/extensions/reference/ttsEngine/)
61
62#### Private apis (only available in component accessibility extensions)
63- [chrome.accessibilityPrivate](https://source.chromium.org/chromium/chromium/src/+/main:chrome/common/extensions/api/accessibility_private.json)
64- [chrome.brailleDisplayPrivate](https://source.chromium.org/chromium/chromium/src/+/main:chrome/common/extensions/api/braille_display_private.idl)
65- [chrome.speechRecognitionPrivate](https://source.chromium.org/chromium/chromium/src/+/main:chrome/common/extensions/api/speech_recognition_private.idl)
66
67#### Libraries and system executables
68- [BRLTTY](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/main/app-accessibility/brltty/)
69- [Chrome OS text-to-speeech](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/main/app-accessibility/googletts/)
70- [Espeak text-to-speech](https://chromium.googlesource.com/chromiumos/overlays/chromiumos-overlay/+/main/app-accessibility/espeak-ng/)
71
72#### Deep dives
73- [How text-to-speech works on Chrome OS (coming soon)](how_tts_works.md).
74
75### Accessibility features
76See [How accessibility features work (coming soon)](how_a11y_features_work.md) for more details.