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

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

Issue 2967493005: Use MSAA_Role directly from BrowserAccessibility. (Closed)
Patch Set: Change tests to match internal ax tree. Created 3 years, 5 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
« no previous file with comments | « ui/accessibility/platform/ax_platform_node_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 295a404af706d24c7b75645fc0b09881e2db1a4b..cb51a4f1f3294e8e43c4c1e08519504bdbba6a81 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -1189,6 +1189,13 @@ STDMETHODIMP AXPlatformNodeWin::QueryService(
// Private member functions.
//
int AXPlatformNodeWin::MSAARole() {
+ // If this is a web area for a presentational iframe, give it a role of
+ // something other than DOCUMENT so that the fact that it's a separate doc
+ // is not exposed to AT.
+ if (IsWebAreaForPresentationalIframe()) {
+ return ROLE_SYSTEM_GROUPING;
+ }
+
switch (GetData().role) {
case ui::AX_ROLE_ALERT:
return ROLE_SYSTEM_ALERT;
@@ -1367,6 +1374,9 @@ int AXPlatformNodeWin::MSAARole() {
case ui::AX_ROLE_MENU_LIST_OPTION:
return ROLE_SYSTEM_MENUITEM;
+ case ui::AX_ROLE_METER:
+ return ROLE_SYSTEM_PROGRESSBAR;
+
case ui::AX_ROLE_NAVIGATION:
return ROLE_SYSTEM_GROUPING;
@@ -1404,16 +1414,7 @@ int AXPlatformNodeWin::MSAARole() {
case ui::AX_ROLE_ROW: {
// Role changes depending on whether row is inside a treegrid
// https://www.w3.org/TR/core-aam-1.1/#role-map-row
- auto* container = FromNativeViewAccessible(GetParent());
- if (container && container->GetData().role == ui::AX_ROLE_GROUP) {
- // If parent was a rowgroup, we need to look at the grandparent
- container = FromNativeViewAccessible(container->GetParent());
- }
-
- if (!container)
- return ROLE_SYSTEM_ROW;
-
- return ROLE_SYSTEM_OUTLINEITEM;
+ return IsInTreeGrid() ? ROLE_SYSTEM_OUTLINEITEM : ROLE_SYSTEM_ROW;
}
case ui::AX_ROLE_ROW_HEADER:
@@ -1513,11 +1514,38 @@ int AXPlatformNodeWin::MSAARole() {
case ui::AX_ROLE_WINDOW:
return ROLE_SYSTEM_WINDOW;
- // TODO(dmazzoni): figure out the proper MSAA role for roles not called out
- // here.
- default:
+ // TODO(dmazzoni): figure out the proper MSAA role for roles listed below.
+ case AX_ROLE_BLOCKQUOTE:
+ case AX_ROLE_BUTTON_DROP_DOWN:
+ case AX_ROLE_CARET:
+ case AX_ROLE_CLIENT:
+ case AX_ROLE_DEFINITION:
+ case AX_ROLE_DESKTOP:
+ case AX_ROLE_DIRECTORY:
+ case AX_ROLE_FIGCAPTION:
+ case AX_ROLE_FOOTER:
+ case AX_ROLE_FORM:
+ case AX_ROLE_IGNORED:
+ case AX_ROLE_IMAGE_MAP:
+ case AX_ROLE_INLINE_TEXT_BOX:
+ case AX_ROLE_LOCATION_BAR:
+ case AX_ROLE_LOG:
+ case AX_ROLE_NONE:
+ case AX_ROLE_PANE:
+ case AX_ROLE_PARAGRAPH:
+ case AX_ROLE_PRESENTATIONAL:
+ case AX_ROLE_SEAMLESS_WEB_AREA:
+ case AX_ROLE_SLIDER_THUMB:
+ case AX_ROLE_SWITCH:
+ case AX_ROLE_TAB_GROUP:
+ case AX_ROLE_TITLE_BAR:
+ case AX_ROLE_UNKNOWN:
+ case AX_ROLE_WEB_VIEW:
return ROLE_SYSTEM_CLIENT;
}
+
+ NOTREACHED();
+ return ROLE_SYSTEM_CLIENT;
}
std::string AXPlatformNodeWin::StringOverrideForMSAARole() {
@@ -1564,6 +1592,19 @@ std::string AXPlatformNodeWin::StringOverrideForMSAARole() {
return "";
}
+bool AXPlatformNodeWin::IsWebAreaForPresentationalIframe() {
+ if (GetData().role != ui::AX_ROLE_WEB_AREA &&
+ GetData().role != ui::AX_ROLE_ROOT_WEB_AREA) {
+ return false;
+ }
+
+ auto* parent = FromNativeViewAccessible(GetParent());
+ if (!parent)
+ return false;
+
+ return parent->GetData().role == ui::AX_ROLE_IFRAME_PRESENTATIONAL;
+}
+
bool AXPlatformNodeWin::ShouldNodeHaveReadonlyState(
const AXNodeData& data) const {
if (data.GetBoolAttribute(ui::AX_ATTR_ARIA_READONLY))
@@ -1891,4 +1932,17 @@ AXPlatformNodeWin* AXPlatformNodeWin::GetTargetFromChildID(
return static_cast<AXPlatformNodeWin*>(base);
}
+bool AXPlatformNodeWin::IsInTreeGrid() {
+ auto* container = FromNativeViewAccessible(GetParent());
+
+ // If parent was a rowgroup, we need to look at the grandparent
+ if (container && container->GetData().role == ui::AX_ROLE_GROUP)
+ container = FromNativeViewAccessible(container->GetParent());
+
+ if (!container)
+ return false;
+
+ return container->GetData().role == ui::AX_ROLE_TREE_GRID;
+}
+
} // namespace ui
« no previous file with comments | « ui/accessibility/platform/ax_platform_node_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698