mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1173364 - support ARIA table and cell roles, r=marcoz
This commit is contained in:
parent
8a733c36ef
commit
83716711a3
@ -98,6 +98,16 @@ static nsRoleMapEntry sWAIRoleMaps[] =
|
||||
kNoReqStates
|
||||
// eARIAPressed is auto applied on any button
|
||||
},
|
||||
{ // cell
|
||||
&nsGkAtoms::cell,
|
||||
roles::CELL,
|
||||
kUseMapRole,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
eNoLiveAttr,
|
||||
eTableCell,
|
||||
kNoReqStates
|
||||
},
|
||||
{ // checkbox
|
||||
&nsGkAtoms::checkbox,
|
||||
roles::CHECKBUTTON,
|
||||
@ -631,6 +641,17 @@ static nsRoleMapEntry sWAIRoleMaps[] =
|
||||
kNoReqStates,
|
||||
eARIASelectable
|
||||
},
|
||||
{ // table
|
||||
&nsGkAtoms::table,
|
||||
roles::TABLE,
|
||||
kUseMapRole,
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
eNoLiveAttr,
|
||||
eTable,
|
||||
kNoReqStates,
|
||||
eARIASelectable
|
||||
},
|
||||
{ // tablist
|
||||
&nsGkAtoms::tablist,
|
||||
roles::PAGETABLIST,
|
||||
|
@ -48,8 +48,9 @@ uint32_t
|
||||
filters::GetCell(Accessible* aAccessible)
|
||||
{
|
||||
a11y::role role = aAccessible->Role();
|
||||
return role == roles::GRID_CELL || role == roles::ROWHEADER ||
|
||||
role == roles::COLUMNHEADER ? eMatch : eSkipSubtree;
|
||||
return role == roles::CELL || role == roles::GRID_CELL ||
|
||||
role == roles::ROWHEADER || role == roles::COLUMNHEADER ?
|
||||
eMatch : eSkipSubtree;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
|
@ -68,7 +68,7 @@ ARIAGridAccessible::RowCount()
|
||||
|
||||
Accessible*
|
||||
ARIAGridAccessible::CellAt(uint32_t aRowIndex, uint32_t aColumnIndex)
|
||||
{
|
||||
{
|
||||
Accessible* row = GetRowAt(aRowIndex);
|
||||
if (!row)
|
||||
return nullptr;
|
||||
@ -79,6 +79,9 @@ ARIAGridAccessible::CellAt(uint32_t aRowIndex, uint32_t aColumnIndex)
|
||||
bool
|
||||
ARIAGridAccessible::IsColSelected(uint32_t aColIdx)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return false;
|
||||
|
||||
AccIterator rowIter(this, filters::GetRow);
|
||||
Accessible* row = rowIter.Next();
|
||||
if (!row)
|
||||
@ -98,6 +101,9 @@ ARIAGridAccessible::IsColSelected(uint32_t aColIdx)
|
||||
bool
|
||||
ARIAGridAccessible::IsRowSelected(uint32_t aRowIdx)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return false;
|
||||
|
||||
Accessible* row = GetRowAt(aRowIdx);
|
||||
if(!row)
|
||||
return false;
|
||||
@ -117,6 +123,9 @@ ARIAGridAccessible::IsRowSelected(uint32_t aRowIdx)
|
||||
bool
|
||||
ARIAGridAccessible::IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return false;
|
||||
|
||||
Accessible* row = GetRowAt(aRowIdx);
|
||||
if(!row)
|
||||
return false;
|
||||
@ -133,6 +142,9 @@ ARIAGridAccessible::IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx)
|
||||
uint32_t
|
||||
ARIAGridAccessible::SelectedCellCount()
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return 0;
|
||||
|
||||
uint32_t count = 0, colCount = ColCount();
|
||||
|
||||
AccIterator rowIter(this, filters::GetRow);
|
||||
@ -159,6 +171,9 @@ ARIAGridAccessible::SelectedCellCount()
|
||||
uint32_t
|
||||
ARIAGridAccessible::SelectedColCount()
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return 0;
|
||||
|
||||
uint32_t colCount = ColCount();
|
||||
if (!colCount)
|
||||
return 0;
|
||||
@ -193,6 +208,9 @@ ARIAGridAccessible::SelectedColCount()
|
||||
uint32_t
|
||||
ARIAGridAccessible::SelectedRowCount()
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return 0;
|
||||
|
||||
uint32_t count = 0;
|
||||
|
||||
AccIterator rowIter(this, filters::GetRow);
|
||||
@ -227,6 +245,9 @@ ARIAGridAccessible::SelectedRowCount()
|
||||
void
|
||||
ARIAGridAccessible::SelectedCells(nsTArray<Accessible*>* aCells)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return;
|
||||
|
||||
AccIterator rowIter(this, filters::GetRow);
|
||||
|
||||
Accessible* row = nullptr;
|
||||
@ -251,6 +272,9 @@ ARIAGridAccessible::SelectedCells(nsTArray<Accessible*>* aCells)
|
||||
void
|
||||
ARIAGridAccessible::SelectedCellIndices(nsTArray<uint32_t>* aCells)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return;
|
||||
|
||||
uint32_t colCount = ColCount();
|
||||
|
||||
AccIterator rowIter(this, filters::GetRow);
|
||||
@ -275,6 +299,9 @@ ARIAGridAccessible::SelectedCellIndices(nsTArray<uint32_t>* aCells)
|
||||
void
|
||||
ARIAGridAccessible::SelectedColIndices(nsTArray<uint32_t>* aCols)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return;
|
||||
|
||||
uint32_t colCount = ColCount();
|
||||
if (!colCount)
|
||||
return;
|
||||
@ -309,6 +336,9 @@ ARIAGridAccessible::SelectedColIndices(nsTArray<uint32_t>* aCols)
|
||||
void
|
||||
ARIAGridAccessible::SelectedRowIndices(nsTArray<uint32_t>* aRows)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return;
|
||||
|
||||
AccIterator rowIter(this, filters::GetRow);
|
||||
Accessible* row = nullptr;
|
||||
for (uint32_t rowIdx = 0; (row = rowIter.Next()); rowIdx++) {
|
||||
@ -338,6 +368,9 @@ ARIAGridAccessible::SelectedRowIndices(nsTArray<uint32_t>* aRows)
|
||||
void
|
||||
ARIAGridAccessible::SelectRow(uint32_t aRowIdx)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return;
|
||||
|
||||
AccIterator rowIter(this, filters::GetRow);
|
||||
|
||||
Accessible* row = nullptr;
|
||||
@ -350,6 +383,9 @@ ARIAGridAccessible::SelectRow(uint32_t aRowIdx)
|
||||
void
|
||||
ARIAGridAccessible::SelectCol(uint32_t aColIdx)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return;
|
||||
|
||||
AccIterator rowIter(this, filters::GetRow);
|
||||
|
||||
Accessible* row = nullptr;
|
||||
@ -368,8 +404,10 @@ ARIAGridAccessible::SelectCol(uint32_t aColIdx)
|
||||
void
|
||||
ARIAGridAccessible::UnselectRow(uint32_t aRowIdx)
|
||||
{
|
||||
Accessible* row = GetRowAt(aRowIdx);
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return;
|
||||
|
||||
Accessible* row = GetRowAt(aRowIdx);
|
||||
if (row)
|
||||
SetARIASelected(row, false);
|
||||
}
|
||||
@ -377,6 +415,9 @@ ARIAGridAccessible::UnselectRow(uint32_t aRowIdx)
|
||||
void
|
||||
ARIAGridAccessible::UnselectCol(uint32_t aColIdx)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return;
|
||||
|
||||
AccIterator rowIter(this, filters::GetRow);
|
||||
|
||||
Accessible* row = nullptr;
|
||||
@ -421,6 +462,9 @@ nsresult
|
||||
ARIAGridAccessible::SetARIASelected(Accessible* aAccessible,
|
||||
bool aIsSelected, bool aNotify)
|
||||
{
|
||||
if (IsARIARole(nsGkAtoms::table))
|
||||
return NS_OK;
|
||||
|
||||
nsIContent *content = aAccessible->GetContent();
|
||||
NS_ENSURE_STATE(content);
|
||||
|
||||
@ -524,8 +568,8 @@ ARIAGridCellAccessible::ColIdx() const
|
||||
for (int32_t idx = 0; idx < indexInRow; idx++) {
|
||||
Accessible* cell = row->GetChildAt(idx);
|
||||
roles::Role role = cell->Role();
|
||||
if (role == roles::GRID_CELL || role == roles::ROWHEADER ||
|
||||
role == roles::COLUMNHEADER)
|
||||
if (role == roles::CELL || role == roles::GRID_CELL ||
|
||||
role == roles::ROWHEADER || role == roles::COLUMNHEADER)
|
||||
colIdx++;
|
||||
}
|
||||
|
||||
@ -593,8 +637,8 @@ ARIAGridCellAccessible::NativeAttributes()
|
||||
colIdx = colCount;
|
||||
|
||||
roles::Role role = child->Role();
|
||||
if (role == roles::GRID_CELL || role == roles::ROWHEADER ||
|
||||
role == roles::COLUMNHEADER)
|
||||
if (role == roles::CELL || role == roles::GRID_CELL ||
|
||||
role == roles::ROWHEADER || role == roles::COLUMNHEADER)
|
||||
colCount++;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
[DEFAULT]
|
||||
|
||||
[test_headers_ariagrid.html]
|
||||
[test_headers_ariatable.html]
|
||||
[test_headers_listbox.xul]
|
||||
[test_headers_table.html]
|
||||
[test_headers_tree.xul]
|
||||
|
96
accessible/tests/mochitest/table/test_headers_ariatable.html
Normal file
96
accessible/tests/mochitest/table/test_headers_ariatable.html
Normal file
@ -0,0 +1,96 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<title>Table header information cells for ARIA table</title>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css" />
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<script type="application/javascript"
|
||||
src="../common.js"></script>
|
||||
<script type="application/javascript"
|
||||
src="../table.js"></script>
|
||||
|
||||
<script type="application/javascript">
|
||||
|
||||
function doTest()
|
||||
{
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// column and row headers from markup
|
||||
|
||||
headerInfoMap = [
|
||||
{
|
||||
cell: "table_dc_1",
|
||||
rowHeaderCells: [ "table_rh_1" ],
|
||||
columnHeaderCells: [ "table_ch_2" ]
|
||||
},
|
||||
{
|
||||
cell: "table_dc_2",
|
||||
rowHeaderCells: [ "table_rh_1" ],
|
||||
columnHeaderCells: [ "table_ch_3" ]
|
||||
},
|
||||
{
|
||||
cell: "table_dc_3",
|
||||
rowHeaderCells: [ "table_rh_2" ],
|
||||
columnHeaderCells: [ "table_ch_2" ]
|
||||
},
|
||||
{
|
||||
cell: "table_dc_4",
|
||||
rowHeaderCells: [ "table_rh_2" ],
|
||||
columnHeaderCells: [ "table_ch_3" ]
|
||||
},
|
||||
{
|
||||
cell: "table_rh_1",
|
||||
rowHeaderCells: [],
|
||||
columnHeaderCells: [ "table_ch_1" ]
|
||||
},
|
||||
{
|
||||
cell: "table_rh_2",
|
||||
rowHeaderCells: [],
|
||||
columnHeaderCells: [ "table_ch_1" ]
|
||||
}
|
||||
];
|
||||
|
||||
testHeaderCells(headerInfoMap);
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
addA11yLoadEvent(doTest);
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<a target="_blank"
|
||||
title="support ARIA table and cell roles"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=1173364">Bug 1173364</a>
|
||||
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
|
||||
<div role="table">
|
||||
<div role="row">
|
||||
<span id="table_ch_1" role="columnheader">col_1</span>
|
||||
<span id="table_ch_2" role="columnheader">col_2</span>
|
||||
<span id="table_ch_3" role="columnheader">col_3</span>
|
||||
</div>
|
||||
<div role="row">
|
||||
<span id="table_rh_1" role="rowheader">row_1</span>
|
||||
<span id="table_dc_1" role="cell">cell1</span>
|
||||
<span id="table_dc_2" role="cell">cell2</span>
|
||||
</div>
|
||||
<div role="row">
|
||||
<span id="table_rh_2" role="rowheader">row_2</span>
|
||||
<span id="table_dc_3" role="cell">cell3</span>
|
||||
<span id="table_dc_4" role="cell">cell4</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -11,6 +11,7 @@ skip-if = true # Bug 561508
|
||||
[test_aria_list.html]
|
||||
[test_aria_menu.html]
|
||||
[test_aria_presentation.html]
|
||||
[test_aria_table.html]
|
||||
[test_brokencontext.html]
|
||||
[test_button.xul]
|
||||
[test_canvas.html]
|
||||
|
63
accessible/tests/mochitest/tree/test_aria_table.html
Normal file
63
accessible/tests/mochitest/tree/test_aria_table.html
Normal file
@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>ARIA table tests</title>
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="chrome://mochikit/content/tests/SimpleTest/test.css" />
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<script type="application/javascript"
|
||||
src="../common.js"></script>
|
||||
<script type="application/javascript"
|
||||
src="../role.js"></script>
|
||||
|
||||
<script type="application/javascript">
|
||||
function doTest()
|
||||
{
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// table having rowgroups
|
||||
|
||||
var accTree =
|
||||
{ TABLE: [
|
||||
{ GROUPING: [
|
||||
{ ROW: [
|
||||
{ CELL: [
|
||||
{ TEXT_LEAF: [ ] }
|
||||
] }
|
||||
] }
|
||||
] },
|
||||
] };
|
||||
|
||||
testAccessibleTree("table", accTree);
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
addA11yLoadEvent(doTest);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<a target="_blank"
|
||||
title="support ARIA table and cell roles"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=1173364">
|
||||
Bug 1173364
|
||||
</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
|
||||
<div id="table" role="table">
|
||||
<div role="rowgroup">
|
||||
<div role="row">
|
||||
<div role="cell">cell</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user