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

Unified Diff: ui/accessibility/platform/ax_platform_node_win.cc

Issue 2913553002: Forward BrowserAccessibility get_accState to AXPlatformNode. (Closed)
Patch Set: rename and switch boolean values Created 3 years, 6 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: ui/accessibility/platform/ax_platform_node_win.cc
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index 1a54321c6be5f0da90ad87a42d0cd914aba2d524..7d385a64000d2dd73606a11ab87adad52ae3073d 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -1438,8 +1438,7 @@ int AXPlatformNodeWin::MSAAState() {
msaa_state |= STATE_SYSTEM_FOCUSABLE;
if (state & (1 << ui::AX_STATE_HASPOPUP))
msaa_state |= STATE_SYSTEM_HASPOPUP;
- if (state & (1 << ui::AX_STATE_HOVERED))
- msaa_state |= STATE_SYSTEM_HOTTRACKED;
+
if (state & (1 << ui::AX_STATE_INVISIBLE) ||
GetData().role == ui::AX_ROLE_IGNORED) {
msaa_state |= STATE_SYSTEM_INVISIBLE;
@@ -1458,6 +1457,23 @@ int AXPlatformNodeWin::MSAAState() {
msaa_state |= STATE_SYSTEM_SELECTED;
if (state & (1 << ui::AX_STATE_DISABLED))
msaa_state |= STATE_SYSTEM_UNAVAILABLE;
+ if (state & (1 << ui::AX_STATE_BUSY))
+ msaa_state |= STATE_SYSTEM_BUSY;
+ if (state & (1 << ui::AX_STATE_VISITED))
+ msaa_state |= STATE_SYSTEM_TRAVERSED;
+
+ if (state & (1 << ui::AX_STATE_MULTISELECTABLE)) {
+ msaa_state |= STATE_SYSTEM_EXTSELECTABLE;
+ msaa_state |= STATE_SYSTEM_MULTISELECTABLE;
+ }
+
+ // Expose whether or not the mouse is over an element, but suppress
+ // this for tests because it can make the test results flaky depending
+ // on the position of the mouse.
+ if (delegate_->ShouldIgnoreHoveredStateForTesting()) {
+ if (state & (1 << ui::AX_STATE_HOVERED))
+ msaa_state |= STATE_SYSTEM_HOTTRACKED;
+ }
// Checked state
const auto checked_state = static_cast<ui::AXCheckedState>(
@@ -1490,6 +1506,89 @@ int AXPlatformNodeWin::MSAAState() {
msaa_state |= STATE_SYSTEM_FOCUSED;
}
+ switch (GetData().role) {
+ case ui::AX_ROLE_ARTICLE:
+ case ui::AX_ROLE_BUSY_INDICATOR:
+ case ui::AX_ROLE_DEFINITION:
+ case ui::AX_ROLE_DESCRIPTION_LIST:
+ case ui::AX_ROLE_DESCRIPTION_LIST_TERM:
+ case ui::AX_ROLE_IFRAME:
+ case ui::AX_ROLE_IMAGE:
+ case ui::AX_ROLE_IMAGE_MAP:
+ case ui::AX_ROLE_LIST:
+ case ui::AX_ROLE_LIST_ITEM:
+ case ui::AX_ROLE_PROGRESS_INDICATOR:
+ case ui::AX_ROLE_RULER:
+ case ui::AX_ROLE_SCROLL_AREA:
+ case ui::AX_ROLE_TABLE_HEADER_CONTAINER:
+ case ui::AX_ROLE_TERM:
+ case ui::AX_ROLE_TIMER:
+ case ui::AX_ROLE_TOOLBAR:
+ case ui::AX_ROLE_TOOLTIP:
+ msaa_state |= STATE_SYSTEM_READONLY;
+ break;
+
+ case ui::AX_ROLE_DOCUMENT:
+ case ui::AX_ROLE_ROOT_WEB_AREA:
+ case ui::AX_ROLE_WEB_AREA:
+ msaa_state |= STATE_SYSTEM_READONLY;
+ msaa_state |= STATE_SYSTEM_FOCUSABLE;
+ break;
+
+ case ui::AX_ROLE_GRID:
+ // TODO(aleventhal) this changed between ARIA 1.0 and 1.1,
+ // need to determine whether grids/treegrids should really be readonly
+ // or editable by default
+ // msaa_state |= STATE_SYSTEM_READONLY;
+ break;
+
+ case ui::AX_ROLE_IMAGE_MAP_LINK:
+ msaa_state |= STATE_SYSTEM_LINKED;
+ msaa_state |= STATE_SYSTEM_READONLY;
+ break;
+
+ case ui::AX_ROLE_LINK:
+ msaa_state |= STATE_SYSTEM_LINKED;
+ break;
+
+ case ui::AX_ROLE_LIST_BOX_OPTION:
+ if (msaa_state & STATE_SYSTEM_SELECTABLE) {
+ msaa_state |= STATE_SYSTEM_FOCUSABLE;
+ }
+ break;
+
+ case ui::AX_ROLE_MENU_LIST_OPTION:
+ if (msaa_state & STATE_SYSTEM_SELECTABLE) {
+ msaa_state |= STATE_SYSTEM_FOCUSABLE;
+ }
+ break;
+
+ case ui::AX_ROLE_TEXT_FIELD:
+ case ui::AX_ROLE_SEARCH_BOX:
+ if (state & (1 << ui::AX_STATE_READ_ONLY))
+ msaa_state |= STATE_SYSTEM_READONLY;
+ break;
+ default:
+ break;
+ }
+
+ // Compute the final value of READONLY for MSAA.
+ //
+ // We always set the READONLY state for elements that have the
+ // aria-readonly attribute and for a few roles (in the switch above),
+ // including read-only text fields.
+ // The majority of focusable controls should not have the read-only state set.
+ if (state & (1 << ui::AX_STATE_FOCUSABLE) &&
+ GetData().role != ROLE_SYSTEM_DOCUMENT &&
dmazzoni 2017/06/14 17:13:16 This is the bug. GetData().role is a ui::AXRole R
+ GetData().role != ROLE_SYSTEM_TEXT) {
+ msaa_state &= ~(STATE_SYSTEM_READONLY);
+ }
+ if (!(state & (1 << ui::AX_STATE_READ_ONLY)))
+ msaa_state &= ~(STATE_SYSTEM_READONLY);
+
+ if (GetData().GetBoolAttribute(ui::AX_ATTR_ARIA_READONLY))
+ msaa_state |= STATE_SYSTEM_READONLY;
+
return msaa_state;
}
« no previous file with comments | « ui/accessibility/platform/ax_platform_node_delegate.h ('k') | ui/accessibility/platform/test_ax_node_wrapper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698