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

Side by Side Diff: ui/accessibility/platform/ax_platform_node_win.cc

Issue 2913553002: Forward BrowserAccessibility get_accState to AXPlatformNode. (Closed)
Patch Set: linux needs love too 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 <atlbase.h> 5 #include <atlbase.h>
6 #include <atlcom.h> 6 #include <atlcom.h>
7 #include <limits.h> 7 #include <limits.h>
8 #include <oleacc.h> 8 #include <oleacc.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 if (state & (1 << ui::AX_STATE_COLLAPSED)) 1108 if (state & (1 << ui::AX_STATE_COLLAPSED))
1109 msaa_state |= STATE_SYSTEM_COLLAPSED; 1109 msaa_state |= STATE_SYSTEM_COLLAPSED;
1110 if (state & (1 << ui::AX_STATE_DEFAULT)) 1110 if (state & (1 << ui::AX_STATE_DEFAULT))
1111 msaa_state |= STATE_SYSTEM_DEFAULT; 1111 msaa_state |= STATE_SYSTEM_DEFAULT;
1112 if (state & (1 << ui::AX_STATE_EXPANDED)) 1112 if (state & (1 << ui::AX_STATE_EXPANDED))
1113 msaa_state |= STATE_SYSTEM_EXPANDED; 1113 msaa_state |= STATE_SYSTEM_EXPANDED;
1114 if (state & (1 << ui::AX_STATE_FOCUSABLE)) 1114 if (state & (1 << ui::AX_STATE_FOCUSABLE))
1115 msaa_state |= STATE_SYSTEM_FOCUSABLE; 1115 msaa_state |= STATE_SYSTEM_FOCUSABLE;
1116 if (state & (1 << ui::AX_STATE_HASPOPUP)) 1116 if (state & (1 << ui::AX_STATE_HASPOPUP))
1117 msaa_state |= STATE_SYSTEM_HASPOPUP; 1117 msaa_state |= STATE_SYSTEM_HASPOPUP;
1118 if (state & (1 << ui::AX_STATE_HOVERED)) 1118
1119 msaa_state |= STATE_SYSTEM_HOTTRACKED;
1120 if (state & (1 << ui::AX_STATE_INVISIBLE) || 1119 if (state & (1 << ui::AX_STATE_INVISIBLE) ||
1121 GetData().role == ui::AX_ROLE_IGNORED) { 1120 GetData().role == ui::AX_ROLE_IGNORED) {
1122 msaa_state |= STATE_SYSTEM_INVISIBLE; 1121 msaa_state |= STATE_SYSTEM_INVISIBLE;
1123 } 1122 }
1124 if (state & (1 << ui::AX_STATE_LINKED)) 1123 if (state & (1 << ui::AX_STATE_LINKED))
1125 msaa_state |= STATE_SYSTEM_LINKED; 1124 msaa_state |= STATE_SYSTEM_LINKED;
1126 if (state & (1 << ui::AX_STATE_OFFSCREEN)) 1125 if (state & (1 << ui::AX_STATE_OFFSCREEN))
1127 msaa_state |= STATE_SYSTEM_OFFSCREEN; 1126 msaa_state |= STATE_SYSTEM_OFFSCREEN;
1128 if (state & (1 << ui::AX_STATE_PRESSED)) 1127 if (state & (1 << ui::AX_STATE_PRESSED))
1129 msaa_state |= STATE_SYSTEM_PRESSED; 1128 msaa_state |= STATE_SYSTEM_PRESSED;
1130 if (state & (1 << ui::AX_STATE_PROTECTED)) 1129 if (state & (1 << ui::AX_STATE_PROTECTED))
1131 msaa_state |= STATE_SYSTEM_PROTECTED; 1130 msaa_state |= STATE_SYSTEM_PROTECTED;
1132 if (state & (1 << ui::AX_STATE_READ_ONLY)) 1131 if (state & (1 << ui::AX_STATE_READ_ONLY))
1133 msaa_state |= STATE_SYSTEM_READONLY; 1132 msaa_state |= STATE_SYSTEM_READONLY;
1134 if (state & (1 << ui::AX_STATE_SELECTABLE)) 1133 if (state & (1 << ui::AX_STATE_SELECTABLE))
1135 msaa_state |= STATE_SYSTEM_SELECTABLE; 1134 msaa_state |= STATE_SYSTEM_SELECTABLE;
1136 if (state & (1 << ui::AX_STATE_SELECTED)) 1135 if (state & (1 << ui::AX_STATE_SELECTED))
1137 msaa_state |= STATE_SYSTEM_SELECTED; 1136 msaa_state |= STATE_SYSTEM_SELECTED;
1138 if (state & (1 << ui::AX_STATE_DISABLED)) 1137 if (state & (1 << ui::AX_STATE_DISABLED))
1139 msaa_state |= STATE_SYSTEM_UNAVAILABLE; 1138 msaa_state |= STATE_SYSTEM_UNAVAILABLE;
1139 if (state & (1 << ui::AX_STATE_BUSY))
1140 msaa_state |= STATE_SYSTEM_BUSY;
1141 if (state & (1 << ui::AX_STATE_VISITED))
1142 msaa_state |= STATE_SYSTEM_TRAVERSED;
1143
1144 if (state & (1 << ui::AX_STATE_MULTISELECTABLE)) {
1145 msaa_state |= STATE_SYSTEM_EXTSELECTABLE;
1146 msaa_state |= STATE_SYSTEM_MULTISELECTABLE;
1147 }
1148
1149 // Expose whether or not the mouse is over an element, but suppress
1150 // this for tests because it can make the test results flaky depending
1151 // on the position of the mouse.
1152 if (!delegate_->IsHotTrackingOn()) {
1153 if (state & (1 << ui::AX_STATE_HOVERED))
1154 msaa_state |= STATE_SYSTEM_HOTTRACKED;
1155 }
1140 1156
1141 // Checked state 1157 // Checked state
1142 const auto checked_state = static_cast<ui::AXCheckedState>( 1158 const auto checked_state = static_cast<ui::AXCheckedState>(
1143 GetIntAttribute(ui::AX_ATTR_CHECKED_STATE)); 1159 GetIntAttribute(ui::AX_ATTR_CHECKED_STATE));
1144 switch (checked_state) { 1160 switch (checked_state) {
1145 case ui::AX_CHECKED_STATE_TRUE: 1161 case ui::AX_CHECKED_STATE_TRUE:
1146 msaa_state |= STATE_SYSTEM_CHECKED; 1162 msaa_state |= STATE_SYSTEM_CHECKED;
1147 break; 1163 break;
1148 case ui::AX_CHECKED_STATE_MIXED: 1164 case ui::AX_CHECKED_STATE_MIXED:
1149 msaa_state |= STATE_SYSTEM_MIXED; 1165 msaa_state |= STATE_SYSTEM_MIXED;
(...skipping 10 matching lines...) Expand all
1160 // menu bars, when visible. 1176 // menu bars, when visible.
1161 // 1177 //
1162 // TODO(dmazzoni): this should probably check if focus is actually inside 1178 // TODO(dmazzoni): this should probably check if focus is actually inside
1163 // the menu bar, but we don't currently track focus inside menu pop-ups, 1179 // the menu bar, but we don't currently track focus inside menu pop-ups,
1164 // and Chrome only has one menu visible at a time so this works for now. 1180 // and Chrome only has one menu visible at a time so this works for now.
1165 if (data.role == ui::AX_ROLE_MENU_BAR && 1181 if (data.role == ui::AX_ROLE_MENU_BAR &&
1166 !(state & (1 << ui::AX_STATE_INVISIBLE))) { 1182 !(state & (1 << ui::AX_STATE_INVISIBLE))) {
1167 msaa_state |= STATE_SYSTEM_FOCUSED; 1183 msaa_state |= STATE_SYSTEM_FOCUSED;
1168 } 1184 }
1169 1185
1186 switch (GetData().role) {
1187 case ui::AX_ROLE_ARTICLE:
1188 case ui::AX_ROLE_BUSY_INDICATOR:
1189 case ui::AX_ROLE_DEFINITION:
1190 case ui::AX_ROLE_DESCRIPTION_LIST:
1191 case ui::AX_ROLE_DESCRIPTION_LIST_TERM:
1192 case ui::AX_ROLE_IFRAME:
1193 case ui::AX_ROLE_IMAGE:
1194 case ui::AX_ROLE_IMAGE_MAP:
1195 case ui::AX_ROLE_LIST:
1196 case ui::AX_ROLE_LIST_ITEM:
1197 case ui::AX_ROLE_PROGRESS_INDICATOR:
1198 case ui::AX_ROLE_RULER:
1199 case ui::AX_ROLE_SCROLL_AREA:
1200 case ui::AX_ROLE_TABLE_HEADER_CONTAINER:
1201 case ui::AX_ROLE_TERM:
1202 case ui::AX_ROLE_TIMER:
1203 case ui::AX_ROLE_TOOLBAR:
1204 case ui::AX_ROLE_TOOLTIP:
1205 msaa_state |= STATE_SYSTEM_READONLY;
1206 break;
1207
1208 case ui::AX_ROLE_DOCUMENT:
1209 case ui::AX_ROLE_ROOT_WEB_AREA:
1210 case ui::AX_ROLE_WEB_AREA:
1211 msaa_state |= STATE_SYSTEM_READONLY;
1212 msaa_state |= STATE_SYSTEM_FOCUSABLE;
1213 break;
1214
1215 case ui::AX_ROLE_GRID:
1216 // TODO(aleventhal) this changed between ARIA 1.0 and 1.1,
1217 // need to determine whether grids/treegrids should really be readonly
1218 // or editable by default
1219 // msaa_state |= STATE_SYSTEM_READONLY;
1220 break;
1221
1222 case ui::AX_ROLE_IMAGE_MAP_LINK:
1223 msaa_state |= STATE_SYSTEM_LINKED;
1224 msaa_state |= STATE_SYSTEM_READONLY;
1225 break;
1226
1227 case ui::AX_ROLE_LINK:
1228 msaa_state |= STATE_SYSTEM_LINKED;
1229 break;
1230
1231 case ui::AX_ROLE_LIST_BOX_OPTION:
1232 if (msaa_state & STATE_SYSTEM_SELECTABLE) {
1233 msaa_state |= STATE_SYSTEM_FOCUSABLE;
1234 }
1235 break;
1236
1237 case ui::AX_ROLE_MENU_LIST_OPTION:
1238 if (msaa_state & STATE_SYSTEM_SELECTABLE) {
1239 msaa_state |= STATE_SYSTEM_FOCUSABLE;
1240 }
1241 break;
1242
1243 case ui::AX_ROLE_TEXT_FIELD:
1244 case ui::AX_ROLE_SEARCH_BOX:
1245 if (state & (1 << ui::AX_STATE_READ_ONLY))
1246 msaa_state |= STATE_SYSTEM_READONLY;
1247 break;
1248 default:
1249 break;
1250 }
1251
1252 // Compute the final value of READONLY for MSAA.
1253 //
1254 // We always set the READONLY state for elements that have the
1255 // aria-readonly attribute and for a few roles (in the switch above),
1256 // including read-only text fields.
1257 // The majority of focusable controls should not have the read-only state set.
1258 if (state & (1 << ui::AX_STATE_FOCUSABLE) &&
1259 GetData().role != ROLE_SYSTEM_DOCUMENT &&
1260 GetData().role != ROLE_SYSTEM_TEXT) {
1261 msaa_state &= ~(STATE_SYSTEM_READONLY);
1262 }
1263 if (!(state & (1 << ui::AX_STATE_READ_ONLY)))
1264 msaa_state &= ~(STATE_SYSTEM_READONLY);
1265
1266 if (GetData().GetBoolAttribute(ui::AX_ATTR_ARIA_READONLY))
1267 msaa_state |= STATE_SYSTEM_READONLY;
1268
1170 return msaa_state; 1269 return msaa_state;
1171 } 1270 }
1172 1271
1173 int AXPlatformNodeWin::MSAAEvent(ui::AXEvent event) { 1272 int AXPlatformNodeWin::MSAAEvent(ui::AXEvent event) {
1174 switch (event) { 1273 switch (event) {
1175 case ui::AX_EVENT_ALERT: 1274 case ui::AX_EVENT_ALERT:
1176 return EVENT_SYSTEM_ALERT; 1275 return EVENT_SYSTEM_ALERT;
1177 case ui::AX_EVENT_FOCUS: 1276 case ui::AX_EVENT_FOCUS:
1178 return EVENT_OBJECT_FOCUS; 1277 return EVENT_OBJECT_FOCUS;
1179 case ui::AX_EVENT_MENU_START: 1278 case ui::AX_EVENT_MENU_START:
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1293 1392
1294 AXPlatformNodeBase* base = 1393 AXPlatformNodeBase* base =
1295 FromNativeViewAccessible(node->GetNativeViewAccessible()); 1394 FromNativeViewAccessible(node->GetNativeViewAccessible());
1296 if (base && !IsDescendant(base)) 1395 if (base && !IsDescendant(base))
1297 base = nullptr; 1396 base = nullptr;
1298 1397
1299 return static_cast<AXPlatformNodeWin*>(base); 1398 return static_cast<AXPlatformNodeWin*>(base);
1300 } 1399 }
1301 1400
1302 } // namespace ui 1401 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698