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

Side by Side Diff: content/browser/accessibility/browser_accessibility_com_win.cc

Issue 2964313002: Converts accNavigate over to the AXPlatformNode code. (Closed)
Patch Set: are -> is Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/accessibility/browser_accessibility.cc ('k') | content/browser/accessibility/browser_accessibility_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698