Skip to content

Commit

Permalink
Merge r223126 - AX: [ATK] STATE_CHECKABLE should be removed from radi…
Browse files Browse the repository at this point in the history
…o buttons in radiogroups with aria-readonly="true"

https://bugs.webkit.org/show_bug.cgi?id=177931

Reviewed by Chris Fleizach.

Source/WebCore:

Add a check in canSetValueAttribute() for readonly radiogroup ancestors of
radio buttons.

Test: accessibility/gtk/aria-readonly-radiogroup.html

* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::canSetValueAttribute const):
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::radioGroupAncestor const):
* accessibility/AccessibilityObject.h:

LayoutTests:

* accessibility/gtk/aria-readonly-radiogroup-expected.txt: Added.
* accessibility/gtk/aria-readonly-radiogroup.html: Added.
  • Loading branch information
joanmarie authored and carlosgcampos committed Oct 17, 2017
1 parent 2d15e63 commit b8cfcff
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 1 deletion.
10 changes: 10 additions & 0 deletions LayoutTests/ChangeLog
@@ -1,3 +1,13 @@
2017-10-10 Joanmarie Diggs <jdiggs@igalia.com>

AX: [ATK] STATE_CHECKABLE should be removed from radio buttons in radiogroups with aria-readonly="true"
https://bugs.webkit.org/show_bug.cgi?id=177931

Reviewed by Chris Fleizach.

* accessibility/gtk/aria-readonly-radiogroup-expected.txt: Added.
* accessibility/gtk/aria-readonly-radiogroup.html: Added.

2017-10-09 Joanmarie Diggs <jdiggs@igalia.com>

AX: [ATK] Explicitly-set aria-sort value of "none" should be exposed as an object attribute
Expand Down
@@ -0,0 +1,12 @@
This verifies ARIA radio buttons base their readonly value on the containing radio group.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


test1 AXValue is settable: : true
test2 AXValue is settable: : false
test3 AXValue is settable: : true
PASS successfullyParsed is true

TEST COMPLETE

28 changes: 28 additions & 0 deletions LayoutTests/accessibility/gtk/aria-readonly-radiogroup.html
@@ -0,0 +1,28 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body id="body">
<div id="content">
<div role="radiogroup"><div role="radio" id="test1"></div></div>
<div role="radiogroup" aria-readonly="true"><div role="radio" id="test2"></div></div>
<div role="radiogroup" aria-readonly="false"><div role="radio" id="test3"></div></div>
</div>
<p id="description"></p>
<div id="console"></div>
<script>
description("This verifies ARIA radio buttons base their readonly value on the containing radio group.");
if (window.accessibilityController) {
for (var i = 1; i <= 3; i++) {
var axElement = accessibilityController.accessibleElementById("test" + i);
debug("test" + i + " AXValue is settable: : " + axElement.isAttributeSettable("AXValue"));
}

document.getElementById("content").style.visibility = "hidden";
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>

18 changes: 18 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,21 @@
2017-10-10 Joanmarie Diggs <jdiggs@igalia.com>

AX: [ATK] STATE_CHECKABLE should be removed from radio buttons in radiogroups with aria-readonly="true"
https://bugs.webkit.org/show_bug.cgi?id=177931

Reviewed by Chris Fleizach.

Add a check in canSetValueAttribute() for readonly radiogroup ancestors of
radio buttons.

Test: accessibility/gtk/aria-readonly-radiogroup.html

* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::canSetValueAttribute const):
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::radioGroupAncestor const):
* accessibility/AccessibilityObject.h:

2017-10-09 Joanmarie Diggs <jdiggs@igalia.com>

AX: [ATK] Explicitly-set aria-sort value of "none" should be exposed as an object attribute
Expand Down
7 changes: 6 additions & 1 deletion Source/WebCore/accessibility/AccessibilityNodeObject.cpp
Expand Up @@ -2099,8 +2099,13 @@ bool AccessibilityNodeObject::canSetValueAttribute() const
#if PLATFORM(GTK)
// In ATK, input types which support aria-readonly are treated as having a
// settable value if the user can modify the widget's value or its state.
if (supportsARIAReadOnly() || isRadioButton())
if (supportsARIAReadOnly())
return true;

if (isRadioButton()) {
auto radioGroup = radioGroupAncestor();
return radioGroup ? radioGroup->ariaReadOnlyValue() != "true" : true;
}
#endif

if (isWebArea()) {
Expand Down
7 changes: 7 additions & 0 deletions Source/WebCore/accessibility/AccessibilityObject.cpp
Expand Up @@ -3313,6 +3313,13 @@ AccessibilityObject* AccessibilityObject::highestEditableAncestor()
return previousEditableAncestor;
}

AccessibilityObject* AccessibilityObject::radioGroupAncestor() const
{
return const_cast<AccessibilityObject*>(AccessibilityObject::matchedParent(*this, false, [] (const AccessibilityObject& object) {
return object.isRadioGroup();
}));
}

bool AccessibilityObject::isStyleFormatGroup() const
{
Node* node = this->node();
Expand Down
2 changes: 2 additions & 0 deletions Source/WebCore/accessibility/AccessibilityObject.h
Expand Up @@ -1161,6 +1161,8 @@ class AccessibilityObject : public RefCounted<AccessibilityObject> {
void ariaElementsFromAttribute(AccessibilityChildrenVector&, const QualifiedName&) const;
void ariaElementsReferencedByAttribute(AccessibilityChildrenVector&, const QualifiedName&) const;

AccessibilityObject* radioGroupAncestor() const;

#if PLATFORM(GTK) && HAVE(ACCESSIBILITY)
bool allowsTextRanges() const;
unsigned getLengthForTextRange() const;
Expand Down

0 comments on commit b8cfcff

Please sign in to comment.