diff --git a/mozilla/accessible/src/html/nsHTMLTableAccessible.cpp b/mozilla/accessible/src/html/nsHTMLTableAccessible.cpp index 8d677f51233..fb5b9011349 100644 --- a/mozilla/accessible/src/html/nsHTMLTableAccessible.cpp +++ b/mozilla/accessible/src/html/nsHTMLTableAccessible.cpp @@ -58,6 +58,7 @@ #include "nsIServiceManager.h" #include "nsITableLayout.h" #include "nsITableCellLayout.h" +#include "nsLayoutErrors.h" NS_IMPL_ISUPPORTS_INHERITED0(nsHTMLTableCellAccessible, nsHyperTextAccessible) @@ -662,11 +663,15 @@ nsHTMLTableAccessible::IsRowSelected(PRInt32 aRow, PRBool *_retval) NS_IMETHODIMP nsHTMLTableAccessible::IsCellSelected(PRInt32 aRow, PRInt32 aColumn, - PRBool *_retval) + PRBool *aIsSelected) { - NS_ENSURE_TRUE(IsValidRow(aRow) && IsValidColumn(aColumn), NS_ERROR_INVALID_ARG); + NS_ENSURE_ARG_POINTER(aIsSelected); + *aIsSelected = PR_FALSE; - nsITableLayout *tableLayout; + NS_ENSURE_TRUE(IsValidRow(aRow) && IsValidColumn(aColumn), + NS_ERROR_INVALID_ARG); + + nsITableLayout *tableLayout = nsnull; nsresult rv = GetTableLayout(&tableLayout); NS_ENSURE_SUCCESS(rv, rv); @@ -674,11 +679,14 @@ nsHTMLTableAccessible::IsCellSelected(PRInt32 aRow, PRInt32 aColumn, PRInt32 startRowIndex = 0, startColIndex = 0, rowSpan, colSpan, actualRowSpan, actualColSpan; - return tableLayout->GetCellDataAt(aRow, aColumn, - *getter_AddRefs(domElement), - startRowIndex, startColIndex, rowSpan, - colSpan, actualRowSpan, actualColSpan, - *_retval); + rv = tableLayout->GetCellDataAt(aRow, aColumn, *getter_AddRefs(domElement), + startRowIndex, startColIndex, + rowSpan, colSpan, + actualRowSpan, actualColSpan, *aIsSelected); + + if (rv == NS_TABLELAYOUT_CELL_NOT_FOUND) + return NS_ERROR_INVALID_ARG; + return rv; } PRBool @@ -867,15 +875,18 @@ nsHTMLTableAccessible::GetCellAt(PRInt32 aRowIndex, rowSpan, colSpan, actualRowSpan, actualColSpan; PRBool isSelected; - nsITableLayout *tableLayout; + nsITableLayout *tableLayout = nsnull; nsresult rv = GetTableLayout(&tableLayout); NS_ENSURE_SUCCESS(rv, rv); - return tableLayout->GetCellDataAt(aRowIndex, aColIndex, aCell, - startRowIndex, startColIndex, - rowSpan, colSpan, - actualRowSpan, actualColSpan, - isSelected); + rv = tableLayout->GetCellDataAt(aRowIndex, aColIndex, aCell, + startRowIndex, startColIndex, + rowSpan, colSpan, + actualRowSpan, actualColSpan, isSelected); + + if (rv == NS_TABLELAYOUT_CELL_NOT_FOUND) + return NS_ERROR_INVALID_ARG; + return rv; } NS_IMETHODIMP nsHTMLTableAccessible::GetDescription(nsAString& aDescription) @@ -1030,7 +1041,9 @@ NS_IMETHODIMP nsHTMLTableAccessible::IsProbablyForLayout(PRBool *aIsProbablyForL // Check to see if there are visible borders on the cells // XXX currently, we just check the first cell -- do we really need to do more? nsCOMPtr cellElement; - GetCellAt(0, 0, *getter_AddRefs(cellElement)); + nsresult rv = GetCellAt(0, 0, *getter_AddRefs(cellElement)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + nsCOMPtr cellContent(do_QueryInterface(cellElement)); NS_ENSURE_TRUE(cellContent, NS_ERROR_FAILURE); nsCOMPtr shell(GetPresShell()); diff --git a/mozilla/accessible/tests/mochitest/test_nsIAccessibleTable_2.html b/mozilla/accessible/tests/mochitest/test_nsIAccessibleTable_2.html index f7b3b195634..b6642f72f9b 100644 --- a/mozilla/accessible/tests/mochitest/test_nsIAccessibleTable_2.html +++ b/mozilla/accessible/tests/mochitest/test_nsIAccessibleTable_2.html @@ -12,10 +12,11 @@ function doTest() { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - var table = document.getElementById("table"); var accService = Components.classes["@mozilla.org/accessibleRetrieval;1"]. getService(Components.interfaces.nsIAccessibleRetrieval); + // bug 410052 + var table = document.getElementById("table"); var accTable = accService.getAccessibleFor(table). QueryInterface(Components.interfaces.nsIAccessibleTable); @@ -29,15 +30,45 @@ function doTest() is(accTable.getRowExtentAt(2,7), 4,"rowspan wrong"); is(accTable.getColumnExtentAt(2,3), 1, "colspan wrong"); is(accTable.cellRefAt(2,1).firstChild.name, "c1", "wrong cell"); + + // bug 417912 + var table2 = document.getElementById("table2"); + var accTable2 = accService.getAccessibleFor(table2). + QueryInterface(Components.interfaces.nsIAccessibleTable); + testCellAt(accTable2, 0, 0, true); + testCellAt(accTable2, 0, 1, true); + testCellAt(accTable2, 0, 2, true); + testCellAt(accTable2, 1, 0, true); + testCellAt(accTable2, 1, 1, false); + testCellAt(accTable2, 1, 2, true); + testCellAt(accTable2, 2, 0, true); + testCellAt(accTable2, 2, 1, true); + testCellAt(accTable2, 2, 2, true); + SimpleTest.finish(); } +function testCellAt(aTable, aRow, aColumn, aSucceeded) +{ + try { + aTable.cellRefAt(aRow, aColumn); + ok(aSucceeded, "cell is available at (" + aRow + ", " + aColumn + ")."); + } catch (e) { + ok(!aSucceeded, "cell is not available at (" + aRow + ", " + aColumn + ")."); + } +} + SimpleTest.waitForExplicitFinish(); addLoadEvent(doTest); Mozilla Bug 410052 +
+ + Mozilla Bug 417912 +

@@ -83,5 +114,14 @@ addLoadEvent(doTest);
     
    
   
+
+  

Testing Table 2:

+
+ + + + +
123
4
56
+