OLD | NEW |
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2017 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 "content/browser/accessibility/browser_accessibility_com_win.h" | 5 #include "content/browser/accessibility/browser_accessibility_com_win.h" |
6 | 6 |
7 #include <UIAutomationClient.h> | 7 #include <UIAutomationClient.h> |
8 #include <UIAutomationCoreApi.h> | 8 #include <UIAutomationCoreApi.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 return AXPlatformNodeWin::accLocation(x_left, y_top, width, height, var_id); | 457 return AXPlatformNodeWin::accLocation(x_left, y_top, width, height, var_id); |
458 } | 458 } |
459 | 459 |
460 STDMETHODIMP BrowserAccessibilityComWin::accNavigate(LONG nav_dir, | 460 STDMETHODIMP BrowserAccessibilityComWin::accNavigate(LONG nav_dir, |
461 VARIANT start, | 461 VARIANT start, |
462 VARIANT* end) { | 462 VARIANT* end) { |
463 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_NAVIGATE); | 463 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_NAVIGATE); |
464 if (!owner()) | 464 if (!owner()) |
465 return E_FAIL; | 465 return E_FAIL; |
466 | 466 |
467 // Forward all non-spatial directions (e.g. NAVDIR_NEXT) to the platform node | 467 return AXPlatformNodeWin::accNavigate(nav_dir, start, end); |
468 // implementation. | |
469 if (nav_dir != NAVDIR_DOWN && nav_dir != NAVDIR_UP && | |
470 nav_dir != NAVDIR_LEFT && nav_dir != NAVDIR_RIGHT) { | |
471 return AXPlatformNodeWin::accNavigate(nav_dir, start, end); | |
472 } | |
473 | |
474 if (end) { | |
475 end->vt = VT_EMPTY; | |
476 } else { | |
477 return E_INVALIDARG; | |
478 } | |
479 | |
480 BrowserAccessibilityComWin* target = GetTargetFromChildID(start); | |
481 if (!target) | |
482 return E_INVALIDARG; | |
483 | |
484 BrowserAccessibility* result = nullptr; | |
485 // Only handle spatial directions for tables here. | |
486 switch (nav_dir) { | |
487 case NAVDIR_DOWN: | |
488 result = target->owner()->GetTableCell( | |
489 owner()->GetTableRow() + owner()->GetTableRowSpan(), | |
490 owner()->GetTableColumn()); | |
491 break; | |
492 case NAVDIR_UP: | |
493 result = target->owner()->GetTableCell(owner()->GetTableRow() - 1, | |
494 owner()->GetTableColumn()); | |
495 break; | |
496 case NAVDIR_LEFT: | |
497 result = target->owner()->GetTableCell(owner()->GetTableRow(), | |
498 owner()->GetTableColumn() - 1); | |
499 break; | |
500 case NAVDIR_RIGHT: | |
501 result = target->owner()->GetTableCell( | |
502 owner()->GetTableRow(), | |
503 owner()->GetTableColumn() + owner()->GetTableColumnSpan()); | |
504 break; | |
505 } | |
506 | |
507 if (!result) | |
508 return S_FALSE; | |
509 | |
510 end->vt = VT_DISPATCH; | |
511 end->pdispVal = ToBrowserAccessibilityComWin(result)->NewReference(); | |
512 return S_OK; | |
513 } | 468 } |
514 | 469 |
515 STDMETHODIMP BrowserAccessibilityComWin::get_accChild(VARIANT var_child, | 470 STDMETHODIMP BrowserAccessibilityComWin::get_accChild(VARIANT var_child, |
516 IDispatch** disp_child) { | 471 IDispatch** disp_child) { |
517 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_CHILD); | 472 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_CHILD); |
518 if (!owner()) | 473 if (!owner()) |
519 return E_FAIL; | 474 return E_FAIL; |
520 | 475 |
521 return AXPlatformNodeWin::get_accChild(var_child, disp_child); | 476 return AXPlatformNodeWin::get_accChild(var_child, disp_child); |
522 } | 477 } |
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1118 long column, | 1073 long column, |
1119 IUnknown** accessible) { | 1074 IUnknown** accessible) { |
1120 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACCESSIBLE_AT); | 1075 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACCESSIBLE_AT); |
1121 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1076 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1122 if (!owner()) | 1077 if (!owner()) |
1123 return E_FAIL; | 1078 return E_FAIL; |
1124 | 1079 |
1125 if (!accessible) | 1080 if (!accessible) |
1126 return E_INVALIDARG; | 1081 return E_INVALIDARG; |
1127 | 1082 |
1128 BrowserAccessibility* cell = | 1083 AXPlatformNodeBase* cell = |
1129 owner()->GetTableCell(static_cast<int>(row), static_cast<int>(column)); | 1084 GetTableCell(static_cast<int>(row), static_cast<int>(column)); |
1130 if (cell && ToBrowserAccessibilityComWin(cell)) { | 1085 if (cell) { |
1131 *accessible = static_cast<IAccessible*>( | 1086 auto* node_win = static_cast<AXPlatformNodeWin*>(cell); |
1132 ToBrowserAccessibilityComWin(cell)->NewReference()); | 1087 node_win->AddRef(); |
| 1088 |
| 1089 *accessible = static_cast<IAccessible*>(node_win); |
1133 return S_OK; | 1090 return S_OK; |
1134 } | 1091 } |
1135 | 1092 |
1136 *accessible = nullptr; | 1093 *accessible = nullptr; |
1137 return E_INVALIDARG; | 1094 return E_INVALIDARG; |
1138 } | 1095 } |
1139 | 1096 |
1140 STDMETHODIMP BrowserAccessibilityComWin::get_caption(IUnknown** accessible) { | 1097 STDMETHODIMP BrowserAccessibilityComWin::get_caption(IUnknown** accessible) { |
1141 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CAPTION); | 1098 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CAPTION); |
1142 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1099 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
(...skipping 12 matching lines...) Expand all Loading... |
1155 long column, | 1112 long column, |
1156 long* cell_index) { | 1113 long* cell_index) { |
1157 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CHILD_INDEX); | 1114 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CHILD_INDEX); |
1158 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1115 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1159 if (!owner()) | 1116 if (!owner()) |
1160 return E_FAIL; | 1117 return E_FAIL; |
1161 | 1118 |
1162 if (!cell_index) | 1119 if (!cell_index) |
1163 return E_INVALIDARG; | 1120 return E_INVALIDARG; |
1164 | 1121 |
1165 BrowserAccessibility* cell = | 1122 auto* cell = GetTableCell(static_cast<int>(row), static_cast<int>(column)); |
1166 owner()->GetTableCell(static_cast<int>(row), static_cast<int>(column)); | |
1167 if (cell) { | 1123 if (cell) { |
1168 *cell_index = static_cast<LONG>(cell->GetTableCellIndex()); | 1124 *cell_index = static_cast<LONG>(cell->GetTableCellIndex()); |
1169 return S_OK; | 1125 return S_OK; |
1170 } | 1126 } |
1171 | 1127 |
1172 *cell_index = 0; | 1128 *cell_index = 0; |
1173 return E_INVALIDARG; | 1129 return E_INVALIDARG; |
1174 } | 1130 } |
1175 | 1131 |
1176 STDMETHODIMP BrowserAccessibilityComWin::get_columnDescription( | 1132 STDMETHODIMP BrowserAccessibilityComWin::get_columnDescription( |
1177 long column, | 1133 long column, |
1178 BSTR* description) { | 1134 BSTR* description) { |
1179 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_DESCRIPTION); | 1135 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_DESCRIPTION); |
1180 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1136 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1181 if (!owner()) | 1137 if (!owner()) |
1182 return E_FAIL; | 1138 return E_FAIL; |
1183 | 1139 |
1184 if (!description) | 1140 if (!description) |
1185 return E_INVALIDARG; | 1141 return E_INVALIDARG; |
1186 | 1142 |
1187 int columns = owner()->GetTableColumnCount(); | 1143 int columns = GetTableColumnCount(); |
1188 if (column < 0 || column >= columns) | 1144 if (column < 0 || column >= columns) |
1189 return E_INVALIDARG; | 1145 return E_INVALIDARG; |
1190 | 1146 |
1191 int rows = owner()->GetTableRowCount(); | 1147 int rows = GetTableRowCount(); |
1192 if (rows <= 0) { | 1148 if (rows <= 0) { |
1193 *description = nullptr; | 1149 *description = nullptr; |
1194 return S_FALSE; | 1150 return S_FALSE; |
1195 } | 1151 } |
1196 | 1152 |
1197 for (int i = 0; i < rows; ++i) { | 1153 for (int i = 0; i < rows; ++i) { |
1198 BrowserAccessibility* cell = owner()->GetTableCell(i, column); | 1154 auto* cell = GetTableCell(i, column); |
1199 if (ToBrowserAccessibilityComWin(cell) && | 1155 if (cell && cell->GetData().role == ui::AX_ROLE_COLUMN_HEADER) { |
1200 cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) { | |
1201 base::string16 cell_name = cell->GetString16Attribute(ui::AX_ATTR_NAME); | 1156 base::string16 cell_name = cell->GetString16Attribute(ui::AX_ATTR_NAME); |
1202 if (cell_name.size() > 0) { | 1157 if (cell_name.size() > 0) { |
1203 *description = SysAllocString(cell_name.c_str()); | 1158 *description = SysAllocString(cell_name.c_str()); |
1204 return S_OK; | 1159 return S_OK; |
1205 } | 1160 } |
1206 | 1161 |
1207 if (ToBrowserAccessibilityComWin(cell)->description().size() > 0) { | 1162 cell_name = cell->GetString16Attribute(ui::AX_ATTR_DESCRIPTION); |
1208 *description = SysAllocString( | 1163 if (cell_name.size() > 0) { |
1209 ToBrowserAccessibilityComWin(cell)->description().c_str()); | 1164 *description = SysAllocString(cell_name.c_str()); |
1210 return S_OK; | 1165 return S_OK; |
1211 } | 1166 } |
1212 } | 1167 } |
1213 } | 1168 } |
1214 | 1169 |
1215 *description = nullptr; | 1170 *description = nullptr; |
1216 return S_FALSE; | 1171 return S_FALSE; |
1217 } | 1172 } |
1218 | 1173 |
1219 STDMETHODIMP BrowserAccessibilityComWin::get_columnExtentAt( | 1174 STDMETHODIMP BrowserAccessibilityComWin::get_columnExtentAt( |
1220 long row, | 1175 long row, |
1221 long column, | 1176 long column, |
1222 long* n_columns_spanned) { | 1177 long* n_columns_spanned) { |
1223 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_EXTENT_AT); | 1178 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_EXTENT_AT); |
1224 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1179 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1225 if (!owner()) | 1180 if (!owner()) |
1226 return E_FAIL; | 1181 return E_FAIL; |
1227 | 1182 |
1228 if (!n_columns_spanned) | 1183 if (!n_columns_spanned) |
1229 return E_INVALIDARG; | 1184 return E_INVALIDARG; |
1230 | 1185 |
1231 BrowserAccessibility* cell = | 1186 auto* cell = GetTableCell(static_cast<int>(row), static_cast<int>(column)); |
1232 owner()->GetTableCell(static_cast<int>(row), static_cast<int>(column)); | |
1233 if (!cell) | 1187 if (!cell) |
1234 return E_INVALIDARG; | 1188 return E_INVALIDARG; |
1235 | 1189 |
1236 *n_columns_spanned = cell->GetTableColumnSpan(); | 1190 *n_columns_spanned = cell->GetTableColumnSpan(); |
1237 return S_OK; | 1191 return S_OK; |
1238 } | 1192 } |
1239 | 1193 |
1240 STDMETHODIMP BrowserAccessibilityComWin::get_columnHeader( | 1194 STDMETHODIMP BrowserAccessibilityComWin::get_columnHeader( |
1241 IAccessibleTable** accessible_table, | 1195 IAccessibleTable** accessible_table, |
1242 long* starting_row_index) { | 1196 long* starting_row_index) { |
1243 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_HEADER); | 1197 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_HEADER); |
1244 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1198 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1245 // TODO(dmazzoni): implement | 1199 // TODO(dmazzoni): implement |
1246 return E_NOTIMPL; | 1200 return E_NOTIMPL; |
1247 } | 1201 } |
1248 | 1202 |
1249 STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long cell_index, | 1203 STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long cell_index, |
1250 long* column_index) { | 1204 long* column_index) { |
1251 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_INDEX); | 1205 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_INDEX); |
1252 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1206 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1253 if (!owner()) | 1207 if (!owner()) |
1254 return E_FAIL; | 1208 return E_FAIL; |
1255 | 1209 |
1256 if (!column_index) | 1210 if (!column_index) |
1257 return E_INVALIDARG; | 1211 return E_INVALIDARG; |
1258 | 1212 |
1259 BrowserAccessibility* cell = owner()->GetTableCell(cell_index); | 1213 auto* cell = GetTableCell(cell_index); |
1260 if (!cell) | 1214 if (!cell) |
1261 return E_INVALIDARG; | 1215 return E_INVALIDARG; |
1262 *column_index = cell->GetTableColumn(); | 1216 *column_index = cell->GetTableColumn(); |
1263 return S_OK; | 1217 return S_OK; |
1264 } | 1218 } |
1265 | 1219 |
1266 STDMETHODIMP BrowserAccessibilityComWin::get_nColumns(long* column_count) { | 1220 STDMETHODIMP BrowserAccessibilityComWin::get_nColumns(long* column_count) { |
1267 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_COLUMNS); | 1221 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_COLUMNS); |
1268 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1222 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1269 if (!owner()) | 1223 if (!owner()) |
1270 return E_FAIL; | 1224 return E_FAIL; |
1271 | 1225 |
1272 if (!column_count) | 1226 if (!column_count) |
1273 return E_INVALIDARG; | 1227 return E_INVALIDARG; |
1274 | 1228 |
1275 *column_count = owner()->GetTableColumnCount(); | 1229 *column_count = GetTableColumnCount(); |
1276 return S_OK; | 1230 return S_OK; |
1277 } | 1231 } |
1278 | 1232 |
1279 STDMETHODIMP BrowserAccessibilityComWin::get_nRows(long* row_count) { | 1233 STDMETHODIMP BrowserAccessibilityComWin::get_nRows(long* row_count) { |
1280 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_ROWS); | 1234 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_ROWS); |
1281 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1235 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1282 if (!owner()) | 1236 if (!owner()) |
1283 return E_FAIL; | 1237 return E_FAIL; |
1284 | 1238 |
1285 if (!row_count) | 1239 if (!row_count) |
1286 return E_INVALIDARG; | 1240 return E_INVALIDARG; |
1287 | 1241 |
1288 *row_count = owner()->GetTableRowCount(); | 1242 *row_count = GetTableRowCount(); |
1289 return S_OK; | 1243 return S_OK; |
1290 } | 1244 } |
1291 | 1245 |
1292 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedChildren( | 1246 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedChildren( |
1293 long* cell_count) { | 1247 long* cell_count) { |
1294 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_CHILDREN); | 1248 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_CHILDREN); |
1295 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1249 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1296 if (!owner()) | 1250 if (!owner()) |
1297 return E_FAIL; | 1251 return E_FAIL; |
1298 | 1252 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1334 STDMETHODIMP BrowserAccessibilityComWin::get_rowDescription(long row, | 1288 STDMETHODIMP BrowserAccessibilityComWin::get_rowDescription(long row, |
1335 BSTR* description) { | 1289 BSTR* description) { |
1336 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_DESCRIPTION); | 1290 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_DESCRIPTION); |
1337 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1291 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1338 if (!owner()) | 1292 if (!owner()) |
1339 return E_FAIL; | 1293 return E_FAIL; |
1340 | 1294 |
1341 if (!description) | 1295 if (!description) |
1342 return E_INVALIDARG; | 1296 return E_INVALIDARG; |
1343 | 1297 |
1344 if (row < 0 || row >= owner()->GetTableRowCount()) | 1298 if (row < 0 || row >= GetTableRowCount()) |
1345 return E_INVALIDARG; | 1299 return E_INVALIDARG; |
1346 | 1300 |
1347 int columns = owner()->GetTableColumnCount(); | 1301 int columns = GetTableColumnCount(); |
1348 if (columns <= 0) { | 1302 if (columns <= 0) { |
1349 *description = nullptr; | 1303 *description = nullptr; |
1350 return S_FALSE; | 1304 return S_FALSE; |
1351 } | 1305 } |
1352 | 1306 |
1353 for (int i = 0; i < columns; ++i) { | 1307 for (int i = 0; i < columns; ++i) { |
1354 BrowserAccessibility* cell = owner()->GetTableCell(row, i); | 1308 auto* cell = GetTableCell(row, i); |
1355 if (ToBrowserAccessibilityComWin(cell) && | 1309 if (cell && cell->GetData().role == ui::AX_ROLE_ROW_HEADER) { |
1356 cell->GetRole() == ui::AX_ROLE_ROW_HEADER) { | |
1357 base::string16 cell_name = cell->GetString16Attribute(ui::AX_ATTR_NAME); | 1310 base::string16 cell_name = cell->GetString16Attribute(ui::AX_ATTR_NAME); |
1358 if (cell_name.size() > 0) { | 1311 if (cell_name.size() > 0) { |
1359 *description = SysAllocString(cell_name.c_str()); | 1312 *description = SysAllocString(cell_name.c_str()); |
1360 return S_OK; | 1313 return S_OK; |
1361 } | 1314 } |
1362 | 1315 cell_name = cell->GetString16Attribute(ui::AX_ATTR_DESCRIPTION); |
1363 if (ToBrowserAccessibilityComWin(cell)->description().size() > 0) { | 1316 if (cell_name.size() > 0) { |
1364 *description = SysAllocString( | 1317 *description = SysAllocString(cell_name.c_str()); |
1365 ToBrowserAccessibilityComWin(cell)->description().c_str()); | |
1366 return S_OK; | 1318 return S_OK; |
1367 } | 1319 } |
1368 } | 1320 } |
1369 } | 1321 } |
1370 | 1322 |
1371 *description = nullptr; | 1323 *description = nullptr; |
1372 return S_FALSE; | 1324 return S_FALSE; |
1373 } | 1325 } |
1374 | 1326 |
1375 STDMETHODIMP BrowserAccessibilityComWin::get_rowExtentAt(long row, | 1327 STDMETHODIMP BrowserAccessibilityComWin::get_rowExtentAt(long row, |
1376 long column, | 1328 long column, |
1377 long* n_rows_spanned) { | 1329 long* n_rows_spanned) { |
1378 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_EXTENT_AT); | 1330 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_EXTENT_AT); |
1379 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1331 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1380 if (!owner()) | 1332 if (!owner()) |
1381 return E_FAIL; | 1333 return E_FAIL; |
1382 | 1334 |
1383 if (!n_rows_spanned) | 1335 if (!n_rows_spanned) |
1384 return E_INVALIDARG; | 1336 return E_INVALIDARG; |
1385 | 1337 |
1386 BrowserAccessibility* cell = owner()->GetTableCell(row, column); | 1338 auto* cell = GetTableCell(row, column); |
1387 if (!cell) | 1339 if (!cell) |
1388 return E_INVALIDARG; | 1340 return E_INVALIDARG; |
1389 | 1341 |
1390 *n_rows_spanned = owner()->GetTableRowSpan(); | 1342 *n_rows_spanned = GetTableRowSpan(); |
1391 return S_OK; | 1343 return S_OK; |
1392 } | 1344 } |
1393 | 1345 |
1394 STDMETHODIMP BrowserAccessibilityComWin::get_rowHeader( | 1346 STDMETHODIMP BrowserAccessibilityComWin::get_rowHeader( |
1395 IAccessibleTable** accessible_table, | 1347 IAccessibleTable** accessible_table, |
1396 long* starting_column_index) { | 1348 long* starting_column_index) { |
1397 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_HEADER); | 1349 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_HEADER); |
1398 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1350 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1399 // TODO(dmazzoni): implement | 1351 // TODO(dmazzoni): implement |
1400 return E_NOTIMPL; | 1352 return E_NOTIMPL; |
1401 } | 1353 } |
1402 | 1354 |
1403 STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long cell_index, | 1355 STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long cell_index, |
1404 long* row_index) { | 1356 long* row_index) { |
1405 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_INDEX); | 1357 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_INDEX); |
1406 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1358 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1407 if (!owner()) | 1359 if (!owner()) |
1408 return E_FAIL; | 1360 return E_FAIL; |
1409 | 1361 |
1410 if (!row_index) | 1362 if (!row_index) |
1411 return E_INVALIDARG; | 1363 return E_INVALIDARG; |
1412 | 1364 |
1413 BrowserAccessibility* cell = owner()->GetTableCell(cell_index); | 1365 auto* cell = GetTableCell(cell_index); |
1414 if (!cell) | 1366 if (!cell) |
1415 return E_INVALIDARG; | 1367 return E_INVALIDARG; |
1416 | 1368 |
1417 *row_index = cell->GetTableRow(); | 1369 *row_index = cell->GetTableRow(); |
1418 return S_OK; | 1370 return S_OK; |
1419 } | 1371 } |
1420 | 1372 |
1421 STDMETHODIMP BrowserAccessibilityComWin::get_selectedChildren( | 1373 STDMETHODIMP BrowserAccessibilityComWin::get_selectedChildren( |
1422 long max_children, | 1374 long max_children, |
1423 long** children, | 1375 long** children, |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1537 long* column_extents, | 1489 long* column_extents, |
1538 boolean* is_selected) { | 1490 boolean* is_selected) { |
1539 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_COLUMN_EXTENTS_AT_INDEX); | 1491 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_COLUMN_EXTENTS_AT_INDEX); |
1540 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1492 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1541 if (!owner()) | 1493 if (!owner()) |
1542 return E_FAIL; | 1494 return E_FAIL; |
1543 | 1495 |
1544 if (!row || !column || !row_extents || !column_extents || !is_selected) | 1496 if (!row || !column || !row_extents || !column_extents || !is_selected) |
1545 return E_INVALIDARG; | 1497 return E_INVALIDARG; |
1546 | 1498 |
1547 BrowserAccessibility* cell = owner()->GetTableCell(index); | 1499 auto* cell = GetTableCell(index); |
1548 if (!cell) | 1500 if (!cell) |
1549 return E_INVALIDARG; | 1501 return E_INVALIDARG; |
1550 | 1502 |
1551 *row = cell->GetTableRow(); | 1503 *row = cell->GetTableRow(); |
1552 *column = cell->GetTableColumn(); | 1504 *column = cell->GetTableColumn(); |
1553 *row_extents = owner()->GetTableRowSpan(); | 1505 *row_extents = GetTableRowSpan(); |
1554 *column_extents = owner()->GetTableColumnSpan(); | 1506 *column_extents = GetTableColumnSpan(); |
1555 *is_selected = false; // Not supported. | 1507 *is_selected = false; // Not supported. |
1556 | 1508 |
1557 return S_OK; | 1509 return S_OK; |
1558 } | 1510 } |
1559 | 1511 |
1560 STDMETHODIMP BrowserAccessibilityComWin::selectRow(long row) { | 1512 STDMETHODIMP BrowserAccessibilityComWin::selectRow(long row) { |
1561 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SELECT_ROW); | 1513 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SELECT_ROW); |
1562 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1514 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1563 return E_NOTIMPL; | 1515 return E_NOTIMPL; |
1564 } | 1516 } |
(...skipping 29 matching lines...) Expand all Loading... |
1594 long column, | 1546 long column, |
1595 IUnknown** cell) { | 1547 IUnknown** cell) { |
1596 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CELL_AT); | 1548 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_CELL_AT); |
1597 AddAccessibilityModeFlags(AccessibilityMode::kScreenReader); | 1549 AddAccessibilityModeFlags(AccessibilityMode::kScreenReader); |
1598 if (!owner()) | 1550 if (!owner()) |
1599 return E_FAIL; | 1551 return E_FAIL; |
1600 | 1552 |
1601 if (!cell) | 1553 if (!cell) |
1602 return E_INVALIDARG; | 1554 return E_INVALIDARG; |
1603 | 1555 |
1604 BrowserAccessibility* table_cell = | 1556 AXPlatformNodeBase* table_cell = |
1605 owner()->GetTableCell(static_cast<int>(row), static_cast<int>(column)); | 1557 GetTableCell(static_cast<int>(row), static_cast<int>(column)); |
1606 if (ToBrowserAccessibilityComWin(table_cell)) { | 1558 if (table_cell) { |
1607 return ToBrowserAccessibilityComWin(table_cell) | 1559 auto* node_win = static_cast<AXPlatformNodeWin*>(table_cell); |
1608 ->QueryInterface(IID_IUnknown, reinterpret_cast<void**>(cell)); | 1560 node_win->AddRef(); |
| 1561 *cell = static_cast<IAccessible*>(node_win); |
| 1562 return S_OK; |
1609 } | 1563 } |
1610 | 1564 |
1611 *cell = nullptr; | 1565 *cell = nullptr; |
1612 return E_INVALIDARG; | 1566 return E_INVALIDARG; |
1613 } | 1567 } |
1614 | 1568 |
1615 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedCells(long* cell_count) { | 1569 STDMETHODIMP BrowserAccessibilityComWin::get_nSelectedCells(long* cell_count) { |
1616 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_CELLS); | 1570 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_SELECTED_CELLS); |
1617 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1571 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1618 return get_nSelectedChildren(cell_count); | 1572 return get_nSelectedChildren(cell_count); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1671 STDMETHODIMP BrowserAccessibilityComWin::get_columnExtent( | 1625 STDMETHODIMP BrowserAccessibilityComWin::get_columnExtent( |
1672 long* n_columns_spanned) { | 1626 long* n_columns_spanned) { |
1673 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_EXTENT); | 1627 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_EXTENT); |
1674 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1628 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1675 if (!owner()) | 1629 if (!owner()) |
1676 return E_FAIL; | 1630 return E_FAIL; |
1677 | 1631 |
1678 if (!n_columns_spanned) | 1632 if (!n_columns_spanned) |
1679 return E_INVALIDARG; | 1633 return E_INVALIDARG; |
1680 | 1634 |
1681 *n_columns_spanned = owner()->GetTableColumnSpan(); | 1635 *n_columns_spanned = GetTableColumnSpan(); |
1682 return S_OK; | 1636 return S_OK; |
1683 } | 1637 } |
1684 | 1638 |
1685 STDMETHODIMP BrowserAccessibilityComWin::get_columnHeaderCells( | 1639 STDMETHODIMP BrowserAccessibilityComWin::get_columnHeaderCells( |
1686 IUnknown*** cell_accessibles, | 1640 IUnknown*** cell_accessibles, |
1687 long* n_column_header_cells) { | 1641 long* n_column_header_cells) { |
1688 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_HEADER_CELLS); | 1642 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_COLUMN_HEADER_CELLS); |
1689 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1643 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1690 if (!owner()) | 1644 if (!owner()) |
1691 return E_FAIL; | 1645 return E_FAIL; |
1692 | 1646 |
1693 if (!cell_accessibles || !n_column_header_cells) | 1647 if (!cell_accessibles || !n_column_header_cells) |
1694 return E_INVALIDARG; | 1648 return E_INVALIDARG; |
1695 | 1649 |
1696 *n_column_header_cells = 0; | 1650 *n_column_header_cells = 0; |
1697 BrowserAccessibility* table = owner()->GetTable(); | 1651 auto* table = GetTable(); |
1698 if (!table) { | 1652 if (!table) { |
1699 NOTREACHED(); | 1653 NOTREACHED(); |
1700 return S_FALSE; | 1654 return S_FALSE; |
1701 } | 1655 } |
1702 | 1656 |
1703 int column = owner()->GetTableColumn(); | 1657 int column = GetTableColumn(); |
1704 int columns = owner()->GetTableColumnCount(); | 1658 int columns = GetTableColumnCount(); |
1705 int rows = owner()->GetTableRowCount(); | 1659 int rows = GetTableRowCount(); |
1706 if (columns <= 0 || rows <= 0 || column < 0 || column >= columns) | 1660 if (columns <= 0 || rows <= 0 || column < 0 || column >= columns) |
1707 return S_FALSE; | 1661 return S_FALSE; |
1708 | 1662 |
1709 for (int i = 0; i < rows; ++i) { | 1663 for (int i = 0; i < rows; ++i) { |
1710 BrowserAccessibility* cell = owner()->GetTableCell(i, column); | 1664 auto* cell = GetTableCell(i, column); |
1711 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) | 1665 if (cell && cell->GetData().role == ui::AX_ROLE_COLUMN_HEADER) |
1712 (*n_column_header_cells)++; | 1666 (*n_column_header_cells)++; |
1713 } | 1667 } |
1714 | 1668 |
1715 *cell_accessibles = static_cast<IUnknown**>( | 1669 *cell_accessibles = static_cast<IUnknown**>( |
1716 CoTaskMemAlloc((*n_column_header_cells) * sizeof(cell_accessibles[0]))); | 1670 CoTaskMemAlloc((*n_column_header_cells) * sizeof(cell_accessibles[0]))); |
1717 int index = 0; | 1671 int index = 0; |
1718 for (int i = 0; i < rows; ++i) { | 1672 for (int i = 0; i < rows; ++i) { |
1719 BrowserAccessibility* cell = owner()->GetTableCell(i, column); | 1673 AXPlatformNodeBase* cell = GetTableCell(i, column); |
1720 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) { | 1674 if (cell && cell->GetData().role == ui::AX_ROLE_COLUMN_HEADER) { |
1721 (*cell_accessibles)[index] = static_cast<IAccessible*>( | 1675 auto* node_win = static_cast<AXPlatformNodeWin*>(cell); |
1722 ToBrowserAccessibilityComWin(cell)->NewReference()); | 1676 node_win->AddRef(); |
| 1677 |
| 1678 (*cell_accessibles)[index] = static_cast<IAccessible*>(node_win); |
1723 ++index; | 1679 ++index; |
1724 } | 1680 } |
1725 } | 1681 } |
1726 | 1682 |
1727 return S_OK; | 1683 return S_OK; |
1728 } | 1684 } |
1729 | 1685 |
1730 STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long* column_index) { | 1686 STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long* column_index) { |
1731 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_COLUMN_INDEX); | 1687 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_COLUMN_INDEX); |
1732 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1688 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1733 if (!owner()) | 1689 if (!owner()) |
1734 return E_FAIL; | 1690 return E_FAIL; |
1735 | 1691 |
1736 if (!column_index) | 1692 if (!column_index) |
1737 return E_INVALIDARG; | 1693 return E_INVALIDARG; |
1738 | 1694 |
1739 *column_index = owner()->GetTableColumn(); | 1695 *column_index = GetTableColumn(); |
1740 return S_OK; | 1696 return S_OK; |
1741 } | 1697 } |
1742 | 1698 |
1743 STDMETHODIMP BrowserAccessibilityComWin::get_rowExtent(long* n_rows_spanned) { | 1699 STDMETHODIMP BrowserAccessibilityComWin::get_rowExtent(long* n_rows_spanned) { |
1744 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_EXTENT); | 1700 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_EXTENT); |
1745 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1701 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1746 if (!owner()) | 1702 if (!owner()) |
1747 return E_FAIL; | 1703 return E_FAIL; |
1748 | 1704 |
1749 if (!n_rows_spanned) | 1705 if (!n_rows_spanned) |
1750 return E_INVALIDARG; | 1706 return E_INVALIDARG; |
1751 | 1707 |
1752 *n_rows_spanned = owner()->GetTableRowSpan(); | 1708 *n_rows_spanned = GetTableRowSpan(); |
1753 return S_OK; | 1709 return S_OK; |
1754 } | 1710 } |
1755 | 1711 |
1756 STDMETHODIMP BrowserAccessibilityComWin::get_rowHeaderCells( | 1712 STDMETHODIMP BrowserAccessibilityComWin::get_rowHeaderCells( |
1757 IUnknown*** cell_accessibles, | 1713 IUnknown*** cell_accessibles, |
1758 long* n_row_header_cells) { | 1714 long* n_row_header_cells) { |
1759 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_HEADER_CELLS); | 1715 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_HEADER_CELLS); |
1760 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1716 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1761 if (!owner()) | 1717 if (!owner()) |
1762 return E_FAIL; | 1718 return E_FAIL; |
1763 | 1719 |
1764 if (!cell_accessibles || !n_row_header_cells) | 1720 if (!cell_accessibles || !n_row_header_cells) |
1765 return E_INVALIDARG; | 1721 return E_INVALIDARG; |
1766 | 1722 |
1767 *n_row_header_cells = 0; | 1723 *n_row_header_cells = 0; |
1768 BrowserAccessibility* table = owner()->GetTable(); | 1724 auto* table = GetTable(); |
1769 if (!table) { | 1725 if (!table) { |
1770 NOTREACHED(); | 1726 NOTREACHED(); |
1771 return S_FALSE; | 1727 return S_FALSE; |
1772 } | 1728 } |
1773 | 1729 |
1774 int row = owner()->GetTableRow(); | 1730 int row = GetTableRow(); |
1775 int columns = owner()->GetTableColumnCount(); | 1731 int columns = GetTableColumnCount(); |
1776 int rows = owner()->GetTableRowCount(); | 1732 int rows = GetTableRowCount(); |
1777 if (columns <= 0 || rows <= 0 || row < 0 || row >= rows) | 1733 if (columns <= 0 || rows <= 0 || row < 0 || row >= rows) |
1778 return S_FALSE; | 1734 return S_FALSE; |
1779 | 1735 |
1780 for (int i = 0; i < columns; ++i) { | 1736 for (int i = 0; i < columns; ++i) { |
1781 BrowserAccessibility* cell = owner()->GetTableCell(row, i); | 1737 auto* cell = GetTableCell(row, i); |
1782 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) | 1738 if (cell && cell->GetData().role == ui::AX_ROLE_ROW_HEADER) |
1783 (*n_row_header_cells)++; | 1739 (*n_row_header_cells)++; |
1784 } | 1740 } |
1785 | 1741 |
1786 *cell_accessibles = static_cast<IUnknown**>( | 1742 *cell_accessibles = static_cast<IUnknown**>( |
1787 CoTaskMemAlloc((*n_row_header_cells) * sizeof(cell_accessibles[0]))); | 1743 CoTaskMemAlloc((*n_row_header_cells) * sizeof(cell_accessibles[0]))); |
1788 int index = 0; | 1744 int index = 0; |
1789 for (int i = 0; i < columns; ++i) { | 1745 for (int i = 0; i < columns; ++i) { |
1790 BrowserAccessibility* cell = owner()->GetTableCell(row, i); | 1746 AXPlatformNodeBase* cell = GetTableCell(row, i); |
1791 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) { | 1747 if (cell && cell->GetData().role == ui::AX_ROLE_ROW_HEADER) { |
1792 (*cell_accessibles)[index] = static_cast<IAccessible*>( | 1748 auto* node_win = static_cast<AXPlatformNodeWin*>(cell); |
1793 ToBrowserAccessibilityComWin(cell)->NewReference()); | 1749 node_win->AddRef(); |
| 1750 |
| 1751 (*cell_accessibles)[index] = static_cast<IAccessible*>(node_win); |
1794 ++index; | 1752 ++index; |
1795 } | 1753 } |
1796 } | 1754 } |
1797 | 1755 |
1798 return S_OK; | 1756 return S_OK; |
1799 } | 1757 } |
1800 | 1758 |
1801 STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long* row_index) { | 1759 STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long* row_index) { |
1802 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_ROW_INDEX); | 1760 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_ROW_INDEX); |
1803 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1761 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1804 if (!owner()) | 1762 if (!owner()) |
1805 return E_FAIL; | 1763 return E_FAIL; |
1806 | 1764 |
1807 if (!row_index) | 1765 if (!row_index) |
1808 return E_INVALIDARG; | 1766 return E_INVALIDARG; |
1809 | 1767 |
1810 *row_index = owner()->GetTableRow(); | 1768 *row_index = GetTableRow(); |
1811 return S_OK; | 1769 return S_OK; |
1812 } | 1770 } |
1813 | 1771 |
1814 STDMETHODIMP BrowserAccessibilityComWin::get_isSelected(boolean* is_selected) { | 1772 STDMETHODIMP BrowserAccessibilityComWin::get_isSelected(boolean* is_selected) { |
1815 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_IS_SELECTED); | 1773 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_TABLECELL_GET_IS_SELECTED); |
1816 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1774 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1817 if (!owner()) | 1775 if (!owner()) |
1818 return E_FAIL; | 1776 return E_FAIL; |
1819 | 1777 |
1820 if (!is_selected) | 1778 if (!is_selected) |
(...skipping 12 matching lines...) Expand all Loading... |
1833 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_COLUMN_EXTENTS); | 1791 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ROW_COLUMN_EXTENTS); |
1834 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1792 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1835 if (!owner()) | 1793 if (!owner()) |
1836 return E_FAIL; | 1794 return E_FAIL; |
1837 | 1795 |
1838 if (!row_index || !column_index || !row_extents || !column_extents || | 1796 if (!row_index || !column_index || !row_extents || !column_extents || |
1839 !is_selected) { | 1797 !is_selected) { |
1840 return E_INVALIDARG; | 1798 return E_INVALIDARG; |
1841 } | 1799 } |
1842 | 1800 |
1843 *row_index = owner()->GetTableRow(); | 1801 *row_index = GetTableRow(); |
1844 *column_index = owner()->GetTableColumn(); | 1802 *column_index = GetTableColumn(); |
1845 *row_extents = owner()->GetTableRowSpan(); | 1803 *row_extents = GetTableRowSpan(); |
1846 *column_extents = owner()->GetTableColumnSpan(); | 1804 *column_extents = GetTableColumnSpan(); |
1847 *is_selected = false; // Not supported. | 1805 *is_selected = false; // Not supported. |
1848 | 1806 |
1849 return S_OK; | 1807 return S_OK; |
1850 } | 1808 } |
1851 | 1809 |
1852 STDMETHODIMP BrowserAccessibilityComWin::get_table(IUnknown** table) { | 1810 STDMETHODIMP BrowserAccessibilityComWin::get_table(IUnknown** table) { |
1853 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TABLE); | 1811 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TABLE); |
1854 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); | 1812 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); |
1855 if (!owner()) | 1813 if (!owner()) |
1856 return E_FAIL; | 1814 return E_FAIL; |
1857 | 1815 |
1858 if (!table) | 1816 if (!table) |
1859 return E_INVALIDARG; | 1817 return E_INVALIDARG; |
1860 | 1818 |
1861 BrowserAccessibility* find_table = owner()->GetTable(); | 1819 auto* find_table = GetTable(); |
1862 if (!find_table || !ToBrowserAccessibilityComWin(find_table)) { | 1820 if (!find_table) { |
1863 *table = nullptr; | 1821 *table = nullptr; |
1864 return S_FALSE; | 1822 return S_FALSE; |
1865 } | 1823 } |
1866 | 1824 |
1867 *table = static_cast<IAccessibleTable*>( | 1825 // The IAccessibleTable interface is still on the BrowserAccessibilityComWin |
1868 ToBrowserAccessibilityComWin(find_table)->NewReference()); | 1826 // class. |
| 1827 auto* node_win = static_cast<BrowserAccessibilityComWin*>(find_table); |
| 1828 node_win->AddRef(); |
| 1829 |
| 1830 *table = static_cast<IAccessibleTable*>(node_win); |
1869 return S_OK; | 1831 return S_OK; |
1870 } | 1832 } |
1871 | 1833 |
1872 // | 1834 // |
1873 // IAccessibleText methods. | 1835 // IAccessibleText methods. |
1874 // | 1836 // |
1875 | 1837 |
1876 STDMETHODIMP BrowserAccessibilityComWin::get_nCharacters(LONG* n_characters) { | 1838 STDMETHODIMP BrowserAccessibilityComWin::get_nCharacters(LONG* n_characters) { |
1877 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_CHARACTERS); | 1839 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_N_CHARACTERS); |
1878 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | | 1840 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | |
(...skipping 1743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3622 win_attributes_->ia2_attributes.push_back(L"current:date"); | 3584 win_attributes_->ia2_attributes.push_back(L"current:date"); |
3623 break; | 3585 break; |
3624 case ui::AX_ARIA_CURRENT_STATE_TIME: | 3586 case ui::AX_ARIA_CURRENT_STATE_TIME: |
3625 win_attributes_->ia2_attributes.push_back(L"current:time"); | 3587 win_attributes_->ia2_attributes.push_back(L"current:time"); |
3626 break; | 3588 break; |
3627 } | 3589 } |
3628 } | 3590 } |
3629 | 3591 |
3630 // Expose table cell index. | 3592 // Expose table cell index. |
3631 if (ui::IsCellOrTableHeaderRole(owner()->GetRole())) { | 3593 if (ui::IsCellOrTableHeaderRole(owner()->GetRole())) { |
3632 BrowserAccessibility* table = owner()->PlatformGetParent(); | 3594 BrowserAccessibilityWin* win_parent = |
3633 while (table && !ui::IsTableLikeRole(table->GetRole())) | 3595 static_cast<BrowserAccessibilityWin*>(owner()->PlatformGetParent()); |
3634 table = table->PlatformGetParent(); | 3596 AXPlatformNodeBase* table = win_parent->GetCOM(); |
| 3597 |
| 3598 while (table && !ui::IsTableLikeRole(table->GetData().role)) |
| 3599 table = FromNativeViewAccessible(table->GetParent()); |
| 3600 |
3635 if (table) { | 3601 if (table) { |
3636 const std::vector<int32_t>& unique_cell_ids = | 3602 const std::vector<int32_t>& unique_cell_ids = |
3637 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); | 3603 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); |
3638 for (size_t i = 0; i < unique_cell_ids.size(); ++i) { | 3604 for (size_t i = 0; i < unique_cell_ids.size(); ++i) { |
3639 if (unique_cell_ids[i] == owner()->GetId()) { | 3605 if (unique_cell_ids[i] == owner()->GetId()) { |
3640 win_attributes_->ia2_attributes.push_back( | 3606 win_attributes_->ia2_attributes.push_back( |
3641 base::string16(L"table-cell-index:") + base::IntToString16(i)); | 3607 base::string16(L"table-cell-index:") + base::IntToString16(i)); |
3642 } | 3608 } |
3643 } | 3609 } |
3644 } | 3610 } |
(...skipping 1765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5410 | 5376 |
5411 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( | 5377 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( |
5412 BrowserAccessibility* obj) { | 5378 BrowserAccessibility* obj) { |
5413 if (!obj || !obj->IsNative()) | 5379 if (!obj || !obj->IsNative()) |
5414 return nullptr; | 5380 return nullptr; |
5415 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); | 5381 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); |
5416 return result; | 5382 return result; |
5417 } | 5383 } |
5418 | 5384 |
5419 } // namespace content | 5385 } // namespace content |
OLD | NEW |