OLD | NEW |
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/i18n/break_iterator.h" | 7 #include "base/i18n/break_iterator.h" |
8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 bool BrowserAccessibilityAndroid::IsContentInvalid() const { | 165 bool BrowserAccessibilityAndroid::IsContentInvalid() const { |
166 std::string invalid; | 166 std::string invalid; |
167 return GetHtmlAttribute("aria-invalid", &invalid); | 167 return GetHtmlAttribute("aria-invalid", &invalid); |
168 } | 168 } |
169 | 169 |
170 bool BrowserAccessibilityAndroid::IsDismissable() const { | 170 bool BrowserAccessibilityAndroid::IsDismissable() const { |
171 return false; // No concept of "dismissable" on the web currently. | 171 return false; // No concept of "dismissable" on the web currently. |
172 } | 172 } |
173 | 173 |
174 bool BrowserAccessibilityAndroid::IsEditableText() const { | 174 bool BrowserAccessibilityAndroid::IsEditableText() const { |
175 return (GetRole() == ui::AX_ROLE_TEXT_AREA || | 175 return GetRole() == ui::AX_ROLE_TEXT_FIELD; |
176 GetRole() == ui::AX_ROLE_TEXT_FIELD); | |
177 } | 176 } |
178 | 177 |
179 bool BrowserAccessibilityAndroid::IsEnabled() const { | 178 bool BrowserAccessibilityAndroid::IsEnabled() const { |
180 return HasState(ui::AX_STATE_ENABLED); | 179 return HasState(ui::AX_STATE_ENABLED); |
181 } | 180 } |
182 | 181 |
183 bool BrowserAccessibilityAndroid::IsFocusable() const { | 182 bool BrowserAccessibilityAndroid::IsFocusable() const { |
184 bool focusable = HasState(ui::AX_STATE_FOCUSABLE); | 183 bool focusable = HasState(ui::AX_STATE_FOCUSABLE); |
185 if (IsIframe() || | 184 if (IsIframe() || |
186 GetRole() == ui::AX_ROLE_WEB_AREA) { | 185 GetRole() == ui::AX_ROLE_WEB_AREA) { |
(...skipping 22 matching lines...) Expand all Loading... |
209 GetRole() == ui::AX_ROLE_DESCRIPTION_LIST || | 208 GetRole() == ui::AX_ROLE_DESCRIPTION_LIST || |
210 GetRole() == ui::AX_ROLE_TREE); | 209 GetRole() == ui::AX_ROLE_TREE); |
211 } | 210 } |
212 | 211 |
213 bool BrowserAccessibilityAndroid::IsLink() const { | 212 bool BrowserAccessibilityAndroid::IsLink() const { |
214 return (GetRole() == ui::AX_ROLE_LINK || | 213 return (GetRole() == ui::AX_ROLE_LINK || |
215 GetRole() == ui::AX_ROLE_IMAGE_MAP_LINK); | 214 GetRole() == ui::AX_ROLE_IMAGE_MAP_LINK); |
216 } | 215 } |
217 | 216 |
218 bool BrowserAccessibilityAndroid::IsMultiLine() const { | 217 bool BrowserAccessibilityAndroid::IsMultiLine() const { |
219 return GetRole() == ui::AX_ROLE_TEXT_AREA; | 218 return HasState(ui::AX_STATE_MULTILINE); |
220 } | 219 } |
221 | 220 |
222 bool BrowserAccessibilityAndroid::IsPassword() const { | 221 bool BrowserAccessibilityAndroid::IsPassword() const { |
223 return HasState(ui::AX_STATE_PROTECTED); | 222 return HasState(ui::AX_STATE_PROTECTED); |
224 } | 223 } |
225 | 224 |
226 bool BrowserAccessibilityAndroid::IsRangeType() const { | 225 bool BrowserAccessibilityAndroid::IsRangeType() const { |
227 return (GetRole() == ui::AX_ROLE_PROGRESS_INDICATOR || | 226 return (GetRole() == ui::AX_ROLE_PROGRESS_INDICATOR || |
228 GetRole() == ui::AX_ROLE_METER || | 227 GetRole() == ui::AX_ROLE_METER || |
229 GetRole() == ui::AX_ROLE_SCROLL_BAR || | 228 GetRole() == ui::AX_ROLE_SCROLL_BAR || |
(...skipping 20 matching lines...) Expand all Loading... |
250 bool BrowserAccessibilityAndroid::CanOpenPopup() const { | 249 bool BrowserAccessibilityAndroid::CanOpenPopup() const { |
251 return HasState(ui::AX_STATE_HASPOPUP); | 250 return HasState(ui::AX_STATE_HASPOPUP); |
252 } | 251 } |
253 | 252 |
254 const char* BrowserAccessibilityAndroid::GetClassName() const { | 253 const char* BrowserAccessibilityAndroid::GetClassName() const { |
255 const char* class_name = NULL; | 254 const char* class_name = NULL; |
256 | 255 |
257 switch (GetRole()) { | 256 switch (GetRole()) { |
258 case ui::AX_ROLE_SEARCH_BOX: | 257 case ui::AX_ROLE_SEARCH_BOX: |
259 case ui::AX_ROLE_SPIN_BUTTON: | 258 case ui::AX_ROLE_SPIN_BUTTON: |
260 case ui::AX_ROLE_TEXT_AREA: | |
261 case ui::AX_ROLE_TEXT_FIELD: | 259 case ui::AX_ROLE_TEXT_FIELD: |
262 class_name = "android.widget.EditText"; | 260 class_name = "android.widget.EditText"; |
263 break; | 261 break; |
264 case ui::AX_ROLE_SLIDER: | 262 case ui::AX_ROLE_SLIDER: |
265 class_name = "android.widget.SeekBar"; | 263 class_name = "android.widget.SeekBar"; |
266 break; | 264 break; |
267 case ui::AX_ROLE_COLOR_WELL: | 265 case ui::AX_ROLE_COLOR_WELL: |
268 case ui::AX_ROLE_COMBO_BOX: | 266 case ui::AX_ROLE_COMBO_BOX: |
269 case ui::AX_ROLE_DATE: | 267 case ui::AX_ROLE_DATE: |
270 case ui::AX_ROLE_POP_UP_BUTTON: | 268 case ui::AX_ROLE_POP_UP_BUTTON: |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 // First, always return the |value| attribute if this is an | 336 // First, always return the |value| attribute if this is an |
339 // input field. | 337 // input field. |
340 base::string16 value = GetString16Attribute(ui::AX_ATTR_VALUE); | 338 base::string16 value = GetString16Attribute(ui::AX_ATTR_VALUE); |
341 if (!value.empty()) { | 339 if (!value.empty()) { |
342 if (HasState(ui::AX_STATE_EDITABLE)) | 340 if (HasState(ui::AX_STATE_EDITABLE)) |
343 return value; | 341 return value; |
344 | 342 |
345 switch (GetRole()) { | 343 switch (GetRole()) { |
346 case ui::AX_ROLE_COMBO_BOX: | 344 case ui::AX_ROLE_COMBO_BOX: |
347 case ui::AX_ROLE_POP_UP_BUTTON: | 345 case ui::AX_ROLE_POP_UP_BUTTON: |
348 case ui::AX_ROLE_TEXT_AREA: | |
349 case ui::AX_ROLE_TEXT_FIELD: | 346 case ui::AX_ROLE_TEXT_FIELD: |
350 return value; | 347 return value; |
351 } | 348 } |
352 } | 349 } |
353 | 350 |
354 // For color wells, the color is stored in separate attributes. | 351 // For color wells, the color is stored in separate attributes. |
355 // Perhaps we could return color names in the future? | 352 // Perhaps we could return color names in the future? |
356 if (GetRole() == ui::AX_ROLE_COLOR_WELL) { | 353 if (GetRole() == ui::AX_ROLE_COLOR_WELL) { |
357 int red = GetIntAttribute(ui::AX_ATTR_COLOR_VALUE_RED); | 354 int red = GetIntAttribute(ui::AX_ATTR_COLOR_VALUE_RED); |
358 int green = GetIntAttribute(ui::AX_ATTR_COLOR_VALUE_GREEN); | 355 int green = GetIntAttribute(ui::AX_ATTR_COLOR_VALUE_GREEN); |
(...skipping 15 matching lines...) Expand all Loading... |
374 // title_elem_id is set, that means there's a label element | 371 // title_elem_id is set, that means there's a label element |
375 // supplying the name and then name takes precedence over help. | 372 // supplying the name and then name takes precedence over help. |
376 // TODO(dmazzoni): clean this up by providing more granular labels in | 373 // TODO(dmazzoni): clean this up by providing more granular labels in |
377 // Blink, making the platform-specific mapping to accessible text simpler. | 374 // Blink, making the platform-specific mapping to accessible text simpler. |
378 base::string16 description = GetString16Attribute(ui::AX_ATTR_DESCRIPTION); | 375 base::string16 description = GetString16Attribute(ui::AX_ATTR_DESCRIPTION); |
379 base::string16 help = GetString16Attribute(ui::AX_ATTR_HELP); | 376 base::string16 help = GetString16Attribute(ui::AX_ATTR_HELP); |
380 | 377 |
381 base::string16 placeholder; | 378 base::string16 placeholder; |
382 switch (GetRole()) { | 379 switch (GetRole()) { |
383 case ui::AX_ROLE_DATE: | 380 case ui::AX_ROLE_DATE: |
384 case ui::AX_ROLE_TEXT_AREA: | |
385 case ui::AX_ROLE_TEXT_FIELD: | 381 case ui::AX_ROLE_TEXT_FIELD: |
386 case ui::AX_ROLE_TIME: | 382 case ui::AX_ROLE_TIME: |
387 GetHtmlAttribute("placeholder", &placeholder); | 383 GetHtmlAttribute("placeholder", &placeholder); |
388 } | 384 } |
389 | 385 |
390 int title_elem_id = GetIntAttribute( | 386 int title_elem_id = GetIntAttribute( |
391 ui::AX_ATTR_TITLE_UI_ELEMENT); | 387 ui::AX_ATTR_TITLE_UI_ELEMENT); |
392 base::string16 text; | 388 base::string16 text; |
393 if (!description.empty()) | 389 if (!description.empty()) |
394 text = description; | 390 text = description; |
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
879 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const { | 875 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const { |
880 int count = 0; | 876 int count = 0; |
881 for (uint32 i = 0; i < PlatformChildCount(); i++) { | 877 for (uint32 i = 0; i < PlatformChildCount(); i++) { |
882 if (PlatformGetChild(i)->GetRole() == role) | 878 if (PlatformGetChild(i)->GetRole() == role) |
883 count++; | 879 count++; |
884 } | 880 } |
885 return count; | 881 return count; |
886 } | 882 } |
887 | 883 |
888 } // namespace content | 884 } // namespace content |
OLD | NEW |