Commit f1d7f62e authored by aleventhal's avatar aleventhal Committed by Commit bot

Multiselectable touchups for ARIA widgets

BUG=723795

Review-Url: https://codereview.chromium.org/2886243002
Cr-Commit-Position: refs/heads/master@{#473368}
parent e9cc6305
ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE
++ROLE_SYSTEM_TABLE MULTISELECTABLE EXTSELECTABLE xml-roles:grid
++ROLE_SYSTEM_TABLE xml-roles:grid
++++ROLE_SYSTEM_ROW xml-roles:row
++++++ROLE_SYSTEM_COLUMNHEADER name='Browser' xml-roles:columnheader
++++++++ROLE_SYSTEM_STATICTEXT name='Browser'
......
......@@ -6,7 +6,7 @@
<!DOCTYPE html>
<html>
<body>
<div role="grid">
<div role="grid" aria-multiselectable="true">
<div role="row">
<span role="columnheader">Browser</span>
<span role="columnheader">Rendering Engine</span>
......
ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE
++ROLE_SYSTEM_TABLE MULTISELECTABLE EXTSELECTABLE xml-roles:grid
++ROLE_SYSTEM_TABLE xml-roles:grid
++++ROLE_SYSTEM_ROW xml-roles:row
++++++ROLE_SYSTEM_ROWHEADER name='Browser' xml-roles:rowheader
++++++++ROLE_SYSTEM_STATICTEXT name='Browser'
......
<!DOCTYPE HTML>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<div role="grid" id="grid"></div>
<div role="treegrid" id="treegrid"></div>
<div role="tree" id="tree"></div>
<div role="listbox" id="listbox"></div>
<div role="tablist" id="tablist"></div>
<div role="grid" id="multi-grid" aria-multiselectable="true"></div>
<div role="treegrid" id="multi-treegrid" aria-multiselectable="true"></div>
<div role="tree" id="multi-tree" aria-multiselectable="true"></div>
<div role="listbox" id="multi-listbox" aria-multiselectable="true"></div>
<div role="tablist" id="multi-tablist" aria-multiselectable="true"></div>
<div role="radiogroup" id="radiogroup" aria-multiselectable="true"></div>
<div role="menu" id="menu" aria-multiselectable="true"></div>
<script>
function axElementById(id) {
return accessibilityController.accessibleElementById(id);
}
test(function(t) {
var container = axElementById("grid");
assert_equals(container.isMultiSelectable, false);
}, "multiselectable=false by default on grid");
test(function(t) {
var container = axElementById("treegrid");
assert_equals(container.isMultiSelectable, false);
}, "multiselectable=false by default on treegrid");
test(function(t) {
var container = axElementById("tree");
assert_equals(container.isMultiSelectable, false);
}, "multiselectable=false by default on tree");
test(function(t) {
var container = axElementById("listbox");
assert_equals(container.isMultiSelectable, false);
}, "multiselectable=false by default on listbox");
test(function(t) {
var container = axElementById("tablist");
assert_equals(container.isMultiSelectable, false);
}, "multiselectable=false by default on tablist");
test(function(t) {
var container = axElementById("multi-grid");
assert_equals(container.isMultiSelectable, true);
}, "multiselectable can be set on grid");
test(function(t) {
var container = axElementById("multi-treegrid");
assert_equals(container.isMultiSelectable, true);
}, "multiselectable can be set on treegrid");
test(function(t) {
var container = axElementById("multi-tree");
assert_equals(container.isMultiSelectable, true);
}, "multiselectable can be set on tree");
test(function(t) {
var container = axElementById("multi-listbox");
assert_equals(container.isMultiSelectable, true);
}, "multiselectable can be set on listbox");
test(function(t) {
var container = axElementById("multi-tablist");
assert_equals(container.isMultiSelectable, true);
}, "multiselectable can be set on tablist");
test(function(t) {
var container = axElementById("radiogroup");
assert_equals(container.isMultiSelectable, false);
}, "multiselectable cannot be set on radiogrup");
test(function(t) {
var container = axElementById("menu");
assert_equals(container.isMultiSelectable, false);
}, "multiselectable cannot be set on menu");
</script>
......@@ -57,7 +57,6 @@ class AXARIAGrid final : public AXTable {
private:
// ARIA treegrids and grids support selected rows.
bool SupportsSelectedRows() override { return true; }
bool IsMultiSelectable() const override { return true; }
bool IsTableExposableThroughAccessibility() const override { return true; }
bool AddTableRowChild(AXObjectImpl*,
......
......@@ -1047,10 +1047,20 @@ bool AXNodeObject::IsMeter() const {
}
bool AXNodeObject::IsMultiSelectable() const {
bool multiselectable = false;
if (HasAOMPropertyOrARIAAttribute(AOMBooleanProperty::kMultiselectable,
multiselectable)) {
return multiselectable;
switch (RoleValue()) {
case kGridRole:
case kTreeGridRole:
case kTreeRole:
case kListBoxRole:
case kTabListRole: {
bool multiselectable = false;
if (HasAOMPropertyOrARIAAttribute(AOMBooleanProperty::kMultiselectable,
multiselectable)) {
return multiselectable;
}
}
default:
break;
}
return isHTMLSelectElement(GetNode()) &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment