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

Side by Side Diff: content/browser/accessibility/browser_accessibility_android.cc

Issue 23651003: Use Blink accessibility enums in Chromium (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 3 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/accessibility/browser_accessibility_android.h" 5 #include "content/browser/accessibility/browser_accessibility_android.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "content/browser/accessibility/browser_accessibility_manager_android.h" 8 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
9 #include "content/common/accessibility_messages.h" 9 #include "content/common/accessibility_messages.h"
10 #include "content/common/accessibility_node_data.h" 10 #include "content/common/accessibility_node_data.h"
(...skipping 12 matching lines...) Expand all
23 bool BrowserAccessibilityAndroid::IsNative() const { 23 bool BrowserAccessibilityAndroid::IsNative() const {
24 return true; 24 return true;
25 } 25 }
26 26
27 bool BrowserAccessibilityAndroid::IsLeaf() const { 27 bool BrowserAccessibilityAndroid::IsLeaf() const {
28 if (child_count() == 0) 28 if (child_count() == 0)
29 return true; 29 return true;
30 30
31 // Iframes are always allowed to contain children. 31 // Iframes are always allowed to contain children.
32 if (IsIframe() || 32 if (IsIframe() ||
33 role() == AccessibilityNodeData::ROLE_ROOT_WEB_AREA || 33 role() == WebKit::WebAXRoleRootWebArea ||
34 role() == AccessibilityNodeData::ROLE_WEB_AREA) { 34 role() == WebKit::WebAXRoleWebArea) {
35 return false; 35 return false;
36 } 36 }
37 37
38 // If it has a focusable child, we definitely can't leave out children. 38 // If it has a focusable child, we definitely can't leave out children.
39 if (HasFocusableChild()) 39 if (HasFocusableChild())
40 return false; 40 return false;
41 41
42 // Headings with text can drop their children. 42 // Headings with text can drop their children.
43 string16 name = GetText(); 43 string16 name = GetText();
44 if (role() == AccessibilityNodeData::ROLE_HEADING && !name.empty()) 44 if (role() == WebKit::WebAXRoleHeading && !name.empty())
45 return true; 45 return true;
46 46
47 // Focusable nodes with text can drop their children. 47 // Focusable nodes with text can drop their children.
48 if (HasState(AccessibilityNodeData::STATE_FOCUSABLE) && !name.empty()) 48 if (HasState(WebKit::WebAXStateFocusable) && !name.empty())
49 return true; 49 return true;
50 50
51 // Nodes with only static text as children can drop their children. 51 // Nodes with only static text as children can drop their children.
52 if (HasOnlyStaticTextChildren()) 52 if (HasOnlyStaticTextChildren())
53 return true; 53 return true;
54 54
55 return false; 55 return false;
56 } 56 }
57 57
58 bool BrowserAccessibilityAndroid::IsCheckable() const { 58 bool BrowserAccessibilityAndroid::IsCheckable() const {
59 bool checkable = false; 59 bool checkable = false;
60 bool is_aria_pressed_defined; 60 bool is_aria_pressed_defined;
61 bool is_mixed; 61 bool is_mixed;
62 GetAriaTristate("aria-pressed", &is_aria_pressed_defined, &is_mixed); 62 GetAriaTristate("aria-pressed", &is_aria_pressed_defined, &is_mixed);
63 if (role() == AccessibilityNodeData::ROLE_CHECKBOX || 63 if (role() == WebKit::WebAXRoleCheckBox ||
64 role() == AccessibilityNodeData::ROLE_RADIO_BUTTON || 64 role() == WebKit::WebAXRoleRadioButton ||
65 is_aria_pressed_defined) { 65 is_aria_pressed_defined) {
66 checkable = true; 66 checkable = true;
67 } 67 }
68 if (HasState(AccessibilityNodeData::STATE_CHECKED)) 68 if (HasState(WebKit::WebAXStateChecked))
69 checkable = true; 69 checkable = true;
70 return checkable; 70 return checkable;
71 } 71 }
72 72
73 bool BrowserAccessibilityAndroid::IsChecked() const { 73 bool BrowserAccessibilityAndroid::IsChecked() const {
74 return HasState(AccessibilityNodeData::STATE_CHECKED); 74 return HasState(WebKit::WebAXStateChecked);
75 } 75 }
76 76
77 bool BrowserAccessibilityAndroid::IsClickable() const { 77 bool BrowserAccessibilityAndroid::IsClickable() const {
78 return (IsLeaf() && !GetText().empty()); 78 return (IsLeaf() && !GetText().empty());
79 } 79 }
80 80
81 bool BrowserAccessibilityAndroid::IsEnabled() const { 81 bool BrowserAccessibilityAndroid::IsEnabled() const {
82 return !HasState(AccessibilityNodeData::STATE_UNAVAILABLE); 82 return HasState(WebKit::WebAXStateEnabled);
83 } 83 }
84 84
85 bool BrowserAccessibilityAndroid::IsFocusable() const { 85 bool BrowserAccessibilityAndroid::IsFocusable() const {
86 bool focusable = HasState(AccessibilityNodeData::STATE_FOCUSABLE); 86 bool focusable = HasState(WebKit::WebAXStateFocusable);
87 if (IsIframe() || 87 if (IsIframe() ||
88 role() == AccessibilityNodeData::ROLE_WEB_AREA) { 88 role() == WebKit::WebAXRoleWebArea) {
89 focusable = false; 89 focusable = false;
90 } 90 }
91 return focusable; 91 return focusable;
92 } 92 }
93 93
94 bool BrowserAccessibilityAndroid::IsFocused() const { 94 bool BrowserAccessibilityAndroid::IsFocused() const {
95 return manager()->GetFocus(manager()->GetRoot()) == this; 95 return manager()->GetFocus(manager()->GetRoot()) == this;
96 } 96 }
97 97
98 bool BrowserAccessibilityAndroid::IsPassword() const { 98 bool BrowserAccessibilityAndroid::IsPassword() const {
99 return HasState(AccessibilityNodeData::STATE_PROTECTED); 99 return HasState(WebKit::WebAXStateProtected);
100 } 100 }
101 101
102 bool BrowserAccessibilityAndroid::IsScrollable() const { 102 bool BrowserAccessibilityAndroid::IsScrollable() const {
103 int dummy; 103 int dummy;
104 return GetIntAttribute(AccessibilityNodeData::ATTR_SCROLL_X_MAX, &dummy); 104 return GetIntAttribute(AccessibilityNodeData::ATTR_SCROLL_X_MAX, &dummy);
105 } 105 }
106 106
107 bool BrowserAccessibilityAndroid::IsSelected() const { 107 bool BrowserAccessibilityAndroid::IsSelected() const {
108 return HasState(AccessibilityNodeData::STATE_SELECTED); 108 return HasState(WebKit::WebAXStateSelected);
109 } 109 }
110 110
111 bool BrowserAccessibilityAndroid::IsVisibleToUser() const { 111 bool BrowserAccessibilityAndroid::IsVisibleToUser() const {
112 return !HasState(AccessibilityNodeData::STATE_INVISIBLE); 112 return !HasState(WebKit::WebAXStateInvisible);
113 } 113 }
114 114
115 const char* BrowserAccessibilityAndroid::GetClassName() const { 115 const char* BrowserAccessibilityAndroid::GetClassName() const {
116 const char* class_name = NULL; 116 const char* class_name = NULL;
117 117
118 switch(role()) { 118 switch(role()) {
119 case AccessibilityNodeData::ROLE_EDITABLE_TEXT: 119 case WebKit::WebAXRoleEditableText:
120 case AccessibilityNodeData::ROLE_SPIN_BUTTON: 120 case WebKit::WebAXRoleSpinButton:
121 case AccessibilityNodeData::ROLE_TEXTAREA: 121 case WebKit::WebAXRoleTextArea:
122 case AccessibilityNodeData::ROLE_TEXT_FIELD: 122 case WebKit::WebAXRoleTextField:
123 class_name = "android.widget.EditText"; 123 class_name = "android.widget.EditText";
124 break; 124 break;
125 case AccessibilityNodeData::ROLE_SLIDER: 125 case WebKit::WebAXRoleSlider:
126 class_name = "android.widget.SeekBar"; 126 class_name = "android.widget.SeekBar";
127 break; 127 break;
128 case AccessibilityNodeData::ROLE_COMBO_BOX: 128 case WebKit::WebAXRoleComboBox:
129 class_name = "android.widget.Spinner"; 129 class_name = "android.widget.Spinner";
130 break; 130 break;
131 case AccessibilityNodeData::ROLE_BUTTON: 131 case WebKit::WebAXRoleButton:
132 case AccessibilityNodeData::ROLE_MENU_BUTTON: 132 case WebKit::WebAXRoleMenuButton:
133 case AccessibilityNodeData::ROLE_POPUP_BUTTON: 133 case WebKit::WebAXRolePopUpButton:
134 class_name = "android.widget.Button"; 134 class_name = "android.widget.Button";
135 break; 135 break;
136 case AccessibilityNodeData::ROLE_CHECKBOX: 136 case WebKit::WebAXRoleCheckBox:
137 class_name = "android.widget.CheckBox"; 137 class_name = "android.widget.CheckBox";
138 break; 138 break;
139 case AccessibilityNodeData::ROLE_RADIO_BUTTON: 139 case WebKit::WebAXRoleRadioButton:
140 class_name = "android.widget.RadioButton"; 140 class_name = "android.widget.RadioButton";
141 break; 141 break;
142 case AccessibilityNodeData::ROLE_TOGGLE_BUTTON: 142 case WebKit::WebAXRoleToggleButton:
143 class_name = "android.widget.ToggleButton"; 143 class_name = "android.widget.ToggleButton";
144 break; 144 break;
145 case AccessibilityNodeData::ROLE_CANVAS: 145 case WebKit::WebAXRoleCanvas:
146 case AccessibilityNodeData::ROLE_IMAGE: 146 case WebKit::WebAXRoleImage:
147 class_name = "android.widget.Image"; 147 class_name = "android.widget.Image";
148 break; 148 break;
149 case AccessibilityNodeData::ROLE_PROGRESS_INDICATOR: 149 case WebKit::WebAXRoleProgressIndicator:
150 class_name = "android.widget.ProgressBar"; 150 class_name = "android.widget.ProgressBar";
151 break; 151 break;
152 case AccessibilityNodeData::ROLE_TAB_LIST: 152 case WebKit::WebAXRoleTabList:
153 class_name = "android.widget.TabWidget"; 153 class_name = "android.widget.TabWidget";
154 break; 154 break;
155 case AccessibilityNodeData::ROLE_GRID: 155 case WebKit::WebAXRoleGrid:
156 case AccessibilityNodeData::ROLE_TABLE: 156 case WebKit::WebAXRoleTable:
157 class_name = "android.widget.GridView"; 157 class_name = "android.widget.GridView";
158 break; 158 break;
159 case AccessibilityNodeData::ROLE_LIST: 159 case WebKit::WebAXRoleList:
160 case AccessibilityNodeData::ROLE_LISTBOX: 160 case WebKit::WebAXRoleListBox:
161 class_name = "android.widget.ListView"; 161 class_name = "android.widget.ListView";
162 break; 162 break;
163 default: 163 default:
164 class_name = "android.view.View"; 164 class_name = "android.view.View";
165 break; 165 break;
166 } 166 }
167 167
168 return class_name; 168 return class_name;
169 } 169 }
170 170
171 string16 BrowserAccessibilityAndroid::GetText() const { 171 string16 BrowserAccessibilityAndroid::GetText() const {
172 if (IsIframe() || 172 if (IsIframe() ||
173 role() == AccessibilityNodeData::ROLE_WEB_AREA) { 173 role() == WebKit::WebAXRoleWebArea) {
174 return string16(); 174 return string16();
175 } 175 }
176 176
177 string16 description = GetString16Attribute( 177 string16 description = GetString16Attribute(
178 AccessibilityNodeData::ATTR_DESCRIPTION); 178 AccessibilityNodeData::ATTR_DESCRIPTION);
179 string16 text; 179 string16 text;
180 if (!name().empty()) 180 if (!name().empty())
181 text = base::UTF8ToUTF16(name()); 181 text = base::UTF8ToUTF16(name());
182 else if (!description.empty()) 182 else if (!description.empty())
183 text = description; 183 text = description;
184 else if (!value().empty()) 184 else if (!value().empty())
185 text = base::UTF8ToUTF16(value()); 185 text = base::UTF8ToUTF16(value());
186 186
187 if (text.empty() && HasOnlyStaticTextChildren()) { 187 if (text.empty() && HasOnlyStaticTextChildren()) {
188 for (uint32 i = 0; i < child_count(); i++) { 188 for (uint32 i = 0; i < child_count(); i++) {
189 BrowserAccessibility* child = GetChild(i); 189 BrowserAccessibility* child = GetChild(i);
190 text += static_cast<BrowserAccessibilityAndroid*>(child)->GetText(); 190 text += static_cast<BrowserAccessibilityAndroid*>(child)->GetText();
191 } 191 }
192 } 192 }
193 193
194 switch(role()) { 194 switch(role()) {
195 case AccessibilityNodeData::ROLE_IMAGE_MAP_LINK: 195 case WebKit::WebAXRoleImageMapLink:
196 case AccessibilityNodeData::ROLE_LINK: 196 case WebKit::WebAXRoleLink:
197 case AccessibilityNodeData::ROLE_WEBCORE_LINK:
198 if (!text.empty()) 197 if (!text.empty())
199 text += ASCIIToUTF16(" "); 198 text += ASCIIToUTF16(" ");
200 text += ASCIIToUTF16("Link"); 199 text += ASCIIToUTF16("Link");
201 break; 200 break;
202 case AccessibilityNodeData::ROLE_HEADING: 201 case WebKit::WebAXRoleHeading:
203 // Only append "heading" if this node already has text. 202 // Only append "heading" if this node already has text.
204 if (!text.empty()) 203 if (!text.empty())
205 text += ASCIIToUTF16(" Heading"); 204 text += ASCIIToUTF16(" Heading");
206 break; 205 break;
207 } 206 }
208 207
209 return text; 208 return text;
210 } 209 }
211 210
212 int BrowserAccessibilityAndroid::GetItemIndex() const { 211 int BrowserAccessibilityAndroid::GetItemIndex() const {
213 int index = 0; 212 int index = 0;
214 switch(role()) { 213 switch(role()) {
215 case AccessibilityNodeData::ROLE_LIST_ITEM: 214 case WebKit::WebAXRoleListItem:
216 case AccessibilityNodeData::ROLE_LISTBOX_OPTION: 215 case WebKit::WebAXRoleListBoxOption:
217 index = index_in_parent(); 216 index = index_in_parent();
218 break; 217 break;
219 case AccessibilityNodeData::ROLE_SLIDER: 218 case WebKit::WebAXRoleSlider:
220 case AccessibilityNodeData::ROLE_PROGRESS_INDICATOR: { 219 case WebKit::WebAXRoleProgressIndicator: {
221 float value_for_range; 220 float value_for_range;
222 if (GetFloatAttribute( 221 if (GetFloatAttribute(
223 AccessibilityNodeData::ATTR_VALUE_FOR_RANGE, &value_for_range)) { 222 AccessibilityNodeData::ATTR_VALUE_FOR_RANGE, &value_for_range)) {
224 index = static_cast<int>(value_for_range); 223 index = static_cast<int>(value_for_range);
225 } 224 }
226 break; 225 break;
227 } 226 }
228 } 227 }
229 return index; 228 return index;
230 } 229 }
231 230
232 int BrowserAccessibilityAndroid::GetItemCount() const { 231 int BrowserAccessibilityAndroid::GetItemCount() const {
233 int count = 0; 232 int count = 0;
234 switch(role()) { 233 switch(role()) {
235 case AccessibilityNodeData::ROLE_LIST: 234 case WebKit::WebAXRoleList:
236 case AccessibilityNodeData::ROLE_LISTBOX: 235 case WebKit::WebAXRoleListBox:
237 count = child_count(); 236 count = child_count();
238 break; 237 break;
239 case AccessibilityNodeData::ROLE_SLIDER: 238 case WebKit::WebAXRoleSlider:
240 case AccessibilityNodeData::ROLE_PROGRESS_INDICATOR: { 239 case WebKit::WebAXRoleProgressIndicator: {
241 float max_value_for_range; 240 float max_value_for_range;
242 if (GetFloatAttribute(AccessibilityNodeData::ATTR_MAX_VALUE_FOR_RANGE, 241 if (GetFloatAttribute(AccessibilityNodeData::ATTR_MAX_VALUE_FOR_RANGE,
243 &max_value_for_range)) { 242 &max_value_for_range)) {
244 count = static_cast<int>(max_value_for_range); 243 count = static_cast<int>(max_value_for_range);
245 } 244 }
246 break; 245 break;
247 } 246 }
248 } 247 }
249 return count; 248 return count;
250 } 249 }
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 return sel_end; 334 return sel_end;
336 } 335 }
337 336
338 int BrowserAccessibilityAndroid::GetEditableTextLength() const { 337 int BrowserAccessibilityAndroid::GetEditableTextLength() const {
339 return value().length(); 338 return value().length();
340 } 339 }
341 340
342 bool BrowserAccessibilityAndroid::HasFocusableChild() const { 341 bool BrowserAccessibilityAndroid::HasFocusableChild() const {
343 for (uint32 i = 0; i < child_count(); i++) { 342 for (uint32 i = 0; i < child_count(); i++) {
344 BrowserAccessibility* child = GetChild(i); 343 BrowserAccessibility* child = GetChild(i);
345 if (child->HasState(AccessibilityNodeData::STATE_FOCUSABLE)) 344 if (child->HasState(WebKit::WebAXStateFocusable))
346 return true; 345 return true;
347 if (static_cast<BrowserAccessibilityAndroid*>(child)->HasFocusableChild()) 346 if (static_cast<BrowserAccessibilityAndroid*>(child)->HasFocusableChild())
348 return true; 347 return true;
349 } 348 }
350 return false; 349 return false;
351 } 350 }
352 351
353 bool BrowserAccessibilityAndroid::HasOnlyStaticTextChildren() const { 352 bool BrowserAccessibilityAndroid::HasOnlyStaticTextChildren() const {
354 for (uint32 i = 0; i < child_count(); i++) { 353 for (uint32 i = 0; i < child_count(); i++) {
355 BrowserAccessibility* child = GetChild(i); 354 BrowserAccessibility* child = GetChild(i);
356 if (child->role() != AccessibilityNodeData::ROLE_STATIC_TEXT) 355 if (child->role() != WebKit::WebAXRoleStaticText)
357 return false; 356 return false;
358 } 357 }
359 return true; 358 return true;
360 } 359 }
361 360
362 bool BrowserAccessibilityAndroid::IsIframe() const { 361 bool BrowserAccessibilityAndroid::IsIframe() const {
363 string16 html_tag = GetString16Attribute( 362 string16 html_tag = GetString16Attribute(
364 AccessibilityNodeData::ATTR_HTML_TAG); 363 AccessibilityNodeData::ATTR_HTML_TAG);
365 return html_tag == ASCIIToUTF16("iframe"); 364 return html_tag == ASCIIToUTF16("iframe");
366 } 365 }
367 366
368 void BrowserAccessibilityAndroid::PostInitialize() { 367 void BrowserAccessibilityAndroid::PostInitialize() {
369 BrowserAccessibility::PostInitialize(); 368 BrowserAccessibility::PostInitialize();
370 369
371 if (IsEditableText()) { 370 if (IsEditableText()) {
372 if (base::UTF8ToUTF16(value_) != new_value_) { 371 if (base::UTF8ToUTF16(value_) != new_value_) {
373 old_value_ = new_value_; 372 old_value_ = new_value_;
374 new_value_ = base::UTF8ToUTF16(value_); 373 new_value_ = base::UTF8ToUTF16(value_);
375 } 374 }
376 } 375 }
377 376
378 if (role_ == AccessibilityNodeData::ROLE_ALERT && first_time_) 377 if (role_ == WebKit::WebAXRoleAlert && first_time_)
379 manager_->NotifyAccessibilityEvent(AccessibilityNotificationAlert, this); 378 manager_->NotifyAccessibilityEvent(WebKit::WebAXEventAlert, this);
380 379
381 string16 live; 380 string16 live;
382 if (GetString16Attribute( 381 if (GetString16Attribute(
383 AccessibilityNodeData::ATTR_CONTAINER_LIVE_STATUS, &live)) { 382 AccessibilityNodeData::ATTR_CONTAINER_LIVE_STATUS, &live)) {
384 NotifyLiveRegionUpdate(live); 383 NotifyLiveRegionUpdate(live);
385 } 384 }
386 385
387 first_time_ = false; 386 first_time_ = false;
388 } 387 }
389 388
390 void BrowserAccessibilityAndroid::NotifyLiveRegionUpdate(string16& aria_live) { 389 void BrowserAccessibilityAndroid::NotifyLiveRegionUpdate(string16& aria_live) {
391 if (!EqualsASCII(aria_live, aria_strings::kAriaLivePolite) && 390 if (!EqualsASCII(aria_live, aria_strings::kAriaLivePolite) &&
392 !EqualsASCII(aria_live, aria_strings::kAriaLiveAssertive)) 391 !EqualsASCII(aria_live, aria_strings::kAriaLiveAssertive))
393 return; 392 return;
394 393
395 string16 text = GetText(); 394 string16 text = GetText();
396 if (cached_text_ != text) { 395 if (cached_text_ != text) {
397 if (!text.empty()) { 396 if (!text.empty()) {
398 manager_->NotifyAccessibilityEvent(AccessibilityNotificationObjectShow, 397 manager_->NotifyAccessibilityEvent(WebKit::WebAXEventShow,
399 this); 398 this);
400 } 399 }
401 cached_text_ = text; 400 cached_text_ = text;
402 } 401 }
403 } 402 }
404 403
405 } // namespace content 404 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/accessibility/browser_accessibility.cc ('k') | content/browser/accessibility/browser_accessibility_cocoa.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698