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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/accessibility/browser_accessibility_com_win.cc
diff --git a/content/browser/accessibility/browser_accessibility_com_win.cc b/content/browser/accessibility/browser_accessibility_com_win.cc
index 57ff9025055e2d8197325b35ee3124ff52c63c12..e6f9290cb3f0603cc55c4c7636f5bde73599e186 100644
--- a/content/browser/accessibility/browser_accessibility_com_win.cc
+++ b/content/browser/accessibility/browser_accessibility_com_win.cc
@@ -464,52 +464,7 @@ STDMETHODIMP BrowserAccessibilityComWin::accNavigate(LONG nav_dir,
if (!owner())
return E_FAIL;
- // Forward all non-spatial directions (e.g. NAVDIR_NEXT) to the platform node
- // implementation.
- if (nav_dir != NAVDIR_DOWN && nav_dir != NAVDIR_UP &&
- nav_dir != NAVDIR_LEFT && nav_dir != NAVDIR_RIGHT) {
- return AXPlatformNodeWin::accNavigate(nav_dir, start, end);
- }
-
- if (end) {
- end->vt = VT_EMPTY;
- } else {
- return E_INVALIDARG;
- }
-
- BrowserAccessibilityComWin* target = GetTargetFromChildID(start);
- if (!target)
- return E_INVALIDARG;
-
- BrowserAccessibility* result = nullptr;
- // Only handle spatial directions for tables here.
- switch (nav_dir) {
- case NAVDIR_DOWN:
- result = target->owner()->GetTableCell(
- owner()->GetTableRow() + owner()->GetTableRowSpan(),
- owner()->GetTableColumn());
- break;
- case NAVDIR_UP:
- result = target->owner()->GetTableCell(owner()->GetTableRow() - 1,
- owner()->GetTableColumn());
- break;
- case NAVDIR_LEFT:
- result = target->owner()->GetTableCell(owner()->GetTableRow(),
- owner()->GetTableColumn() - 1);
- break;
- case NAVDIR_RIGHT:
- result = target->owner()->GetTableCell(
- owner()->GetTableRow(),
- owner()->GetTableColumn() + owner()->GetTableColumnSpan());
- break;
- }
-
- if (!result)
- return S_FALSE;
-
- end->vt = VT_DISPATCH;
- end->pdispVal = ToBrowserAccessibilityComWin(result)->NewReference();
- return S_OK;
+ return AXPlatformNodeWin::accNavigate(nav_dir, start, end);
}
STDMETHODIMP BrowserAccessibilityComWin::get_accChild(VARIANT var_child,
@@ -1125,11 +1080,13 @@ STDMETHODIMP BrowserAccessibilityComWin::get_accessibleAt(
if (!accessible)
return E_INVALIDARG;
- BrowserAccessibility* cell =
- owner()->GetTableCell(static_cast<int>(row), static_cast<int>(column));
- if (cell && ToBrowserAccessibilityComWin(cell)) {
- *accessible = static_cast<IAccessible*>(
- ToBrowserAccessibilityComWin(cell)->NewReference());
+ AXPlatformNodeBase* cell =
+ GetTableCell(static_cast<int>(row), static_cast<int>(column));
+ if (cell) {
+ auto* node_win = static_cast<AXPlatformNodeWin*>(cell);
+ node_win->AddRef();
+
+ *accessible = static_cast<IAccessible*>(node_win);
return S_OK;
}
@@ -1162,8 +1119,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_childIndex(long row,
if (!cell_index)
return E_INVALIDARG;
- BrowserAccessibility* cell =
- owner()->GetTableCell(static_cast<int>(row), static_cast<int>(column));
+ auto* cell = GetTableCell(static_cast<int>(row), static_cast<int>(column));
if (cell) {
*cell_index = static_cast<LONG>(cell->GetTableCellIndex());
return S_OK;
@@ -1184,29 +1140,28 @@ STDMETHODIMP BrowserAccessibilityComWin::get_columnDescription(
if (!description)
return E_INVALIDARG;
- int columns = owner()->GetTableColumnCount();
+ int columns = GetTableColumnCount();
if (column < 0 || column >= columns)
return E_INVALIDARG;
- int rows = owner()->GetTableRowCount();
+ int rows = GetTableRowCount();
if (rows <= 0) {
*description = nullptr;
return S_FALSE;
}
for (int i = 0; i < rows; ++i) {
- BrowserAccessibility* cell = owner()->GetTableCell(i, column);
- if (ToBrowserAccessibilityComWin(cell) &&
- cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) {
+ auto* cell = GetTableCell(i, column);
+ if (cell && cell->GetData().role == ui::AX_ROLE_COLUMN_HEADER) {
base::string16 cell_name = cell->GetString16Attribute(ui::AX_ATTR_NAME);
if (cell_name.size() > 0) {
*description = SysAllocString(cell_name.c_str());
return S_OK;
}
- if (ToBrowserAccessibilityComWin(cell)->description().size() > 0) {
- *description = SysAllocString(
- ToBrowserAccessibilityComWin(cell)->description().c_str());
+ cell_name = cell->GetString16Attribute(ui::AX_ATTR_DESCRIPTION);
+ if (cell_name.size() > 0) {
+ *description = SysAllocString(cell_name.c_str());
return S_OK;
}
}
@@ -1228,8 +1183,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_columnExtentAt(
if (!n_columns_spanned)
return E_INVALIDARG;
- BrowserAccessibility* cell =
- owner()->GetTableCell(static_cast<int>(row), static_cast<int>(column));
+ auto* cell = GetTableCell(static_cast<int>(row), static_cast<int>(column));
if (!cell)
return E_INVALIDARG;
@@ -1256,7 +1210,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long cell_index,
if (!column_index)
return E_INVALIDARG;
- BrowserAccessibility* cell = owner()->GetTableCell(cell_index);
+ auto* cell = GetTableCell(cell_index);
if (!cell)
return E_INVALIDARG;
*column_index = cell->GetTableColumn();
@@ -1272,7 +1226,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_nColumns(long* column_count) {
if (!column_count)
return E_INVALIDARG;
- *column_count = owner()->GetTableColumnCount();
+ *column_count = GetTableColumnCount();
return S_OK;
}
@@ -1285,7 +1239,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_nRows(long* row_count) {
if (!row_count)
return E_INVALIDARG;
- *row_count = owner()->GetTableRowCount();
+ *row_count = GetTableRowCount();
return S_OK;
}
@@ -1341,28 +1295,26 @@ STDMETHODIMP BrowserAccessibilityComWin::get_rowDescription(long row,
if (!description)
return E_INVALIDARG;
- if (row < 0 || row >= owner()->GetTableRowCount())
+ if (row < 0 || row >= GetTableRowCount())
return E_INVALIDARG;
- int columns = owner()->GetTableColumnCount();
+ int columns = GetTableColumnCount();
if (columns <= 0) {
*description = nullptr;
return S_FALSE;
}
for (int i = 0; i < columns; ++i) {
- BrowserAccessibility* cell = owner()->GetTableCell(row, i);
- if (ToBrowserAccessibilityComWin(cell) &&
- cell->GetRole() == ui::AX_ROLE_ROW_HEADER) {
+ auto* cell = GetTableCell(row, i);
+ if (cell && cell->GetData().role == ui::AX_ROLE_ROW_HEADER) {
base::string16 cell_name = cell->GetString16Attribute(ui::AX_ATTR_NAME);
if (cell_name.size() > 0) {
*description = SysAllocString(cell_name.c_str());
return S_OK;
}
-
- if (ToBrowserAccessibilityComWin(cell)->description().size() > 0) {
- *description = SysAllocString(
- ToBrowserAccessibilityComWin(cell)->description().c_str());
+ cell_name = cell->GetString16Attribute(ui::AX_ATTR_DESCRIPTION);
+ if (cell_name.size() > 0) {
+ *description = SysAllocString(cell_name.c_str());
return S_OK;
}
}
@@ -1383,11 +1335,11 @@ STDMETHODIMP BrowserAccessibilityComWin::get_rowExtentAt(long row,
if (!n_rows_spanned)
return E_INVALIDARG;
- BrowserAccessibility* cell = owner()->GetTableCell(row, column);
+ auto* cell = GetTableCell(row, column);
if (!cell)
return E_INVALIDARG;
- *n_rows_spanned = owner()->GetTableRowSpan();
+ *n_rows_spanned = GetTableRowSpan();
return S_OK;
}
@@ -1410,7 +1362,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long cell_index,
if (!row_index)
return E_INVALIDARG;
- BrowserAccessibility* cell = owner()->GetTableCell(cell_index);
+ auto* cell = GetTableCell(cell_index);
if (!cell)
return E_INVALIDARG;
@@ -1544,14 +1496,14 @@ STDMETHODIMP BrowserAccessibilityComWin::get_rowColumnExtentsAtIndex(
if (!row || !column || !row_extents || !column_extents || !is_selected)
return E_INVALIDARG;
- BrowserAccessibility* cell = owner()->GetTableCell(index);
+ auto* cell = GetTableCell(index);
if (!cell)
return E_INVALIDARG;
*row = cell->GetTableRow();
*column = cell->GetTableColumn();
- *row_extents = owner()->GetTableRowSpan();
- *column_extents = owner()->GetTableColumnSpan();
+ *row_extents = GetTableRowSpan();
+ *column_extents = GetTableColumnSpan();
*is_selected = false; // Not supported.
return S_OK;
@@ -1601,11 +1553,13 @@ STDMETHODIMP BrowserAccessibilityComWin::get_cellAt(long row,
if (!cell)
return E_INVALIDARG;
- BrowserAccessibility* table_cell =
- owner()->GetTableCell(static_cast<int>(row), static_cast<int>(column));
- if (ToBrowserAccessibilityComWin(table_cell)) {
- return ToBrowserAccessibilityComWin(table_cell)
- ->QueryInterface(IID_IUnknown, reinterpret_cast<void**>(cell));
+ AXPlatformNodeBase* table_cell =
+ GetTableCell(static_cast<int>(row), static_cast<int>(column));
+ if (table_cell) {
+ auto* node_win = static_cast<AXPlatformNodeWin*>(table_cell);
+ node_win->AddRef();
+ *cell = static_cast<IAccessible*>(node_win);
+ return S_OK;
}
*cell = nullptr;
@@ -1678,7 +1632,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_columnExtent(
if (!n_columns_spanned)
return E_INVALIDARG;
- *n_columns_spanned = owner()->GetTableColumnSpan();
+ *n_columns_spanned = GetTableColumnSpan();
return S_OK;
}
@@ -1694,21 +1648,21 @@ STDMETHODIMP BrowserAccessibilityComWin::get_columnHeaderCells(
return E_INVALIDARG;
*n_column_header_cells = 0;
- BrowserAccessibility* table = owner()->GetTable();
+ auto* table = GetTable();
if (!table) {
NOTREACHED();
return S_FALSE;
}
- int column = owner()->GetTableColumn();
- int columns = owner()->GetTableColumnCount();
- int rows = owner()->GetTableRowCount();
+ int column = GetTableColumn();
+ int columns = GetTableColumnCount();
+ int rows = GetTableRowCount();
if (columns <= 0 || rows <= 0 || column < 0 || column >= columns)
return S_FALSE;
for (int i = 0; i < rows; ++i) {
- BrowserAccessibility* cell = owner()->GetTableCell(i, column);
- if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER)
+ auto* cell = GetTableCell(i, column);
+ if (cell && cell->GetData().role == ui::AX_ROLE_COLUMN_HEADER)
(*n_column_header_cells)++;
}
@@ -1716,10 +1670,12 @@ STDMETHODIMP BrowserAccessibilityComWin::get_columnHeaderCells(
CoTaskMemAlloc((*n_column_header_cells) * sizeof(cell_accessibles[0])));
int index = 0;
for (int i = 0; i < rows; ++i) {
- BrowserAccessibility* cell = owner()->GetTableCell(i, column);
- if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) {
- (*cell_accessibles)[index] = static_cast<IAccessible*>(
- ToBrowserAccessibilityComWin(cell)->NewReference());
+ AXPlatformNodeBase* cell = GetTableCell(i, column);
+ if (cell && cell->GetData().role == ui::AX_ROLE_COLUMN_HEADER) {
+ auto* node_win = static_cast<AXPlatformNodeWin*>(cell);
+ node_win->AddRef();
+
+ (*cell_accessibles)[index] = static_cast<IAccessible*>(node_win);
++index;
}
}
@@ -1736,7 +1692,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_columnIndex(long* column_index) {
if (!column_index)
return E_INVALIDARG;
- *column_index = owner()->GetTableColumn();
+ *column_index = GetTableColumn();
return S_OK;
}
@@ -1749,7 +1705,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_rowExtent(long* n_rows_spanned) {
if (!n_rows_spanned)
return E_INVALIDARG;
- *n_rows_spanned = owner()->GetTableRowSpan();
+ *n_rows_spanned = GetTableRowSpan();
return S_OK;
}
@@ -1765,21 +1721,21 @@ STDMETHODIMP BrowserAccessibilityComWin::get_rowHeaderCells(
return E_INVALIDARG;
*n_row_header_cells = 0;
- BrowserAccessibility* table = owner()->GetTable();
+ auto* table = GetTable();
if (!table) {
NOTREACHED();
return S_FALSE;
}
- int row = owner()->GetTableRow();
- int columns = owner()->GetTableColumnCount();
- int rows = owner()->GetTableRowCount();
+ int row = GetTableRow();
+ int columns = GetTableColumnCount();
+ int rows = GetTableRowCount();
if (columns <= 0 || rows <= 0 || row < 0 || row >= rows)
return S_FALSE;
for (int i = 0; i < columns; ++i) {
- BrowserAccessibility* cell = owner()->GetTableCell(row, i);
- if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER)
+ auto* cell = GetTableCell(row, i);
+ if (cell && cell->GetData().role == ui::AX_ROLE_ROW_HEADER)
(*n_row_header_cells)++;
}
@@ -1787,10 +1743,12 @@ STDMETHODIMP BrowserAccessibilityComWin::get_rowHeaderCells(
CoTaskMemAlloc((*n_row_header_cells) * sizeof(cell_accessibles[0])));
int index = 0;
for (int i = 0; i < columns; ++i) {
- BrowserAccessibility* cell = owner()->GetTableCell(row, i);
- if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) {
- (*cell_accessibles)[index] = static_cast<IAccessible*>(
- ToBrowserAccessibilityComWin(cell)->NewReference());
+ AXPlatformNodeBase* cell = GetTableCell(row, i);
+ if (cell && cell->GetData().role == ui::AX_ROLE_ROW_HEADER) {
+ auto* node_win = static_cast<AXPlatformNodeWin*>(cell);
+ node_win->AddRef();
+
+ (*cell_accessibles)[index] = static_cast<IAccessible*>(node_win);
++index;
}
}
@@ -1807,7 +1765,7 @@ STDMETHODIMP BrowserAccessibilityComWin::get_rowIndex(long* row_index) {
if (!row_index)
return E_INVALIDARG;
- *row_index = owner()->GetTableRow();
+ *row_index = GetTableRow();
return S_OK;
}
@@ -1840,10 +1798,10 @@ STDMETHODIMP BrowserAccessibilityComWin::get_rowColumnExtents(
return E_INVALIDARG;
}
- *row_index = owner()->GetTableRow();
- *column_index = owner()->GetTableColumn();
- *row_extents = owner()->GetTableRowSpan();
- *column_extents = owner()->GetTableColumnSpan();
+ *row_index = GetTableRow();
+ *column_index = GetTableColumn();
+ *row_extents = GetTableRowSpan();
+ *column_extents = GetTableColumnSpan();
*is_selected = false; // Not supported.
return S_OK;
@@ -1858,14 +1816,18 @@ STDMETHODIMP BrowserAccessibilityComWin::get_table(IUnknown** table) {
if (!table)
return E_INVALIDARG;
- BrowserAccessibility* find_table = owner()->GetTable();
- if (!find_table || !ToBrowserAccessibilityComWin(find_table)) {
+ auto* find_table = GetTable();
+ if (!find_table) {
*table = nullptr;
return S_FALSE;
}
- *table = static_cast<IAccessibleTable*>(
- ToBrowserAccessibilityComWin(find_table)->NewReference());
+ // The IAccessibleTable interface is still on the BrowserAccessibilityComWin
+ // class.
+ auto* node_win = static_cast<BrowserAccessibilityComWin*>(find_table);
+ node_win->AddRef();
+
+ *table = static_cast<IAccessibleTable*>(node_win);
return S_OK;
}
@@ -3629,9 +3591,13 @@ void BrowserAccessibilityComWin::UpdateStep1ComputeWinAttributes() {
// Expose table cell index.
if (ui::IsCellOrTableHeaderRole(owner()->GetRole())) {
- BrowserAccessibility* table = owner()->PlatformGetParent();
- while (table && !ui::IsTableLikeRole(table->GetRole()))
- table = table->PlatformGetParent();
+ BrowserAccessibilityWin* win_parent =
+ static_cast<BrowserAccessibilityWin*>(owner()->PlatformGetParent());
+ AXPlatformNodeBase* table = win_parent->GetCOM();
+
+ while (table && !ui::IsTableLikeRole(table->GetData().role))
+ table = FromNativeViewAccessible(table->GetParent());
+
if (table) {
const std::vector<int32_t>& unique_cell_ids =
table->GetIntListAttribute(ui::AX_ATTR_UNIQUE_CELL_IDS);
« 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