Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: docs/accessibility.md

Issue 2385683003: docs: add accessibility overview (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Accessibility Overview
dmazzoni 2016/09/30 19:34:46 Thanks for writing this. Can you please link to t
Elly Fong-Jones 2016/10/03 11:54:42 As soon as it's landed, I can update that site to
2
3 This document describes how accessibility is implemented throughout Chromium at
4 a high level.
5
6 ## Concepts
7
8 The three central concepts of accessibility are:
9
10 1. The *tree*, which models the entire interface as a tree of objects, exposed
11 to screenreaders or other accessibility software;
12 2. *Events*, which let accessibility software know that a part of the tree has
13 changed somehow;
14 3. *Commands*, which come from accessibility software and ask the interface to
dmazzoni 2016/09/30 19:34:46 I think we call this "actions" most often in the c
Elly Fong-Jones 2016/10/03 11:54:42 Done.
15 change.
16
17 All three concepts are handled at several layers in Chromium.
18
19 ## Blink
20
21 Blink constructs an accessibility tree (a heirarchy of [WebAXObject]s) from the
dmazzoni 2016/09/30 19:34:46 heirarchy -> hierarchy
Elly Fong-Jones 2016/10/03 11:54:42 I have been making this typo my entire life :(
22 page it is rendering. WebAXObject is the public API wrapper around [AXObject],
23 which is the core class of Blink's accessibility tree. AXObjects come in two
24 kinds: [AXNodeObject], which represents a [Node] in the accessibility tree,
dmazzoni 2016/09/30 19:34:46 Two things are unclear in this description: 1. AX
Elly Fong-Jones 2016/10/03 11:54:42 Done.
25 and [AXLayoutObject], which represents a [LayoutObject] in the accessibility tre e.
26 LayoutObjects are more or less Nodes with CSS applied; AXLayoutObject exists
dmazzoni 2016/09/30 19:34:46 LayoutObjects are a lot more than that. There are
Elly Fong-Jones 2016/10/03 11:54:42 Done.
27 primarily because certain kinds of node should only appear in the AXObject tree
28 depending on details of their geometry or visibility.
29
30 The central class responsible for dealing with accessibility events in Blink is
31 [AXObjectCacheImpl], which is responsible for caching the corresponding
32 AXObjects for Nodes or LayoutObjects. This class has many methods named
33 `handleFoo`, which are called throughout Blink to notify the AXObjectCacheImpl
34 that it may need to update its tree. Since this class is already aware of all
35 accessibility events in Blink, it is also responsible for relaying accessibility
36 events from Blink to the embedding content layer.
37
38 ## The content layer
39
40 The content layer lives on both sides of the renderer/browser split. The content
41 layer translates WebAXObjects into [AXContentNodeData], which is a subclass of
42 [ui::AXNodeData]. The ui::AXNodeData class and related classes are Chromium's
43 cross-platform accessibility tree. The translation is implemented in
44 [BlinkAXTreeSource]. This translation happens on the renderer side, so the
45 ui::AXNodeData tree now needs to be sent to the browser, which is done by
46 sending [AccessibilityHostMsg_EventParams] with the payload being serialized
47 delta-updates to the tree, so that changes that happen on the renderer side can
48 be reflected on the browser side.
49
50 On the browser side, these IPCs are received by [BrowserAccessibilityManager],
dmazzoni 2016/09/30 19:34:46 They're actually received by RenderFrameHostImpl,
Elly Fong-Jones 2016/10/03 11:54:42 Done.
51 which is responsible for:
52
53 1. Combining AXNodeData trees into a tree of [BrowserAccessibility] objects.
dmazzoni 2016/09/30 19:34:46 To clarify a bit, this is handled by AXTree, and B
Elly Fong-Jones 2016/10/03 11:54:42 I think I rewrote this to make more sense.
54 This is important because each page has its own accessibility tree, but each
55 Chromium *window* must have only one accessibility tree, so trees from
56 multiple pages need to be combined (possibly also with trees from Views UI).
57 This is done by [AXTreeCombiner].
dmazzoni 2016/09/30 19:34:46 Actually AXTreeCombiner isn't used for this. Rathe
Elly Fong-Jones 2016/10/03 11:54:42 Done.
58 2. Dispatching outgoing accessibility events to the platform's accessibility
59 APIs. This is done in the platform-specific subclasses of
60 BrowserAccessibilityManager, in a method named `NotifyAccessibilityEvent`.
61 3. Dispatching incoming accessibility commands to the appropriate recipient, via
62 [BrowserAccessibilityDelegate]. For messages destined for a renderer,
63 [RenderFrameHostImpl], which is a BrowserAccessibilityDelegate, is
64 responsible for sending appropriate `AccessibilityMsg_Foo` IPCs to the
65 renderer, where they will be received by [RenderAccessibilityImpl].
66
67 ## Views
68
69 Views generates a tree of AXPlatformNodes corresponding to the tree of Views.
dmazzoni 2016/09/30 19:34:46 Sort of the other way around, each View creates a
Elly Fong-Jones 2016/10/03 11:54:42 Done.
70 This is implemented in [NativeViewAccessibility] and is mostly straightforward.
dmazzoni 2016/09/30 19:34:46 The un-straightforward part is how the web tree is
Elly Fong-Jones 2016/10/03 11:54:42 Done.
71
72 ## WebUI
73
74 Since WebUI surfaces have renderer processes as normal, WebUI accessibility goes
75 through the blink-to-content-to-platform pipeline described above. Accessibility
76 for WebUI is largely implemented in JavaScript in [webui-js]; these classes take
77 care of adding ARIA attributes and so on to DOM nodes as needed.
78
79 ## The chrome layer
dmazzoni 2016/09/30 19:34:46 I'd call this the "Chrome OS" layer, since that's
Elly Fong-Jones 2016/10/03 11:54:42 Done.
80
81 The accessibility tree is also exposed via the [chrome.automation API], which
82 gives extension JavaScript access to the accessibility tree, events, and
83 commands. This API is implemented in C++ by [AutomationInternalCustomBindings],
84 which is renderer-side code, and in JavaScript by the [automation API]. The API
85 is defined by [automation.idl], which must be kept synchronized with
86 [ax_enums.idl].
87
88 [AccessibilityHostMsg_EventParams]: https://cs.chromium.org/chromium/src/content /common/accessibility_messages.h?sq=package:chromium&l=75
89 [AutomationInternalCustomBindings]: https://cs.chromium.org/chromium/src/chrome/ renderer/extensions/automation_internal_custom_bindings.h
90 [AXContentNodeData]: https://cs.chromium.org/chromium/src/content/common/ax_cont ent_node_data.h
91 [AXLayoutObject]: https://cs.chromium.org/chromium/src/third_party/WebKit/Source /modules/accessibility/AXLayoutObject.h
92 [AXNodeObject]: https://cs.chromium.org/chromium/src/third_party/WebKit/Source/m odules/accessibility/AXNodeObject.h
93 [AXObject]: https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modul es/accessibility/AXObject.h
94 [AXObjectCacheImpl]: https://cs.chromium.org/chromium/src/third_party/WebKit/Sou rce/modules/accessibility/AXObjectCacheImpl.h
95 [AXTreeCombiner]: https://cs.chromium.org/chromium/src/ui/accessibility/ax_tree_ combiner.h
96 [AXTreeSerializer]: https://cs.chromium.org/chromium/src/ui/accessibility/ax_tre e_serializer.h
97 [BlinkAXTreeSource]: https://cs.chromium.org/chromium/src/content/renderer/acces sibility/blink_ax_tree_source.h
98 [BrowserAccessibility]: https://cs.chromium.org/chromium/src/content/browser/acc essibility/browser_accessibility.h
99 [BrowserAccessibilityDelegate]: https://cs.chromium.org/chromium/src/content/bro wser/accessibility/browser_accessibility_manager.h?sq=package:chromium&l=64
100 [BrowserAccessibilityManager]: https://cs.chromium.org/chromium/src/content/brow ser/accessibility/browser_accessibility_manager.h
101 [LayoutObject]: https://cs.chromium.org/chromium/src/third_party/WebKit/Source/c ore/layout/LayoutObject.h
102 [NativeViewAccessibility]: https://cs.chromium.org/chromium/src/ui/views/accessi bility/native_view_accessibility.h
103 [Node]: https://cs.chromium.org/chromium/src/third_party/WebKit/Source/core/dom/ Node.h
104 [RenderAccessibilityImpl]: https://cs.chromium.org/chromium/src/content/renderer /accessibility/render_accessibility_impl.h
105 [RenderFrameHostImpl]: https://cs.chromium.org/chromium/src/content/browser/fram e_host/render_frame_host_impl.h
106 [ui::AXNodeData]: https://cs.chromium.org/chromium/src/ui/accessibility/ax_node_ data.h
107 [WebAXObject]: https://cs.chromium.org/chromium/src/third_party/WebKit/public/we b/WebAXObject.h
108 [automation API]: https://cs.chromium.org/chromium/src/chrome/renderer/resources /extensions/automation
109 [automation.idl]: https://cs.chromium.org/chromium/src/chrome/common/extensions/ api/automation.idl
110 [ax_enums.idl]: https://cs.chromium.org/chromium/src/ui/accessibility/ax_enums.i dl
111 [chrome.automation API]: https://developer.chrome.com/extensions/automation
112 [webui-js]: https://cs.chromium.org/chromium/src/ui/webui/resources/js/cr/ui/
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698