| 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 1744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3623 win_attributes_->ia2_attributes.push_back(L"current:date"); | 3585 win_attributes_->ia2_attributes.push_back(L"current:date"); |
| 3624 break; | 3586 break; |
| 3625 case ui::AX_ARIA_CURRENT_STATE_TIME: | 3587 case ui::AX_ARIA_CURRENT_STATE_TIME: |
| 3626 win_attributes_->ia2_attributes.push_back(L"current:time"); | 3588 win_attributes_->ia2_attributes.push_back(L"current:time"); |
| 3627 break; | 3589 break; |
| 3628 } | 3590 } |
| 3629 } | 3591 } |
| 3630 | 3592 |
| 3631 // Expose table cell index. | 3593 // Expose table cell index. |
| 3632 if (ui::IsCellOrTableHeaderRole(owner()->GetRole())) { | 3594 if (ui::IsCellOrTableHeaderRole(owner()->GetRole())) { |
| 3633 BrowserAccessibility* table = owner()->PlatformGetParent(); | 3595 BrowserAccessibilityWin* win_parent = |
| 3634 while (table && !ui::IsTableLikeRole(table->GetRole())) | 3596 static_cast<BrowserAccessibilityWin*>(owner()->PlatformGetParent()); |
| 3635 table = table->PlatformGetParent(); | 3597 AXPlatformNodeBase* table = win_parent->GetCOM(); |
| 3598 |
| 3599 while (table && !ui::IsTableLikeRole(table->GetData().role)) |
| 3600 table = FromNativeViewAccessible(table->GetParent()); |
| 3601 |
| 3636 if (table) { | 3602 if (table) { |
| 3637 const std::vector<int32_t>& unique_cell_ids = | 3603 const std::vector<int32_t>& unique_cell_ids = |
| 3638 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); | 3604 table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS); |
| 3639 for (size_t i = 0; i < unique_cell_ids.size(); ++i) { | 3605 for (size_t i = 0; i < unique_cell_ids.size(); ++i) { |
| 3640 if (unique_cell_ids[i] == owner()->GetId()) { | 3606 if (unique_cell_ids[i] == owner()->GetId()) { |
| 3641 win_attributes_->ia2_attributes.push_back( | 3607 win_attributes_->ia2_attributes.push_back( |
| 3642 base::string16(L"table-cell-index:") + base::IntToString16(i)); | 3608 base::string16(L"table-cell-index:") + base::IntToString16(i)); |
| 3643 } | 3609 } |
| 3644 } | 3610 } |
| 3645 } | 3611 } |
| (...skipping 1758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5404 | 5370 |
| 5405 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( | 5371 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( |
| 5406 BrowserAccessibility* obj) { | 5372 BrowserAccessibility* obj) { |
| 5407 if (!obj || !obj->IsNative()) | 5373 if (!obj || !obj->IsNative()) |
| 5408 return nullptr; | 5374 return nullptr; |
| 5409 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); | 5375 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); |
| 5410 return result; | 5376 return result; |
| 5411 } | 5377 } |
| 5412 | 5378 |
| 5413 } // namespace content | 5379 } // namespace content |
| OLD | NEW |