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

Unified Diff: content/browser/accessibility/browser_accessibility_android.cc

Issue 739063002: Fix accessibility of remaining html form controls on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@no_tablet_popup
Patch Set: Better Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/accessibility/browser_accessibility_android.cc
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc
index b80334f475aa788e6c092d9e9a05f4e02e93998f..53189cbf1d11b1b3d939ba9a763c3e296a22464e 100644
--- a/content/browser/accessibility/browser_accessibility_android.cc
+++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -6,6 +6,7 @@
#include "base/i18n/break_iterator.h"
#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "content/browser/accessibility/browser_accessibility_manager_android.h"
#include "content/common/accessibility_messages.h"
@@ -76,6 +77,10 @@ bool BrowserAccessibilityAndroid::PlatformIsLeaf() const {
if (HasFocusableChild())
return false;
+ // Date and time controls should drop their children.
+ if (GetRole() == ui::AX_ROLE_DATE || GetRole() == ui::AX_ROLE_TIME)
+ return true;
+
// Headings with text can drop their children.
base::string16 name = GetText();
if (GetRole() == ui::AX_ROLE_HEADING && !name.empty())
@@ -251,12 +256,15 @@ const char* BrowserAccessibilityAndroid::GetClassName() const {
case ui::AX_ROLE_SLIDER:
class_name = "android.widget.SeekBar";
break;
+ case ui::AX_ROLE_COLOR_WELL:
case ui::AX_ROLE_COMBO_BOX:
+ case ui::AX_ROLE_DATE:
+ case ui::AX_ROLE_POP_UP_BUTTON:
+ case ui::AX_ROLE_TIME:
class_name = "android.widget.Spinner";
break;
case ui::AX_ROLE_BUTTON:
case ui::AX_ROLE_MENU_BUTTON:
- case ui::AX_ROLE_POP_UP_BUTTON:
class_name = "android.widget.Button";
break;
case ui::AX_ROLE_CHECK_BOX:
@@ -319,13 +327,29 @@ base::string16 BrowserAccessibilityAndroid::GetText() const {
// name on Android, not 2 or 3 like on Windows or Mac.
// First, always return the |value| attribute if this is an
- // editable text field.
- if (!value().empty() &&
- (GetRole() == ui::AX_ROLE_EDITABLE_TEXT ||
- GetRole() == ui::AX_ROLE_TEXT_AREA ||
- GetRole() == ui::AX_ROLE_TEXT_FIELD ||
- HasState(ui::AX_STATE_EDITABLE))) {
- return base::UTF8ToUTF16(value());
+ // input field.
+ if (!value().empty()) {
+ if (HasState(ui::AX_STATE_EDITABLE))
+ return base::UTF8ToUTF16(value());
+
+ switch (GetRole()) {
+ case ui::AX_ROLE_COMBO_BOX:
+ case ui::AX_ROLE_EDITABLE_TEXT:
+ case ui::AX_ROLE_POP_UP_BUTTON:
+ case ui::AX_ROLE_TEXT_AREA:
+ case ui::AX_ROLE_TEXT_FIELD:
+ return base::UTF8ToUTF16(value());
+ }
+ }
+
+ // For color wells, the color is stored in separate attributes.
+ // Perhaps we could return color names in the future?
+ if (GetRole() == ui::AX_ROLE_COLOR_WELL) {
+ int red = GetIntAttribute(ui::AX_ATTR_COLOR_VALUE_RED);
+ int green = GetIntAttribute(ui::AX_ATTR_COLOR_VALUE_GREEN);
+ int blue = GetIntAttribute(ui::AX_ATTR_COLOR_VALUE_BLUE);
+ return base::UTF8ToUTF16(
+ base::StringPrintf("#%02X%02X%02X", red, green, blue));
}
// Always prefer visible text if this is a link. Sites sometimes add
@@ -343,8 +367,17 @@ base::string16 BrowserAccessibilityAndroid::GetText() const {
// Blink, making the platform-specific mapping to accessible text simpler.
base::string16 description = GetString16Attribute(ui::AX_ATTR_DESCRIPTION);
base::string16 help = GetString16Attribute(ui::AX_ATTR_HELP);
+
base::string16 placeholder;
- GetHtmlAttribute("placeholder", &placeholder);
+ switch (GetRole()) {
+ case ui::AX_ROLE_DATE:
+ case ui::AX_ROLE_EDITABLE_TEXT:
+ case ui::AX_ROLE_TEXT_AREA:
+ case ui::AX_ROLE_TEXT_FIELD:
+ case ui::AX_ROLE_TIME:
+ GetHtmlAttribute("placeholder", &placeholder);
+ }
+
int title_elem_id = GetIntAttribute(
ui::AX_ATTR_TITLE_UI_ELEMENT);
base::string16 text;
@@ -356,7 +389,7 @@ base::string16 BrowserAccessibilityAndroid::GetText() const {
text = help;
else if (!name().empty())
text = base::UTF8ToUTF16(name());
- else if (GetRole() == ui::AX_ROLE_TEXT_FIELD && !placeholder.empty())
+ else if (!placeholder.empty())
text = placeholder;
else if (!value().empty())
text = base::UTF8ToUTF16(value());

Powered by Google App Engine
This is Rietveld 408576698