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

Side by Side Diff: webkit/glue/webaccessibility.h

Issue 10544099: Refactor all accessibility code out of webkit/glue. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More Mac compile errors Created 8 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « content/renderer/renderer_accessibility_focus_only.cc ('k') | webkit/glue/webaccessibility.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef WEBKIT_GLUE_WEBACCESSIBILITY_H_
6 #define WEBKIT_GLUE_WEBACCESSIBILITY_H_
7
8 #include <map>
9 #include <string>
10 #include <vector>
11
12 #include "base/string16.h"
13 #include "ui/gfx/rect.h"
14 #include "webkit/glue/webkit_glue_export.h"
15
16 namespace WebKit {
17 class WebAccessibilityObject;
18 }
19
20 namespace webkit_glue {
21
22 // A compact representation of the accessibility information for a
23 // single web object, in a form that can be serialized and sent from
24 // the renderer process to the browser process.
25 struct WEBKIT_GLUE_EXPORT WebAccessibility {
26 public:
27 // An enumeration of accessibility roles.
28 enum Role {
29 ROLE_UNKNOWN = 0,
30
31 // Used by Chromium to distinguish between the root of the tree
32 // for this page, and a web area for a frame within this page.
33 ROLE_ROOT_WEB_AREA,
34
35 // These roles all directly correspond to WebKit accessibility roles,
36 // keep these alphabetical.
37 ROLE_ALERT,
38 ROLE_ALERT_DIALOG,
39 ROLE_ANNOTATION,
40 ROLE_APPLICATION,
41 ROLE_ARTICLE,
42 ROLE_BROWSER,
43 ROLE_BUSY_INDICATOR,
44 ROLE_BUTTON,
45 ROLE_CELL,
46 ROLE_CHECKBOX,
47 ROLE_COLOR_WELL,
48 ROLE_COLUMN,
49 ROLE_COLUMN_HEADER,
50 ROLE_COMBO_BOX,
51 ROLE_DEFINITION_LIST_DEFINITION,
52 ROLE_DEFINITION_LIST_TERM,
53 ROLE_DIALOG,
54 ROLE_DIRECTORY,
55 ROLE_DISCLOSURE_TRIANGLE,
56 ROLE_DOCUMENT,
57 ROLE_DRAWER,
58 ROLE_EDITABLE_TEXT,
59 ROLE_FOOTER,
60 ROLE_GRID,
61 ROLE_GROUP,
62 ROLE_GROW_AREA,
63 ROLE_HEADING,
64 ROLE_HELP_TAG,
65 ROLE_IGNORED,
66 ROLE_IMAGE,
67 ROLE_IMAGE_MAP,
68 ROLE_IMAGE_MAP_LINK,
69 ROLE_INCREMENTOR,
70 ROLE_LANDMARK_APPLICATION,
71 ROLE_LANDMARK_BANNER,
72 ROLE_LANDMARK_COMPLEMENTARY,
73 ROLE_LANDMARK_CONTENTINFO,
74 ROLE_LANDMARK_MAIN,
75 ROLE_LANDMARK_NAVIGATION,
76 ROLE_LANDMARK_SEARCH,
77 ROLE_LINK,
78 ROLE_LIST,
79 ROLE_LISTBOX,
80 ROLE_LISTBOX_OPTION,
81 ROLE_LIST_ITEM,
82 ROLE_LIST_MARKER,
83 ROLE_LOG,
84 ROLE_MARQUEE,
85 ROLE_MATH,
86 ROLE_MATTE,
87 ROLE_MENU,
88 ROLE_MENU_BAR,
89 ROLE_MENU_ITEM,
90 ROLE_MENU_BUTTON,
91 ROLE_MENU_LIST_OPTION,
92 ROLE_MENU_LIST_POPUP,
93 ROLE_NOTE,
94 ROLE_OUTLINE,
95 ROLE_POPUP_BUTTON,
96 ROLE_PROGRESS_INDICATOR,
97 ROLE_RADIO_BUTTON,
98 ROLE_RADIO_GROUP,
99 ROLE_REGION,
100 ROLE_ROW,
101 ROLE_ROW_HEADER,
102 ROLE_RULER,
103 ROLE_RULER_MARKER,
104 ROLE_SCROLLAREA,
105 ROLE_SCROLLBAR,
106 ROLE_SHEET,
107 ROLE_SLIDER,
108 ROLE_SLIDER_THUMB,
109 ROLE_SPLITTER,
110 ROLE_SPLIT_GROUP,
111 ROLE_STATIC_TEXT,
112 ROLE_STATUS,
113 ROLE_SYSTEM_WIDE,
114 ROLE_TAB,
115 ROLE_TABLE,
116 ROLE_TABLE_HEADER_CONTAINER,
117 ROLE_TAB_GROUP_UNUSED, // WebKit doesn't use (uses ROLE_TAB_LIST)
118 ROLE_TAB_LIST,
119 ROLE_TAB_PANEL,
120 ROLE_TEXTAREA,
121 ROLE_TEXT_FIELD,
122 ROLE_TIMER,
123 ROLE_TOOLBAR,
124 ROLE_TOOLTIP,
125 ROLE_TREE,
126 ROLE_TREE_GRID,
127 ROLE_TREE_ITEM,
128 ROLE_VALUE_INDICATOR,
129 ROLE_WEBCORE_LINK,
130 ROLE_WEB_AREA,
131 ROLE_WINDOW,
132 NUM_ROLES
133 };
134
135 // An alphabetical enumeration of accessibility states.
136 // A state bitmask is formed by shifting 1 to the left by each state,
137 // for example:
138 // int mask = (1 << STATE_CHECKED) | (1 << STATE_FOCUSED);
139 enum State {
140 STATE_BUSY,
141 STATE_CHECKED,
142 STATE_COLLAPSED,
143 STATE_EXPANDED,
144 STATE_FOCUSABLE,
145 STATE_FOCUSED,
146 STATE_HASPOPUP,
147 STATE_HOTTRACKED,
148 STATE_INDETERMINATE,
149 STATE_INVISIBLE,
150 STATE_LINKED,
151 STATE_MULTISELECTABLE,
152 STATE_OFFSCREEN,
153 STATE_PRESSED,
154 STATE_PROTECTED,
155 STATE_READONLY,
156 STATE_REQUIRED,
157 STATE_SELECTABLE,
158 STATE_SELECTED,
159 STATE_TRAVERSED,
160 STATE_UNAVAILABLE,
161 STATE_VERTICAL,
162 STATE_VISITED,
163 NUM_STATES
164 };
165
166 COMPILE_ASSERT(NUM_STATES <= 31, state_enum_not_too_large);
167
168 // Additional optional attributes that can be optionally attached to
169 // a node.
170 enum StringAttribute {
171 // Document attributes.
172 ATTR_DOC_URL,
173 ATTR_DOC_TITLE,
174 ATTR_DOC_MIMETYPE,
175 ATTR_DOC_DOCTYPE,
176
177 // Attributes that could apply to any node.
178 ATTR_ACCESS_KEY,
179 ATTR_ACTION,
180 ATTR_CONTAINER_LIVE_RELEVANT,
181 ATTR_CONTAINER_LIVE_STATUS,
182 ATTR_DESCRIPTION,
183 ATTR_DISPLAY,
184 ATTR_HELP,
185 ATTR_HTML_TAG,
186 ATTR_LIVE_RELEVANT,
187 ATTR_LIVE_STATUS,
188 ATTR_ROLE,
189 ATTR_SHORTCUT,
190 ATTR_URL,
191 };
192
193 enum IntAttribute {
194 // Scrollable container attributes.
195 ATTR_SCROLL_X,
196 ATTR_SCROLL_X_MIN,
197 ATTR_SCROLL_X_MAX,
198 ATTR_SCROLL_Y,
199 ATTR_SCROLL_Y_MIN,
200 ATTR_SCROLL_Y_MAX,
201
202 // Editable text attributes.
203 ATTR_TEXT_SEL_START,
204 ATTR_TEXT_SEL_END,
205
206 // Table attributes.
207 ATTR_TABLE_ROW_COUNT,
208 ATTR_TABLE_COLUMN_COUNT,
209
210 // Table cell attributes.
211 ATTR_TABLE_CELL_COLUMN_INDEX,
212 ATTR_TABLE_CELL_COLUMN_SPAN,
213 ATTR_TABLE_CELL_ROW_INDEX,
214 ATTR_TABLE_CELL_ROW_SPAN,
215
216 // Tree control attributes.
217 ATTR_HIERARCHICAL_LEVEL,
218
219 // Relationships between this element and other elements.
220 ATTR_TITLE_UI_ELEMENT,
221 };
222
223 enum FloatAttribute {
224 // Document attributes.
225 ATTR_DOC_LOADING_PROGRESS,
226
227 // Range attributes.
228 ATTR_VALUE_FOR_RANGE,
229 ATTR_MIN_VALUE_FOR_RANGE,
230 ATTR_MAX_VALUE_FOR_RANGE,
231 };
232
233 enum BoolAttribute {
234 // Document attributes.
235 ATTR_DOC_LOADED,
236
237 // True if a checkbox or radio button is in the "mixed" state.
238 ATTR_BUTTON_MIXED,
239
240 // Live region attributes.
241 ATTR_CONTAINER_LIVE_ATOMIC,
242 ATTR_CONTAINER_LIVE_BUSY,
243 ATTR_LIVE_ATOMIC,
244 ATTR_LIVE_BUSY,
245
246 // ARIA readonly flag.
247 ATTR_ARIA_READONLY,
248
249 // Writeable attributes
250 ATTR_CAN_SET_VALUE,
251 };
252
253 enum IncludeChildren {
254 NO_CHILDREN,
255 INCLUDE_CHILDREN
256 };
257
258 enum IncludeLineBreaks {
259 NO_LINE_BREAKS,
260 INCLUDE_LINE_BREAKS
261 };
262
263 // Empty constructor, for serialization.
264 WebAccessibility();
265
266 // Construct from a WebAccessibilityObject. Recursively creates child
267 // nodes as needed to complete the tree.
268 WebAccessibility(const WebKit::WebAccessibilityObject& src,
269 IncludeChildren include_children,
270 IncludeLineBreaks include_line_breaks);
271
272 ~WebAccessibility();
273
274 // Initialize an already-created struct, same as the constructor above.
275 void Init(const WebKit::WebAccessibilityObject& src,
276 IncludeChildren include_children,
277 IncludeLineBreaks include_line_breaks);
278
279 #ifndef NDEBUG
280 std::string DebugString(bool recursive) const;
281 #endif
282
283 private:
284 // Returns true if |ancestor| is the first unignored parent of |child|,
285 // which means that when walking up the parent chain from |child|,
286 // |ancestor| is the *first* ancestor that isn't marked as
287 // accessibilityIsIgnored().
288 bool IsParentUnignoredOf(const WebKit::WebAccessibilityObject& ancestor,
289 const WebKit::WebAccessibilityObject& child);
290
291 public:
292 // This is a simple serializable struct. All member variables should be
293 // copyable.
294 int32 id;
295 string16 name;
296 string16 value;
297 Role role;
298 uint32 state;
299 gfx::Rect location;
300 std::map<StringAttribute, string16> string_attributes;
301 std::map<IntAttribute, int32> int_attributes;
302 std::map<FloatAttribute, float> float_attributes;
303 std::map<BoolAttribute, bool> bool_attributes;
304 std::vector<WebAccessibility> children;
305 std::vector<int32> indirect_child_ids;
306 std::vector<std::pair<string16, string16> > html_attributes;
307 std::vector<int32> line_breaks;
308
309 // For a table, the cell ids in row-major order, with duplicate entries
310 // when there's a rowspan or colspan, and with -1 for missing cells.
311 // There are always exactly rows * columns entries.
312 std::vector<int32> cell_ids;
313
314 // For a table, the unique cell ids in row-major order of their first
315 // occurrence.
316 std::vector<int32> unique_cell_ids;
317 };
318
319 } // namespace webkit_glue
320
321 #endif // WEBKIT_GLUE_WEBACCESSIBILITY_H_
OLDNEW
« no previous file with comments | « content/renderer/renderer_accessibility_focus_only.cc ('k') | webkit/glue/webaccessibility.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698