haikuwebkit/LayoutTests/accessibility/aria-selected.html

72 lines
3.1 KiB
HTML
Raw Permalink Normal View History

AX: [ATK] Implement selection interface and states for elements supporting aria-selected and for menu roles https://bugs.webkit.org/show_bug.cgi?id=164865 Reviewed by Chris Fleizach. Source/WebCore: Implement AtkSelection and support ATK_STATE_SELECTABLE and ATK_STATE_SELECTED for elements supporting aria-selected and for menu-related roles. Also enable the equivalent support for the Mac because NSAccessibilitySelectedChildrenAttribute is included as supported on the same roles. In addition, fix several bugs discovered along the way: Call isSelected() on role tab, because tab supports aria-selected; not aria-checked. Correct ATK mapping of ListBoxRole and ListBoxOptionRole for combobox descendants. Always defer to WebCore for inclusion/exclusion decisions related to elements with an explicit ARIA role. Tests: accessibility/aria-combobox-hierarchy.html accessibility/aria-selected-menu-items.html accessibility/aria-selected.html * accessibility/AccessibilityNodeObject.cpp: (WebCore::AccessibilityNodeObject::selectedTabItem): (WebCore::AccessibilityNodeObject::canSetSelectedAttribute): * accessibility/AccessibilityObject.cpp: (WebCore::AccessibilityObject::isDescendantOfRole): * accessibility/AccessibilityObject.h: (WebCore::AccessibilityObject::canHaveSelectedChildren): * accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::isSelected): (WebCore::AccessibilityRenderObject::canHaveSelectedChildren): (WebCore::AccessibilityRenderObject::selectedChildren): * accessibility/AccessibilityRenderObject.h: * accessibility/atk/AccessibilityObjectAtk.cpp: (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject): * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp: (webkitAccessibleSelectionGetSelectionCount): * accessibility/atk/WebKitAccessibleWrapperAtk.cpp: (atkRole): (getInterfaceMaskFromObject): * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]): LayoutTests: New tests for the added support. In addition, update the expectations for aria-combobox.html to reflect the corrected ATK mapping of ListBoxRole for combobox descendants. * accessibility/aria-combobox-expected.txt: Updated. * accessibility/aria-combobox-hierarchy.html: Added. * accessibility/aria-selected-menu-items.html: Added. * accessibility/aria-selected.html: Added. * platform/gtk/accessibility/aria-combobox-hierarchy-expected.txt: Added. * platform/gtk/accessibility/aria-selected-expected.txt: Added. * platform/gtk/accessibility/aria-selected-menu-items-expected.txt: Added. * platform/mac/accessibility/aria-combobox-hierarchy-expected.txt: Added. * platform/mac/accessibility/aria-selected-expected.txt: Added. * platform/mac/accessibility/aria-selected-menu-items-expected.txt: Added. Canonical link: https://commits.webkit.org/182638@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@208929 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-11-19 21:12:24 +00:00
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../resources/js-test-pre.js"></script>
<script src="../resources/accessibility-helper.js"></script>
</head>
<body id="body">
<div id="content">
<div role="tablist" id="tablist" tabindex="0">
<div role="tab" aria-label="first">1</div>
<div role="tab" aria-label="second" aria-selected="true">2</div>
<div role="tab" aria-label="third">3</div>
</div>
<div role="tree" id="tree" aria-multiselectable="true" tabindex="0">
<div role="treeitem" aria-label="first" aria-selected="true">1</div>
<div role="treeitem" aria-label="second">2</div>
<div role="treeitem" aria-label="third" aria-selected="true">3</div>
</div>
<div role="grid" id="grid" tabindex="0">
<div role="row" aria-label="first"><span role="gridcell">1</span></div>
<div role="row" aria-label="second" aria-selected="true"><span role="gridcell">2</span></div>
<div role="row" aria-label="third"><span role="gridcell">3</span></div>
</div>
<div tabindex="0" role="treegrid" id="treegrid" aria-activedescendant="row1">
<div role="row" aria-level="1" aria-label="first - level 1" aria-expanded="true">
<div role="gridcell" tabindex="0">- Expanded</div>
</div>
<div role="row" aria-label="first - level 2" aria-level="2" aria-selected="true">
<div role="gridcell">Data 1</div><div role="gridcell">Data 2</div>
</div>
<div role="row" aria-label="second - level 2" aria-level="2">
<div role="gridcell">Data 3</div><div role="gridcell">Data 4</div>
</div>
<div role="row" aria-label="third - level 2" aria-level="2" aria-selected="true">
<div role="gridcell">Data 4</div><div role="gridcell">Data 5</div>
</div>
<div role="row" aria-level="1" aria-label="second - level 1" aria-expanded="false">
<div role="gridcell" tabindex="0">+ Expand me</div>
</div>
</div>
</div>
<p id="description"></p>
<div id="console"></div>
<script>
function selectedChildInfo(axElement) {
if (!axElement)
debug("Element not exposed");
var count = axElement.selectedChildrenCount;
debug(axElement.role + " has " + count + " selected child(ren)");
for (var i = 0; i < count; i++) {
var child = axElement.selectedChildAtIndex(i);
result = ("\t" + platformValueForW3CName(child) + " (" + child.role + ")")
result += " isSelectable: " + child.isSelectable + " isSelected: " + child.isSelected;
debug(result);
}
}
description("This tests that items with aria-selected are reported as selected children of the parent container.");
if (window.accessibilityController) {
selectedChildInfo(window.accessibilityController.accessibleElementById("tablist"));
selectedChildInfo(window.accessibilityController.accessibleElementById("tree"));
selectedChildInfo(window.accessibilityController.accessibleElementById("grid"));
selectedChildInfo(window.accessibilityController.accessibleElementById("treegrid"));
document.getElementById("content").style.visibility = "hidden";
}
</script>
<script src="../resources/js-test-post.js"></script>
</body>
</html>