| 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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 bool BrowserAccessibilityAndroid::IsContentInvalid() const { | 162 bool BrowserAccessibilityAndroid::IsContentInvalid() const { |
| 163 std::string invalid; | 163 std::string invalid; |
| 164 return GetHtmlAttribute("aria-invalid", &invalid); | 164 return GetHtmlAttribute("aria-invalid", &invalid); |
| 165 } | 165 } |
| 166 | 166 |
| 167 bool BrowserAccessibilityAndroid::IsDismissable() const { | 167 bool BrowserAccessibilityAndroid::IsDismissable() const { |
| 168 return false; // No concept of "dismissable" on the web currently. | 168 return false; // No concept of "dismissable" on the web currently. |
| 169 } | 169 } |
| 170 | 170 |
| 171 bool BrowserAccessibilityAndroid::IsEditableText() const { | 171 bool BrowserAccessibilityAndroid::IsEditableText() const { |
| 172 return (GetRole() == ui::AX_ROLE_EDITABLE_TEXT || | 172 return (GetRole() == ui::AX_ROLE_TEXT_AREA || |
| 173 GetRole() == ui::AX_ROLE_TEXT_AREA || | |
| 174 GetRole() == ui::AX_ROLE_TEXT_FIELD); | 173 GetRole() == ui::AX_ROLE_TEXT_FIELD); |
| 175 } | 174 } |
| 176 | 175 |
| 177 bool BrowserAccessibilityAndroid::IsEnabled() const { | 176 bool BrowserAccessibilityAndroid::IsEnabled() const { |
| 178 return HasState(ui::AX_STATE_ENABLED); | 177 return HasState(ui::AX_STATE_ENABLED); |
| 179 } | 178 } |
| 180 | 179 |
| 181 bool BrowserAccessibilityAndroid::IsFocusable() const { | 180 bool BrowserAccessibilityAndroid::IsFocusable() const { |
| 182 bool focusable = HasState(ui::AX_STATE_FOCUSABLE); | 181 bool focusable = HasState(ui::AX_STATE_FOCUSABLE); |
| 183 if (IsIframe() || | 182 if (IsIframe() || |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 } | 239 } |
| 241 | 240 |
| 242 bool BrowserAccessibilityAndroid::CanOpenPopup() const { | 241 bool BrowserAccessibilityAndroid::CanOpenPopup() const { |
| 243 return HasState(ui::AX_STATE_HASPOPUP); | 242 return HasState(ui::AX_STATE_HASPOPUP); |
| 244 } | 243 } |
| 245 | 244 |
| 246 const char* BrowserAccessibilityAndroid::GetClassName() const { | 245 const char* BrowserAccessibilityAndroid::GetClassName() const { |
| 247 const char* class_name = NULL; | 246 const char* class_name = NULL; |
| 248 | 247 |
| 249 switch(GetRole()) { | 248 switch(GetRole()) { |
| 250 case ui::AX_ROLE_EDITABLE_TEXT: | |
| 251 case ui::AX_ROLE_SPIN_BUTTON: | 249 case ui::AX_ROLE_SPIN_BUTTON: |
| 252 case ui::AX_ROLE_TEXT_AREA: | 250 case ui::AX_ROLE_TEXT_AREA: |
| 253 case ui::AX_ROLE_TEXT_FIELD: | 251 case ui::AX_ROLE_TEXT_FIELD: |
| 254 class_name = "android.widget.EditText"; | 252 class_name = "android.widget.EditText"; |
| 255 break; | 253 break; |
| 256 case ui::AX_ROLE_SLIDER: | 254 case ui::AX_ROLE_SLIDER: |
| 257 class_name = "android.widget.SeekBar"; | 255 class_name = "android.widget.SeekBar"; |
| 258 break; | 256 break; |
| 259 case ui::AX_ROLE_COLOR_WELL: | 257 case ui::AX_ROLE_COLOR_WELL: |
| 260 case ui::AX_ROLE_COMBO_BOX: | 258 case ui::AX_ROLE_COMBO_BOX: |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 // name on Android, not 2 or 3 like on Windows or Mac. | 325 // name on Android, not 2 or 3 like on Windows or Mac. |
| 328 | 326 |
| 329 // First, always return the |value| attribute if this is an | 327 // First, always return the |value| attribute if this is an |
| 330 // input field. | 328 // input field. |
| 331 if (!value().empty()) { | 329 if (!value().empty()) { |
| 332 if (HasState(ui::AX_STATE_EDITABLE)) | 330 if (HasState(ui::AX_STATE_EDITABLE)) |
| 333 return base::UTF8ToUTF16(value()); | 331 return base::UTF8ToUTF16(value()); |
| 334 | 332 |
| 335 switch (GetRole()) { | 333 switch (GetRole()) { |
| 336 case ui::AX_ROLE_COMBO_BOX: | 334 case ui::AX_ROLE_COMBO_BOX: |
| 337 case ui::AX_ROLE_EDITABLE_TEXT: | |
| 338 case ui::AX_ROLE_POP_UP_BUTTON: | 335 case ui::AX_ROLE_POP_UP_BUTTON: |
| 339 case ui::AX_ROLE_TEXT_AREA: | 336 case ui::AX_ROLE_TEXT_AREA: |
| 340 case ui::AX_ROLE_TEXT_FIELD: | 337 case ui::AX_ROLE_TEXT_FIELD: |
| 341 return base::UTF8ToUTF16(value()); | 338 return base::UTF8ToUTF16(value()); |
| 342 } | 339 } |
| 343 } | 340 } |
| 344 | 341 |
| 345 // For color wells, the color is stored in separate attributes. | 342 // For color wells, the color is stored in separate attributes. |
| 346 // Perhaps we could return color names in the future? | 343 // Perhaps we could return color names in the future? |
| 347 if (GetRole() == ui::AX_ROLE_COLOR_WELL) { | 344 if (GetRole() == ui::AX_ROLE_COLOR_WELL) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 364 // title_elem_id is set, that means there's a label element | 361 // title_elem_id is set, that means there's a label element |
| 365 // supplying the name and then name takes precedence over help. | 362 // supplying the name and then name takes precedence over help. |
| 366 // TODO(dmazzoni): clean this up by providing more granular labels in | 363 // TODO(dmazzoni): clean this up by providing more granular labels in |
| 367 // Blink, making the platform-specific mapping to accessible text simpler. | 364 // Blink, making the platform-specific mapping to accessible text simpler. |
| 368 base::string16 description = GetString16Attribute(ui::AX_ATTR_DESCRIPTION); | 365 base::string16 description = GetString16Attribute(ui::AX_ATTR_DESCRIPTION); |
| 369 base::string16 help = GetString16Attribute(ui::AX_ATTR_HELP); | 366 base::string16 help = GetString16Attribute(ui::AX_ATTR_HELP); |
| 370 | 367 |
| 371 base::string16 placeholder; | 368 base::string16 placeholder; |
| 372 switch (GetRole()) { | 369 switch (GetRole()) { |
| 373 case ui::AX_ROLE_DATE: | 370 case ui::AX_ROLE_DATE: |
| 374 case ui::AX_ROLE_EDITABLE_TEXT: | |
| 375 case ui::AX_ROLE_TEXT_AREA: | 371 case ui::AX_ROLE_TEXT_AREA: |
| 376 case ui::AX_ROLE_TEXT_FIELD: | 372 case ui::AX_ROLE_TEXT_FIELD: |
| 377 case ui::AX_ROLE_TIME: | 373 case ui::AX_ROLE_TIME: |
| 378 GetHtmlAttribute("placeholder", &placeholder); | 374 GetHtmlAttribute("placeholder", &placeholder); |
| 379 } | 375 } |
| 380 | 376 |
| 381 int title_elem_id = GetIntAttribute( | 377 int title_elem_id = GetIntAttribute( |
| 382 ui::AX_ATTR_TITLE_UI_ELEMENT); | 378 ui::AX_ATTR_TITLE_UI_ELEMENT); |
| 383 base::string16 text; | 379 base::string16 text; |
| 384 if (!description.empty()) | 380 if (!description.empty()) |
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const { | 858 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const { |
| 863 int count = 0; | 859 int count = 0; |
| 864 for (uint32 i = 0; i < PlatformChildCount(); i++) { | 860 for (uint32 i = 0; i < PlatformChildCount(); i++) { |
| 865 if (PlatformGetChild(i)->GetRole() == role) | 861 if (PlatformGetChild(i)->GetRole() == role) |
| 866 count++; | 862 count++; |
| 867 } | 863 } |
| 868 return count; | 864 return count; |
| 869 } | 865 } |
| 870 | 866 |
| 871 } // namespace content | 867 } // namespace content |
| OLD | NEW |