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

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

Issue 1654193002: Include a role description string in node info for Android accessibility. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update all Android test expectations Created 4 years, 10 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 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 79a1f18a36957566cd04a9f4367fa63e7860e6bc..ac52699633fa46940e651e17d356c36bef3d26fb 100644
--- a/content/browser/accessibility/browser_accessibility_android.cc
+++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -5,11 +5,14 @@
#include "content/browser/accessibility/browser_accessibility_android.h"
#include "base/i18n/break_iterator.h"
+#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "content/app/strings/grit/content_strings.h"
#include "content/browser/accessibility/browser_accessibility_manager_android.h"
#include "content/common/accessibility_messages.h"
+#include "content/public/common/content_client.h"
namespace {
@@ -407,6 +410,412 @@ base::string16 BrowserAccessibilityAndroid::GetText() const {
return text;
}
+base::string16 BrowserAccessibilityAndroid::GetRoleDescription() const {
+ content::ContentClient* content_client = content::GetContentClient();
+
+ // As a special case, if we have a heading level return a string like
+ // "heading level 1", etc.
+ if (GetRole() == ui::AX_ROLE_HEADING) {
+ int level = GetIntAttribute(ui::AX_ATTR_HIERARCHICAL_LEVEL);
+ if (level >= 1 && level <= 6) {
+ std::vector<base::string16> values;
+ values.push_back(base::IntToString16(level));
+ return base::ReplaceStringPlaceholders(
+ content_client->GetLocalizedString(IDS_AX_ROLE_HEADING_WITH_LEVEL),
+ values, nullptr);
+ }
+ }
+
+ int message_id = -1;
+ switch (GetRole()) {
+ case ui::AX_ROLE_ABBR:
+ // No role description.
+ break;
+ case ui::AX_ROLE_ALERT_DIALOG:
+ message_id = IDS_AX_ROLE_ALERT_DIALOG;
+ break;
+ case ui::AX_ROLE_ALERT:
+ message_id = IDS_AX_ROLE_ALERT;
+ break;
+ case ui::AX_ROLE_ANNOTATION:
+ // No role description.
+ break;
+ case ui::AX_ROLE_APPLICATION:
+ message_id = IDS_AX_ROLE_APPLICATION;
+ break;
+ case ui::AX_ROLE_ARTICLE:
+ message_id = IDS_AX_ROLE_ARTICLE;
+ break;
+ case ui::AX_ROLE_BANNER:
+ message_id = IDS_AX_ROLE_BANNER;
+ break;
+ case ui::AX_ROLE_BLOCKQUOTE:
+ message_id = IDS_AX_ROLE_BLOCKQUOTE;
+ break;
+ case ui::AX_ROLE_BUSY_INDICATOR:
+ message_id = IDS_AX_ROLE_BUSY_INDICATOR;
+ break;
+ case ui::AX_ROLE_BUTTON:
+ message_id = IDS_AX_ROLE_BUTTON;
+ break;
+ case ui::AX_ROLE_BUTTON_DROP_DOWN:
+ message_id = IDS_AX_ROLE_BUTTON_DROP_DOWN;
+ break;
+ case ui::AX_ROLE_CANVAS:
+ // No role description.
+ break;
+ case ui::AX_ROLE_CAPTION:
+ // No role description.
+ break;
+ case ui::AX_ROLE_CELL:
+ message_id = IDS_AX_ROLE_CELL;
+ break;
+ case ui::AX_ROLE_CHECK_BOX:
+ message_id = IDS_AX_ROLE_CHECK_BOX;
+ break;
+ case ui::AX_ROLE_CLIENT:
+ // No role description.
+ break;
+ case ui::AX_ROLE_COLOR_WELL:
+ message_id = IDS_AX_ROLE_COLOR_WELL;
+ break;
+ case ui::AX_ROLE_COLUMN_HEADER:
+ message_id = IDS_AX_ROLE_COLUMN_HEADER;
+ break;
+ case ui::AX_ROLE_COLUMN:
+ // No role description.
+ break;
+ case ui::AX_ROLE_COMBO_BOX:
+ message_id = IDS_AX_ROLE_COMBO_BOX;
+ break;
+ case ui::AX_ROLE_COMPLEMENTARY:
+ message_id = IDS_AX_ROLE_COMPLEMENTARY;
+ break;
+ case ui::AX_ROLE_CONTENT_INFO:
+ message_id = IDS_AX_ROLE_CONTENT_INFO;
+ break;
+ case ui::AX_ROLE_DATE:
+ message_id = IDS_AX_ROLE_DATE;
+ break;
+ case ui::AX_ROLE_DATE_TIME:
+ message_id = IDS_AX_ROLE_DATE_TIME;
+ break;
+ case ui::AX_ROLE_DEFINITION:
+ message_id = IDS_AX_ROLE_DEFINITION;
+ break;
+ case ui::AX_ROLE_DESCRIPTION_LIST_DETAIL:
+ message_id = IDS_AX_ROLE_DEFINITION;
+ break;
+ case ui::AX_ROLE_DESCRIPTION_LIST:
+ // No role description.
+ break;
+ case ui::AX_ROLE_DESCRIPTION_LIST_TERM:
+ // No role description.
+ break;
+ case ui::AX_ROLE_DESKTOP:
+ // No role description.
+ break;
+ case ui::AX_ROLE_DETAILS:
+ // No role description.
+ break;
+ case ui::AX_ROLE_DIALOG:
+ message_id = IDS_AX_ROLE_DIALOG;
+ break;
+ case ui::AX_ROLE_DIRECTORY:
+ message_id = IDS_AX_ROLE_DIRECTORY;
+ break;
+ case ui::AX_ROLE_DISCLOSURE_TRIANGLE:
+ message_id = IDS_AX_ROLE_DISCLOSURE_TRIANGLE;
+ break;
+ case ui::AX_ROLE_DIV:
+ // No role description.
+ break;
+ case ui::AX_ROLE_DOCUMENT:
+ message_id = IDS_AX_ROLE_DOCUMENT;
+ break;
+ case ui::AX_ROLE_EMBEDDED_OBJECT:
+ message_id = IDS_AX_ROLE_EMBEDDED_OBJECT;
+ break;
+ case ui::AX_ROLE_FIGCAPTION:
+ // No role description.
+ break;
+ case ui::AX_ROLE_FIGURE:
+ message_id = IDS_AX_ROLE_GRAPHIC;
+ break;
+ case ui::AX_ROLE_FOOTER:
+ message_id = IDS_AX_ROLE_FOOTER;
+ break;
+ case ui::AX_ROLE_FORM:
+ // No role description.
+ break;
+ case ui::AX_ROLE_GRID:
+ message_id = IDS_AX_ROLE_TABLE;
+ break;
+ case ui::AX_ROLE_GROUP:
+ // No role description.
+ break;
+ case ui::AX_ROLE_HEADING:
+ // Note that code above this switch statement handles headings with
+ // a level, returning a string like "heading level 1", etc.
+ message_id = IDS_AX_ROLE_HEADING;
+ break;
+ case ui::AX_ROLE_IFRAME:
+ // No role description.
+ break;
+ case ui::AX_ROLE_IFRAME_PRESENTATIONAL:
+ // No role description.
+ break;
+ case ui::AX_ROLE_IGNORED:
+ // No role description.
+ break;
+ case ui::AX_ROLE_IMAGE_MAP_LINK:
+ message_id = IDS_AX_ROLE_LINK;
+ break;
+ case ui::AX_ROLE_IMAGE_MAP:
+ message_id = IDS_AX_ROLE_GRAPHIC;
+ break;
+ case ui::AX_ROLE_IMAGE:
+ message_id = IDS_AX_ROLE_GRAPHIC;
+ break;
+ case ui::AX_ROLE_INLINE_TEXT_BOX:
+ // No role description.
+ break;
+ case ui::AX_ROLE_INPUT_TIME:
+ message_id = IDS_AX_ROLE_INPUT_TIME;
+ break;
+ case ui::AX_ROLE_LABEL_TEXT:
+ // No role description.
+ break;
+ case ui::AX_ROLE_LEGEND:
+ // No role description.
+ break;
+ case ui::AX_ROLE_LINE_BREAK:
+ // No role description.
+ break;
+ case ui::AX_ROLE_LINK:
+ message_id = IDS_AX_ROLE_LINK;
+ break;
+ case ui::AX_ROLE_LIST_BOX_OPTION:
+ // No role description.
+ break;
+ case ui::AX_ROLE_LIST_BOX:
+ message_id = IDS_AX_ROLE_LIST_BOX;
+ break;
+ case ui::AX_ROLE_LIST_ITEM:
+ // No role description.
+ break;
+ case ui::AX_ROLE_LIST_MARKER:
+ // No role description.
+ break;
+ case ui::AX_ROLE_LIST:
+ // No role description.
+ break;
+ case ui::AX_ROLE_LOCATION_BAR:
+ // No role description.
+ break;
+ case ui::AX_ROLE_LOG:
+ message_id = IDS_AX_ROLE_LOG;
+ break;
+ case ui::AX_ROLE_MAIN:
+ message_id = IDS_AX_ROLE_MAIN_CONTENT;
+ break;
+ case ui::AX_ROLE_MARK:
+ message_id = IDS_AX_ROLE_MARK;
+ break;
+ case ui::AX_ROLE_MARQUEE:
+ message_id = IDS_AX_ROLE_MARQUEE;
+ break;
+ case ui::AX_ROLE_MATH:
+ message_id = IDS_AX_ROLE_MATH;
+ break;
+ case ui::AX_ROLE_MENU_BAR:
+ message_id = IDS_AX_ROLE_MENU_BAR;
+ break;
+ case ui::AX_ROLE_MENU_BUTTON:
+ message_id = IDS_AX_ROLE_MENU_BUTTON;
+ break;
+ case ui::AX_ROLE_MENU_ITEM:
+ message_id = IDS_AX_ROLE_MENU_ITEM;
+ break;
+ case ui::AX_ROLE_MENU_ITEM_CHECK_BOX:
+ message_id = IDS_AX_ROLE_CHECK_BOX;
+ break;
+ case ui::AX_ROLE_MENU_ITEM_RADIO:
+ message_id = IDS_AX_ROLE_RADIO;
+ break;
+ case ui::AX_ROLE_MENU_LIST_OPTION:
+ // No role description.
+ break;
+ case ui::AX_ROLE_MENU_LIST_POPUP:
+ // No role description.
+ break;
+ case ui::AX_ROLE_MENU:
+ message_id = IDS_AX_ROLE_MENU;
+ break;
+ case ui::AX_ROLE_METER:
+ message_id = IDS_AX_ROLE_METER;
+ break;
+ case ui::AX_ROLE_NAVIGATION:
+ message_id = IDS_AX_ROLE_NAVIGATIONAL_LINK;
+ break;
+ case ui::AX_ROLE_NOTE:
+ message_id = IDS_AX_ROLE_NOTE;
+ break;
+ case ui::AX_ROLE_OUTLINE:
+ message_id = IDS_AX_ROLE_OUTLINE;
+ break;
+ case ui::AX_ROLE_PANE:
+ // No role description.
+ break;
+ case ui::AX_ROLE_PARAGRAPH:
+ // No role description.
+ break;
+ case ui::AX_ROLE_POP_UP_BUTTON:
+ message_id = IDS_AX_ROLE_POP_UP_BUTTON;
+ break;
+ case ui::AX_ROLE_PRE:
+ // No role description.
+ break;
+ case ui::AX_ROLE_PRESENTATIONAL:
+ // No role description.
+ break;
+ case ui::AX_ROLE_PROGRESS_INDICATOR:
+ message_id = IDS_AX_ROLE_PROGRESS_INDICATOR;
+ break;
+ case ui::AX_ROLE_RADIO_BUTTON:
+ message_id = IDS_AX_ROLE_RADIO;
+ break;
+ case ui::AX_ROLE_RADIO_GROUP:
+ message_id = IDS_AX_ROLE_RADIO_GROUP;
+ break;
+ case ui::AX_ROLE_REGION:
+ message_id = IDS_AX_ROLE_REGION;
+ break;
+ case ui::AX_ROLE_ROOT_WEB_AREA:
+ // No role description.
+ break;
+ case ui::AX_ROLE_ROW_HEADER:
+ message_id = IDS_AX_ROLE_ROW_HEADER;
+ break;
+ case ui::AX_ROLE_ROW:
+ // No role description.
+ break;
+ case ui::AX_ROLE_RUBY:
+ // No role description.
+ break;
+ case ui::AX_ROLE_RULER:
+ message_id = IDS_AX_ROLE_RULER;
+ break;
+ case ui::AX_ROLE_SVG_ROOT:
+ message_id = IDS_AX_ROLE_GRAPHIC;
+ break;
+ case ui::AX_ROLE_SCROLL_AREA:
+ // No role description.
+ break;
+ case ui::AX_ROLE_SCROLL_BAR:
+ message_id = IDS_AX_ROLE_SCROLL_BAR;
+ break;
+ case ui::AX_ROLE_SEAMLESS_WEB_AREA:
+ // No role description.
+ break;
+ case ui::AX_ROLE_SEARCH:
+ message_id = IDS_AX_ROLE_SEARCH;
+ break;
+ case ui::AX_ROLE_SEARCH_BOX:
+ message_id = IDS_AX_ROLE_SEARCH_BOX;
+ break;
+ case ui::AX_ROLE_SLIDER:
+ message_id = IDS_AX_ROLE_SLIDER;
+ break;
+ case ui::AX_ROLE_SLIDER_THUMB:
+ // No role description.
+ break;
+ case ui::AX_ROLE_SPIN_BUTTON_PART:
+ // No role description.
+ break;
+ case ui::AX_ROLE_SPIN_BUTTON:
+ message_id = IDS_AX_ROLE_SPIN_BUTTON;
+ break;
+ case ui::AX_ROLE_SPLITTER:
+ message_id = IDS_AX_ROLE_SPLITTER;
+ break;
+ case ui::AX_ROLE_STATIC_TEXT:
+ // No role description.
+ break;
+ case ui::AX_ROLE_STATUS:
+ message_id = IDS_AX_ROLE_STATUS;
+ break;
+ case ui::AX_ROLE_SWITCH:
+ message_id = IDS_AX_ROLE_SWITCH;
+ break;
+ case ui::AX_ROLE_TAB_GROUP:
+ // No role description.
+ break;
+ case ui::AX_ROLE_TAB_LIST:
+ message_id = IDS_AX_ROLE_TAB_LIST;
+ break;
+ case ui::AX_ROLE_TAB_PANEL:
+ message_id = IDS_AX_ROLE_TAB_PANEL;
+ break;
+ case ui::AX_ROLE_TAB:
+ message_id = IDS_AX_ROLE_TAB;
+ break;
+ case ui::AX_ROLE_TABLE_HEADER_CONTAINER:
+ // No role description.
+ break;
+ case ui::AX_ROLE_TABLE:
+ message_id = IDS_AX_ROLE_TABLE;
+ break;
+ case ui::AX_ROLE_TEXT_FIELD:
+ // No role description.
+ break;
+ case ui::AX_ROLE_TIME:
+ message_id = IDS_AX_ROLE_TIME;
+ break;
+ case ui::AX_ROLE_TIMER:
+ message_id = IDS_AX_ROLE_TIMER;
+ break;
+ case ui::AX_ROLE_TITLE_BAR:
+ // No role description.
+ break;
+ case ui::AX_ROLE_TOGGLE_BUTTON:
+ message_id = IDS_AX_ROLE_TOGGLE_BUTTON;
+ break;
+ case ui::AX_ROLE_TOOLBAR:
+ message_id = IDS_AX_ROLE_TOOLBAR;
+ break;
+ case ui::AX_ROLE_TREE_GRID:
+ message_id = IDS_AX_ROLE_TREE_GRID;
+ break;
+ case ui::AX_ROLE_TREE_ITEM:
+ message_id = IDS_AX_ROLE_TREE_ITEM;
+ break;
+ case ui::AX_ROLE_TREE:
+ message_id = IDS_AX_ROLE_TREE;
+ break;
+ case ui::AX_ROLE_UNKNOWN:
+ // No role description.
+ break;
+ case ui::AX_ROLE_TOOLTIP:
+ message_id = IDS_AX_ROLE_TOOLTIP;
+ break;
+ case ui::AX_ROLE_WEB_AREA:
+ // No role description.
+ break;
+ case ui::AX_ROLE_WEB_VIEW:
+ // No role description.
+ break;
+ case ui::AX_ROLE_WINDOW:
+ // No role description.
+ break;
+ }
+
+ if (message_id != -1)
+ return content_client->GetLocalizedString(message_id);
+
+ return base::string16();
+}
+
int BrowserAccessibilityAndroid::GetItemIndex() const {
int index = 0;
switch (GetRole()) {

Powered by Google App Engine
This is Rietveld 408576698