mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-03 12:35:58 +00:00
Bug 804461, part3 - use context to build list trees, r=tbsaunde
This commit is contained in:
parent
aa956a32ef
commit
433d1a1127
@ -144,7 +144,7 @@ static nsRoleMapEntry sWAIRoleMaps[] =
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
eNoLiveAttr,
|
||||
kGenericAccType,
|
||||
Accessible::eListAccessible,
|
||||
kNoReqStates
|
||||
},
|
||||
{ // document
|
||||
@ -239,7 +239,7 @@ static nsRoleMapEntry sWAIRoleMaps[] =
|
||||
eNoValue,
|
||||
eNoAction,
|
||||
eNoLiveAttr,
|
||||
kGenericAccType,
|
||||
Accessible::eListAccessible,
|
||||
states::READONLY
|
||||
},
|
||||
{ // listbox
|
||||
|
@ -830,6 +830,15 @@ nsAccessibilityService::GetOrCreateAccessible(nsINode* aNode,
|
||||
} else if (frame->AccessibleType() == eHTMLTableCellAccessible &&
|
||||
aContext->ARIARoleMap() == &nsARIAMap::gEmptyRoleMap) {
|
||||
roleMapEntry = &nsARIAMap::gEmptyRoleMap;
|
||||
|
||||
} else if (content->Tag() == nsGkAtoms::dt ||
|
||||
content->Tag() == nsGkAtoms::li ||
|
||||
content->Tag() == nsGkAtoms::dd ||
|
||||
frame->AccessibleType() == eHTMLLiAccessible) {
|
||||
nsRoleMapEntry* contextRoleMap = aContext->ARIARoleMap();
|
||||
if (contextRoleMap &&
|
||||
!(contextRoleMap->accTypes & Accessible::eListAccessible))
|
||||
roleMapEntry = &nsARIAMap::gEmptyRoleMap;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1237,18 +1246,30 @@ nsAccessibilityService::CreateHTMLAccessibleByMarkup(nsIFrame* aFrame,
|
||||
return accessible;
|
||||
}
|
||||
|
||||
if (tag == nsGkAtoms::dt || tag == nsGkAtoms::li) {
|
||||
// Create list item accessible unconditionally by tag name. nsBlockFrame
|
||||
// creates the list item accessible for other elements styled as list items.
|
||||
Accessible* accessible = new HTMLLIAccessible(aContent, document);
|
||||
NS_ADDREF(accessible);
|
||||
return accessible;
|
||||
if (aContext->IsOfType(Accessible::eListAccessible)) {
|
||||
// If list item is a child of accessible list then create an accessible for
|
||||
// it unconditionally by tag name. nsBlockFrame creates the list item
|
||||
// accessible for other elements styled as list items.
|
||||
if (aContext->GetContent() == aContent->GetParent()) {
|
||||
if (tag == nsGkAtoms::dt || tag == nsGkAtoms::li) {
|
||||
Accessible* accessible = new HTMLLIAccessible(aContent, document);
|
||||
NS_ADDREF(accessible);
|
||||
return accessible;
|
||||
}
|
||||
|
||||
if (tag == nsGkAtoms::dd) {
|
||||
Accessible* accessible = new HyperTextAccessibleWrap(aContent, document);
|
||||
NS_ADDREF(accessible);
|
||||
return accessible;
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (tag == nsGkAtoms::abbr ||
|
||||
tag == nsGkAtoms::acronym ||
|
||||
tag == nsGkAtoms::blockquote ||
|
||||
tag == nsGkAtoms::dd ||
|
||||
tag == nsGkAtoms::form ||
|
||||
tag == nsGkAtoms::h1 ||
|
||||
tag == nsGkAtoms::h2 ||
|
||||
@ -1326,7 +1347,10 @@ nsAccessibilityService::CreateAccessibleByFrameType(nsIFrame* aFrame,
|
||||
newAcc = new HTMLLabelAccessible(aContent, document);
|
||||
break;
|
||||
case eHTMLLiAccessible:
|
||||
newAcc = new HTMLLIAccessible(aContent, document);
|
||||
if (aContext->IsOfType(Accessible::eListAccessible) &&
|
||||
aContext->GetContent() == aContent->GetParent()) {
|
||||
newAcc = new HTMLLIAccessible(aContent, document);
|
||||
}
|
||||
break;
|
||||
case eHTMLSelectListAccessible:
|
||||
newAcc = new HTMLSelectListAccessible(aContent, document);
|
||||
@ -1374,8 +1398,10 @@ nsAccessibilityService::CreateAccessibleByFrameType(nsIFrame* aFrame,
|
||||
newAcc = new HTMLTextFieldAccessible(aContent, document);
|
||||
break;
|
||||
case eHyperTextAccessible:
|
||||
newAcc = new HyperTextAccessibleWrap(aContent, document);
|
||||
if (aContent->Tag() != nsGkAtoms::dt && aContent->Tag() != nsGkAtoms::dd)
|
||||
newAcc = new HyperTextAccessibleWrap(aContent, document);
|
||||
break;
|
||||
|
||||
case eImageAccessible:
|
||||
newAcc = new ImageAccessibleWrap(aContent, document);
|
||||
break;
|
||||
|
@ -790,18 +790,19 @@ public: // XXX: a small hack to make these visible for nsARIAMap
|
||||
eHTMLTableRowAccessible = 1 << 15,
|
||||
eImageAccessible = 1 << 16,
|
||||
eImageMapAccessible = 1 << 17,
|
||||
eListControlAccessible = 1 << 18,
|
||||
eMenuButtonAccessible = 1 << 19,
|
||||
eMenuPopupAccessible = 1 << 20,
|
||||
eProgressAccessible = 1 << 21,
|
||||
eRootAccessible = 1 << 22,
|
||||
eSelectAccessible = 1 << 23,
|
||||
eTableAccessible = 1 << 24,
|
||||
eTableCellAccessible = 1 << 25,
|
||||
eTableRowAccessible = 1 << 26,
|
||||
eTextLeafAccessible = 1 << 27,
|
||||
eXULDeckAccessible = 1 << 28,
|
||||
eXULTreeAccessible = 1 << 29
|
||||
eListAccessible = 1 << 18,
|
||||
eListControlAccessible = 1 << 19,
|
||||
eMenuButtonAccessible = 1 << 20,
|
||||
eMenuPopupAccessible = 1 << 21,
|
||||
eProgressAccessible = 1 << 22,
|
||||
eRootAccessible = 1 << 23,
|
||||
eSelectAccessible = 1 << 24,
|
||||
eTableAccessible = 1 << 25,
|
||||
eTableCellAccessible = 1 << 26,
|
||||
eTableRowAccessible = 1 << 27,
|
||||
eTextLeafAccessible = 1 << 28,
|
||||
eXULDeckAccessible = 1 << 29,
|
||||
eXULTreeAccessible = 1 << 30
|
||||
};
|
||||
|
||||
protected:
|
||||
|
@ -22,7 +22,7 @@ class HTMLListAccessible : public HyperTextAccessibleWrap
|
||||
{
|
||||
public:
|
||||
HTMLListAccessible(nsIContent* aContent, DocAccessible* aDoc) :
|
||||
HyperTextAccessibleWrap(aContent, aDoc) { }
|
||||
HyperTextAccessibleWrap(aContent, aDoc) { mFlags |= eListAccessible; }
|
||||
virtual ~HTMLListAccessible() { }
|
||||
|
||||
// nsISupports
|
||||
|
@ -17,6 +17,7 @@ MOCHITEST_A11Y_FILES =\
|
||||
test_aria_globals.html \
|
||||
test_aria_grid.html \
|
||||
test_aria_imgmap.html \
|
||||
test_aria_list.html \
|
||||
test_aria_menu.html \
|
||||
test_aria_presentation.html \
|
||||
test_brokencontext.html \
|
||||
|
87
accessible/tests/mochitest/tree/test_aria_list.html
Normal file
87
accessible/tests/mochitest/tree/test_aria_list.html
Normal file
@ -0,0 +1,87 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>ARIA lists</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()
|
||||
{
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// list
|
||||
|
||||
var accTree =
|
||||
{ LIST: [
|
||||
{ LISTITEM: [
|
||||
{ TEXT_LEAF: [ ] }
|
||||
] }
|
||||
] };
|
||||
|
||||
testAccessibleTree("list", accTree);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// crazy list (mad mix of ARIA and HTML)
|
||||
|
||||
accTree = { // div@role="list"
|
||||
role: ROLE_LIST,
|
||||
children: [
|
||||
{ // li text leaf
|
||||
role: ROLE_TEXT_LEAF,
|
||||
name: "item1",
|
||||
children: [ ]
|
||||
},
|
||||
{ // li@role="listitem"
|
||||
role: ROLE_LISTITEM,
|
||||
children: [
|
||||
{ // text leaf
|
||||
role: ROLE_TEXT_LEAF,
|
||||
name: "item2",
|
||||
children: [ ]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
testAccessibleTree("crazy_list", accTree);
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
addA11yLoadEvent(doTest);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<a target="_blank"
|
||||
title="Build the context dependent tree"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=804461">
|
||||
Mozilla Bug 804461
|
||||
</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
|
||||
<div id="list" role="list">
|
||||
<div role="listitem">item1</div>
|
||||
</div>
|
||||
|
||||
<div id="crazy_list" role="list">
|
||||
<ul role="presentation">
|
||||
<li>item1</li>
|
||||
<li role="listitem">item2</li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -38,6 +38,61 @@
|
||||
] };
|
||||
testAccessibleTree("button_table", tree);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// HTML list elements outside list context.
|
||||
|
||||
ok(!isAccessible("presentation_ul"),
|
||||
"presentational ul shouldn't be accessible");
|
||||
ok(!isAccessible("item_in_presentation_ul"),
|
||||
"li in presentational ul shouldn't be accessible");
|
||||
ok(!isAccessible("styleditem_in_presentation_ul"),
|
||||
"list styled span in presentational ul shouldn't be accessible");
|
||||
|
||||
ok(!isAccessible("presentation_ol"),
|
||||
"presentational ol shouldn't be accessible");
|
||||
ok(!isAccessible("item_in_presentation_ol"),
|
||||
"li in presentational ol shouldn't be accessible");
|
||||
|
||||
ok(!isAccessible("presentation_dl"),
|
||||
"presentational dl shouldn't be accessible");
|
||||
ok(!isAccessible("dt_in_presentation_dl"),
|
||||
"dt in presentational dl shouldn't be accessible");
|
||||
ok(!isAccessible("dd_in_presentation_dl"),
|
||||
"dd in presentational dl shouldn't be accessible");
|
||||
|
||||
tree =
|
||||
{ PUSHBUTTON: [ // ul
|
||||
{ NOTHING: [ // li
|
||||
{ STATICTEXT: [ ] },
|
||||
{ TEXT_LEAF: [ ] }
|
||||
] },
|
||||
{ NOTHING: [ // span styled as a list
|
||||
{ STATICTEXT: [ ] },
|
||||
{ TEXT_LEAF: [ ] }
|
||||
] }
|
||||
] };
|
||||
testAccessibleTree("button_ul", tree);
|
||||
|
||||
tree =
|
||||
{ PUSHBUTTON: [ // ol
|
||||
{ NOTHING: [ // li
|
||||
{ STATICTEXT: [ ] },
|
||||
{ TEXT_LEAF: [ ] }
|
||||
] }
|
||||
] };
|
||||
testAccessibleTree("button_ol", tree);
|
||||
|
||||
tree =
|
||||
{ PUSHBUTTON: [ // dl
|
||||
{ NOTHING: [ // dt
|
||||
{ TEXT_LEAF: [ ] }
|
||||
] },
|
||||
{ NOTHING: [ // dd
|
||||
{ TEXT_LEAF: [ ] }
|
||||
] }
|
||||
] };
|
||||
testAccessibleTree("button_dl", tree);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Styled as HTML table elements, accessible is created by tag name
|
||||
|
||||
@ -72,6 +127,11 @@
|
||||
title="Create accessible by tag name as fallback if table descendant style is used out of table context">
|
||||
Mozilla Bug 706849
|
||||
</a>
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=804461"
|
||||
title="Build the context dependent tree ">
|
||||
Mozilla Bug 804461
|
||||
</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
<pre id="test">
|
||||
@ -92,6 +152,37 @@
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- HTML list elements out of list -->
|
||||
<ul role="presentation" id="presentation_ul">
|
||||
<li id="item_in_presentation_ul">item</li>
|
||||
<span id="styleditem_in_presentation_ul"
|
||||
style="display:list-item">Oranges</span>
|
||||
</ul>
|
||||
|
||||
<ol role="presentation" id="presentation_ol">
|
||||
<li id="item_in_presentation_ol">item</li>
|
||||
</ol>
|
||||
|
||||
<dl role="presentation" id="presentation_dl">
|
||||
<dt id="dt_in_presentation_dl">term</dt>
|
||||
<dd id="dd_in_presentation_dl">definition</dd>
|
||||
</dl>
|
||||
|
||||
<ul role="button" id="button_ul">
|
||||
<li id="item_in_button_ul">item</li>
|
||||
<span id="styleditem_in_button_ul"
|
||||
style="display:list-item">Oranges</span>
|
||||
</ul>
|
||||
|
||||
<ol role="button" id="button_ol">
|
||||
<li id="item_in_button_ul">item</li>
|
||||
</ol>
|
||||
|
||||
<dl role="button" id="button_dl">
|
||||
<dt id="dt_in_button_dl">term</ld>
|
||||
<dd id="dd_in_button_dl">definition</dd>
|
||||
</dl>
|
||||
|
||||
<!-- styled as HTML table elements -->
|
||||
<a id="a_as_td" style="display:table-cell;" href="http://www.google.com">Google</a>
|
||||
<h1 id="h1_as_td" style="display: table-cell;">h1</h1>
|
||||
|
Loading…
x
Reference in New Issue
Block a user