зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1760739 part 4: Normalize aria-row/colcount/index as integers. r=eeejay
Differential Revision: https://phabricator.services.mozilla.com/D149223
This commit is contained in:
Родитель
237c1cc6fa
Коммит
b8d51ef048
|
@ -1351,6 +1351,8 @@ static const AttrCharacteristics gWAIUnivAttrMap[] = {
|
|||
{nsGkAtoms::aria_atomic, ATTR_BYPASSOBJ_IF_FALSE | ATTR_VALTOKEN | ATTR_GLOBAL },
|
||||
{nsGkAtoms::aria_busy, ATTR_VALTOKEN | ATTR_GLOBAL },
|
||||
{nsGkAtoms::aria_checked, ATTR_BYPASSOBJ | ATTR_VALTOKEN }, /* exposes checkable obj attr */
|
||||
{nsGkAtoms::aria_colcount, ATTR_VALINT },
|
||||
{nsGkAtoms::aria_colindex, ATTR_VALINT },
|
||||
{nsGkAtoms::aria_controls, ATTR_BYPASSOBJ | ATTR_GLOBAL },
|
||||
{nsGkAtoms::aria_current, ATTR_BYPASSOBJ_IF_FALSE | ATTR_VALTOKEN | ATTR_GLOBAL },
|
||||
{nsGkAtoms::aria_describedby, ATTR_BYPASSOBJ | ATTR_GLOBAL },
|
||||
|
@ -1384,6 +1386,8 @@ static const AttrCharacteristics gWAIUnivAttrMap[] = {
|
|||
{nsGkAtoms::aria_readonly, ATTR_BYPASSOBJ | ATTR_VALTOKEN },
|
||||
{nsGkAtoms::aria_relevant, ATTR_BYPASSOBJ | ATTR_GLOBAL },
|
||||
{nsGkAtoms::aria_required, ATTR_BYPASSOBJ | ATTR_VALTOKEN },
|
||||
{nsGkAtoms::aria_rowcount, ATTR_VALINT },
|
||||
{nsGkAtoms::aria_rowindex, ATTR_VALINT },
|
||||
{nsGkAtoms::aria_selected, ATTR_BYPASSOBJ | ATTR_VALTOKEN },
|
||||
{nsGkAtoms::aria_setsize, ATTR_BYPASSOBJ }, /* handled via groupPosition */
|
||||
{nsGkAtoms::aria_sort, ATTR_VALTOKEN },
|
||||
|
@ -1549,6 +1553,22 @@ bool AttrIterator::ExposeAttr(AccAttributes* aTargetAttrs) const {
|
|||
aTargetAttrs->SetAttribute(mAttrAtom, normalizedValue);
|
||||
return true;
|
||||
}
|
||||
} else if (mAttrCharacteristics & ATTR_VALINT) {
|
||||
int32_t intVal;
|
||||
if (nsCoreUtils::GetUIntAttr(mElement, mAttrAtom, &intVal)) {
|
||||
aTargetAttrs->SetAttribute(mAttrAtom, intVal);
|
||||
return true;
|
||||
}
|
||||
if (mAttrAtom == nsGkAtoms::aria_colcount ||
|
||||
mAttrAtom == nsGkAtoms::aria_rowcount) {
|
||||
// These attributes allow a value of -1.
|
||||
if (mElement->AttrValueIs(kNameSpaceID_None, mAttrAtom, u"-1"_ns,
|
||||
eCaseMatters)) {
|
||||
aTargetAttrs->SetAttribute(mAttrAtom, -1);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false; // Invalid value.
|
||||
}
|
||||
nsAutoString value;
|
||||
if (mElement->GetAttr(kNameSpaceID_None, mAttrAtom, value)) {
|
||||
|
|
|
@ -118,6 +118,11 @@ const uint8_t ATTR_VALTOKEN = 0x1 << 2;
|
|||
*/
|
||||
const uint8_t ATTR_GLOBAL = 0x1 << 3;
|
||||
|
||||
/**
|
||||
* Indicates that the attribute should have an integer value.
|
||||
*/
|
||||
const uint8_t ATTR_VALINT = 0x1 << 4;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// State map entry
|
||||
|
||||
|
|
|
@ -279,6 +279,21 @@ addAccessibleTask(
|
|||
<div id="currentPage" aria-current="page">currentPage</div>
|
||||
<div id="currentBlah" aria-current="blah">currentBlah</div>
|
||||
<div id="haspopupMenu" aria-haspopup="menu">haspopup</div>
|
||||
<div id="rowColCountPositive" role="table" aria-rowcount="1000" aria-colcount="1000">
|
||||
<div role="row">
|
||||
<div id="rowColIndexPositive" role="cell" aria-rowindex="100" aria-colindex="100">positive</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="rowColCountNegative" role="table" aria-rowcount="-1" aria-colcount="-1">
|
||||
<div role="row">
|
||||
<div id="rowColIndexNegative" role="cell" aria-rowindex="-1" aria-colindex="-1">negative</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="rowColCountInvalid" role="table" aria-rowcount="z" aria-colcount="z">
|
||||
<div role="row">
|
||||
<div id="rowColIndexInvalid" role="cell" aria-rowindex="z" aria-colindex="z">invalid</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="foo" aria-foo="bar">foo</div>
|
||||
<div id="mutate" aria-current="true">mutate</div>
|
||||
`,
|
||||
|
@ -294,6 +309,43 @@ addAccessibleTask(
|
|||
testAttrs(currentBlah, { current: "true" }, true);
|
||||
const haspopupMenu = findAccessibleChildByID(docAcc, "haspopupMenu");
|
||||
testAttrs(haspopupMenu, { haspopup: "menu" }, true);
|
||||
|
||||
// Test normalization of integer values.
|
||||
const rowColCountPositive = findAccessibleChildByID(
|
||||
docAcc,
|
||||
"rowColCountPositive"
|
||||
);
|
||||
testAttrs(
|
||||
rowColCountPositive,
|
||||
{ rowcount: "1000", colcount: "1000" },
|
||||
true
|
||||
);
|
||||
const rowColIndexPositive = findAccessibleChildByID(
|
||||
docAcc,
|
||||
"rowColIndexPositive"
|
||||
);
|
||||
testAttrs(rowColIndexPositive, { rowindex: "100", colindex: "100" }, true);
|
||||
const rowColCountNegative = findAccessibleChildByID(
|
||||
docAcc,
|
||||
"rowColCountNegative"
|
||||
);
|
||||
testAttrs(rowColCountNegative, { rowcount: "-1", colcount: "-1" }, true);
|
||||
const rowColIndexNegative = findAccessibleChildByID(
|
||||
docAcc,
|
||||
"rowColIndexNegative"
|
||||
);
|
||||
testAbsentAttrs(rowColIndexNegative, { rowindex: "", colindex: "" });
|
||||
const rowColCountInvalid = findAccessibleChildByID(
|
||||
docAcc,
|
||||
"rowColCountInvalid"
|
||||
);
|
||||
testAbsentAttrs(rowColCountInvalid, { rowcount: "", colcount: "" });
|
||||
const rowColIndexInvalid = findAccessibleChildByID(
|
||||
docAcc,
|
||||
"rowColIndexInvalid"
|
||||
);
|
||||
testAbsentAttrs(rowColIndexInvalid, { rowindex: "", colindex: "" });
|
||||
|
||||
// Test that unknown aria- attributes get exposed.
|
||||
const foo = findAccessibleChildByID(docAcc, "foo");
|
||||
testAttrs(foo, { foo: "bar" }, true);
|
||||
|
|
Загрузка…
Ссылка в новой задаче