mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 23:35:34 +00:00
Bug 747219 - decomtaminate GetCellAt() on accessible tables, r=tbsaunde, f=surkov
This commit is contained in:
parent
b25b771f56
commit
e3962f8a5a
@ -80,24 +80,14 @@ ARIAGridAccessible::RowCount()
|
||||
return rowCount;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
ARIAGridAccessible::GetCellAt(PRInt32 aRowIndex, PRInt32 aColumnIndex,
|
||||
nsIAccessible** aCell)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aCell);
|
||||
*aCell = nsnull;
|
||||
nsAccessible*
|
||||
ARIAGridAccessible::CellAt(PRUint32 aRowIndex, PRUint32 aColumnIndex)
|
||||
{
|
||||
nsAccessible* row = GetRowAt(aRowIndex);
|
||||
if (!row)
|
||||
return nsnull;
|
||||
|
||||
if (IsDefunct())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsAccessible *row = GetRowAt(aRowIndex);
|
||||
NS_ENSURE_ARG(row);
|
||||
|
||||
nsAccessible *cell = GetCellInRowAt(row, aColumnIndex);
|
||||
NS_ENSURE_ARG(cell);
|
||||
|
||||
NS_ADDREF(*aCell = cell);
|
||||
return NS_OK;
|
||||
return GetCellInRowAt(row, aColumnIndex);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -41,6 +41,7 @@ public:
|
||||
// TableAccessible
|
||||
virtual PRUint32 ColCount();
|
||||
virtual PRUint32 RowCount();
|
||||
virtual nsAccessible* CellAt(PRUint32 aRowIndex, PRUint32 aColumnIndex);
|
||||
virtual void UnselectCol(PRUint32 aColIdx);
|
||||
virtual void UnselectRow(PRUint32 aRowIdx);
|
||||
|
||||
|
@ -842,28 +842,23 @@ nsHTMLTableAccessible::GetSelectedRowIndices(PRUint32 *aNumRows,
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLTableAccessible::GetCellAt(PRInt32 aRow, PRInt32 aColumn,
|
||||
nsIAccessible **aTableCellAccessible)
|
||||
{
|
||||
nsAccessible*
|
||||
nsHTMLTableAccessible::CellAt(PRUint32 aRowIndex, PRUint32 aColumnIndex)
|
||||
{
|
||||
nsCOMPtr<nsIDOMElement> cellElement;
|
||||
nsresult rv = GetCellAt(aRow, aColumn, *getter_AddRefs(cellElement));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
GetCellAt(aRowIndex, aColumnIndex, *getter_AddRefs(cellElement));
|
||||
if (!cellElement)
|
||||
return nsnull;
|
||||
|
||||
nsCOMPtr<nsIContent> cellContent(do_QueryInterface(cellElement));
|
||||
if (!cellContent)
|
||||
return nsnull;
|
||||
|
||||
nsAccessible* cell = mDoc->GetAccessible(cellContent);
|
||||
|
||||
if (!cell) {
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
if (cell != this) {
|
||||
// XXX bug 576838: crazy tables (like table6 in tables/test_table2.html) may
|
||||
// return itself as a cell what makes Orca hang.
|
||||
NS_ADDREF(*aTableCellAccessible = cell);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
// XXX bug 576838: crazy tables (like table6 in tables/test_table2.html) may
|
||||
// return itself as a cell what makes Orca hang.
|
||||
return cell == this ? nsnull : cell;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
|
@ -99,6 +99,7 @@ public:
|
||||
virtual void Summary(nsString& aSummary);
|
||||
virtual PRUint32 ColCount();
|
||||
virtual PRUint32 RowCount();
|
||||
virtual nsAccessible* CellAt(PRUint32 aRowIndex, PRUint32 aColumnIndex);
|
||||
virtual PRInt32 CellIndexAt(PRUint32 aRowIdx, PRUint32 aColIdx);
|
||||
virtual void UnselectCol(PRUint32 aColIdx);
|
||||
virtual void UnselectRow(PRUint32 aRowIdx);
|
||||
|
@ -47,6 +47,24 @@ xpcAccessibleTable::GetRowCount(PRInt32* aRowCount)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
xpcAccessibleTable::GetCellAt(PRInt32 aRowIndex, PRInt32 aColumnIndex,
|
||||
nsIAccessible** aCell)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aCell);
|
||||
*aCell = nsnull;
|
||||
|
||||
if (!mTable)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
if (aRowIndex < 0 || aRowIndex >= mTable->RowCount() ||
|
||||
aColumnIndex < 0 || aColumnIndex >= mTable->ColCount())
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
|
||||
NS_IF_ADDREF(*aCell = mTable->CellAt(aRowIndex, aColumnIndex));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
xpcAccessibleTable::GetCellIndexAt(PRInt32 aRowIndex, PRInt32 aColumnIndex,
|
||||
PRInt32* aCellIndex)
|
||||
|
@ -26,6 +26,8 @@ public:
|
||||
nsresult GetSummary(nsAString& aSummary);
|
||||
nsresult GetColumnCount(PRInt32* aColumnCount);
|
||||
nsresult GetRowCount(PRInt32* aRowCount);
|
||||
nsresult GetCellAt(PRInt32 aRowIndex, PRInt32 aColumnIndex,
|
||||
nsIAccessible** aCell);
|
||||
nsresult GetCellIndexAt(PRInt32 aRowIndex, PRInt32 aColumnIndex,
|
||||
PRInt32* aCellIndex);
|
||||
nsresult UnselectColumn(PRInt32 aColIdx);
|
||||
@ -45,7 +47,8 @@ protected:
|
||||
{ return xpcAccessibleTable::GetColumnCount(aColumnCount); } \
|
||||
NS_SCRIPTABLE NS_IMETHOD GetRowCount(PRInt32* aRowCount) \
|
||||
{ return xpcAccessibleTable::GetRowCount(aRowCount); } \
|
||||
NS_SCRIPTABLE NS_IMETHOD GetCellAt(PRInt32 rowIndex, PRInt32 columnIndex, nsIAccessible * *_retval NS_OUTPARAM); \
|
||||
NS_SCRIPTABLE NS_IMETHOD GetCellAt(PRInt32 rowIndex, PRInt32 columnIndex, nsIAccessible** _retval NS_OUTPARAM) \
|
||||
{ return xpcAccessibleTable::GetCellAt(rowIndex, columnIndex, _retval); } \
|
||||
NS_SCRIPTABLE NS_IMETHOD GetCellIndexAt(PRInt32 rowIndex, PRInt32 columnIndex, PRInt32 *_retval NS_OUTPARAM) \
|
||||
{ return xpcAccessibleTable::GetCellIndexAt(rowIndex, columnIndex, _retval); } \
|
||||
NS_SCRIPTABLE NS_IMETHOD GetColumnIndexAt(PRInt32 cellIndex, PRInt32 *_retval NS_OUTPARAM); \
|
||||
|
@ -244,32 +244,26 @@ nsXULListboxAccessible::RowCount()
|
||||
return itemCount;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULListboxAccessible::GetCellAt(PRInt32 aRow, PRInt32 aColumn,
|
||||
nsIAccessible **aAccessibleCell)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aAccessibleCell);
|
||||
*aAccessibleCell = nsnull;
|
||||
|
||||
if (IsDefunct())
|
||||
return NS_OK;
|
||||
|
||||
nsAccessible*
|
||||
nsXULListboxAccessible::CellAt(PRUint32 aRowIndex, PRUint32 aColumnIndex)
|
||||
{
|
||||
nsCOMPtr<nsIDOMXULSelectControlElement> control =
|
||||
do_QueryInterface(mContent);
|
||||
NS_ENSURE_TRUE(control, nsnull);
|
||||
|
||||
nsCOMPtr<nsIDOMXULSelectControlItemElement> item;
|
||||
control->GetItemAtIndex(aRow, getter_AddRefs(item));
|
||||
NS_ENSURE_TRUE(item, NS_ERROR_INVALID_ARG);
|
||||
control->GetItemAtIndex(aRowIndex, getter_AddRefs(item));
|
||||
if (!item)
|
||||
return nsnull;
|
||||
|
||||
nsCOMPtr<nsIContent> itemContent(do_QueryInterface(item));
|
||||
NS_ENSURE_TRUE(mDoc, NS_ERROR_FAILURE);
|
||||
nsAccessible *row = mDoc->GetAccessible(itemContent);
|
||||
NS_ENSURE_STATE(row);
|
||||
if (!itemContent)
|
||||
return nsnull;
|
||||
|
||||
nsresult rv = row->GetChildAt(aColumn, aAccessibleCell);
|
||||
NS_ENSURE_SUCCESS(rv, NS_ERROR_INVALID_ARG);
|
||||
nsAccessible* row = mDoc->GetAccessible(itemContent);
|
||||
NS_ENSURE_TRUE(row, nsnull);
|
||||
|
||||
return NS_OK;
|
||||
return row->GetChildAt(aColumnIndex);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -72,6 +72,7 @@ public:
|
||||
// TableAccessible
|
||||
virtual PRUint32 ColCount();
|
||||
virtual PRUint32 RowCount();
|
||||
virtual nsAccessible* CellAt(PRUint32 aRowIndex, PRUint32 aColumnIndex);
|
||||
virtual void UnselectRow(PRUint32 aRowIdx);
|
||||
|
||||
// nsAccessNode
|
||||
|
@ -298,29 +298,23 @@ nsXULTreeGridAccessible::GetSelectedRowIndices(PRUint32 *arowCount,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULTreeGridAccessible::GetCellAt(PRInt32 aRowIndex, PRInt32 aColumnIndex,
|
||||
nsIAccessible **aCell)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aCell);
|
||||
*aCell = nsnull;
|
||||
|
||||
if (IsDefunct())
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsAccessible *rowAccessible = GetTreeItemAccessible(aRowIndex);
|
||||
if (!rowAccessible)
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
nsAccessible*
|
||||
nsXULTreeGridAccessible::CellAt(PRUint32 aRowIndex, PRUint32 aColumnIndex)
|
||||
{
|
||||
nsAccessible* row = GetTreeItemAccessible(aRowIndex);
|
||||
if (!row)
|
||||
return nsnull;
|
||||
|
||||
nsCOMPtr<nsITreeColumn> column =
|
||||
nsCoreUtils::GetSensibleColumnAt(mTree, aColumnIndex);
|
||||
nsCoreUtils::GetSensibleColumnAt(mTree, aColumnIndex);
|
||||
if (!column)
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
return nsnull;
|
||||
|
||||
nsRefPtr<nsXULTreeItemAccessibleBase> rowAcc = do_QueryObject(rowAccessible);
|
||||
nsRefPtr<nsXULTreeItemAccessibleBase> rowAcc = do_QueryObject(row);
|
||||
if (!rowAcc)
|
||||
return nsnull;
|
||||
|
||||
NS_IF_ADDREF(*aCell = rowAcc->GetCellAccessible(column));
|
||||
return NS_OK;
|
||||
return rowAcc->GetCellAccessible(column);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -30,6 +30,7 @@ public:
|
||||
// TableAccessible
|
||||
virtual PRUint32 ColCount();
|
||||
virtual PRUint32 RowCount();
|
||||
virtual nsAccessible* CellAt(PRUint32 aRowIndex, PRUint32 aColumnIndex);
|
||||
virtual void UnselectRow(PRUint32 aRowIdx);
|
||||
|
||||
// nsAccessNode
|
||||
|
Loading…
Reference in New Issue
Block a user