AX: Update implementation of aria-orientation
authorjdiggs@igalia.com <jdiggs@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 May 2017 20:07:16 +0000 (20:07 +0000)
committerjdiggs@igalia.com <jdiggs@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 May 2017 20:07:16 +0000 (20:07 +0000)
https://bugs.webkit.org/show_bug.cgi?id=171166

Reviewed by Chris Fleizach.

Source/WebCore:

Update AccessibilityRenderObject::orientation() to be consistent with what is
in the ARIA 1.1 spec. Also add an isTreeGrid() convenience method to be consistent
with what we do for other roles.

Test: accessibility/aria-orientation.html

* accessibility/AccessibilityARIAGridRow.cpp:
(WebCore::AccessibilityARIAGridRow::isARIATreeGridRow):
* accessibility/AccessibilityObject.h:
(WebCore::AccessibilityObject::isTreeGrid):
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::orientation):

Tools:

Return "AXUnknownOrientation" when ATK_STATE_VERTICAL and ATK_STATE_HORIZONTAL
are both absent from the state set. Before we were returning an empty string
which was not consistent with what the Mac port does, thus making shared tests
harder.

* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
(WTR::AccessibilityUIElement::orientation):

LayoutTests:

Moved the mac aria-orientation.html test to the shared tests and add several
new test cases to it. Update the orientation-related assertion in two tests
to reflect the ARIA 1.1 behavior.

* accessibility/aria-orientation-expected.txt: Renamed from LayoutTests/accessibility/mac/aria-orientation-expected.txt.
* accessibility/aria-orientation.html: Renamed from LayoutTests/accessibility/mac/aria-orientation.html.
* accessibility/mac/slider-supports-actions.html: Updated.
* accessibility/gtk/combobox-descendants-orientation-crash-expected.txt: Updated.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@216089 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/accessibility/aria-orientation-expected.txt [moved from LayoutTests/accessibility/mac/aria-orientation-expected.txt with 64% similarity]
LayoutTests/accessibility/aria-orientation.html [moved from LayoutTests/accessibility/mac/aria-orientation.html with 67% similarity]
LayoutTests/accessibility/gtk/combobox-descendants-orientation-crash-expected.txt
LayoutTests/accessibility/mac/slider-supports-actions.html
Source/WebCore/ChangeLog
Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp
Source/WebCore/accessibility/AccessibilityObject.h
Source/WebCore/accessibility/AccessibilityRenderObject.cpp
Tools/ChangeLog
Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp

index 0b3afda..4f1c129 100644 (file)
@@ -1,3 +1,19 @@
+2017-05-02  Joanmarie Diggs  <jdiggs@igalia.com>
+
+        AX: Update implementation of aria-orientation
+        https://bugs.webkit.org/show_bug.cgi?id=171166
+
+        Reviewed by Chris Fleizach.
+
+        Moved the mac aria-orientation.html test to the shared tests and add several
+        new test cases to it. Update the orientation-related assertion in two tests
+        to reflect the ARIA 1.1 behavior.
+
+        * accessibility/aria-orientation-expected.txt: Renamed from LayoutTests/accessibility/mac/aria-orientation-expected.txt.
+        * accessibility/aria-orientation.html: Renamed from LayoutTests/accessibility/mac/aria-orientation.html.
+        * accessibility/mac/slider-supports-actions.html: Updated.
+        * accessibility/gtk/combobox-descendants-orientation-crash-expected.txt: Updated.
+
 2017-05-02  Myles C. Maxfield  <mmaxfield@apple.com>
 
         REGRESSION (r211382): Partial right-to-left text runs are painted at an offset (breaks Find indicators, Look Up, and custom ::selection style)
@@ -3,8 +3,11 @@ Implicit defaults
 Option
 Menu item 1
 menubar
+radio 1
 item one
 tree item
+cell
+cell2
 
 Authored orientation
 radio 1
@@ -17,15 +20,19 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS slider.orientation is 'AXOrientation: AXHorizontalOrientation'
-PASS combobox.orientation is 'AXOrientation: AXVerticalOrientation'
+PASS combobox.orientation is 'AXOrientation: AXUnknownOrientation'
 PASS listbox.orientation is 'AXOrientation: AXVerticalOrientation'
 PASS menu.orientation is 'AXOrientation: AXVerticalOrientation'
 PASS menubar.orientation is 'AXOrientation: AXHorizontalOrientation'
+PASS radiogroup.orientation is 'AXOrientation: AXUnknownOrientation'
+PASS separator.orientation is 'AXOrientation: AXHorizontalOrientation'
 PASS tablist.orientation is 'AXOrientation: AXHorizontalOrientation'
 PASS toolbar.orientation is 'AXOrientation: AXHorizontalOrientation'
 PASS tree.orientation is 'AXOrientation: AXVerticalOrientation'
-PASS radiogroup.orientation is 'AXOrientation: AXVerticalOrientation'
-PASS treegrid.orientation is 'AXOrientation: AXHorizontalOrientation'
+PASS treegrid.orientation is 'AXOrientation: AXUnknownOrientation'
+PASS radiogroup2.orientation is 'AXOrientation: AXVerticalOrientation'
+PASS treegrid2.orientation is 'AXOrientation: AXHorizontalOrientation'
+PASS separator2.orientation is 'AXOrientation: AXUnknownOrientation'
 PASS slider2.orientation is 'AXOrientation: AXUnknownOrientation'
 PASS successfullyParsed is true
 
@@ -1,7 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../resources/js-test-pre.js"></script>
 </head>
 <body id="body">
 
     <div role="menuitem" id="item1" tabindex="0">Menu item 1</div>
 </div>
 <div id="menubar" role="menubar">menubar</div>
+<div role="radiogroup" id="radiogroup">
+    <div role="radio" aria-label="radio 1" aria-checked="false">radio 1</div>
+</div>
+<div role="separator" id="separator"></div>
 <div role="tablist" id="tablist">
 <div role="toolbar" id="toolbar" aria-label="test toolbar"><li>item one</div>
 <ul id="tree" role="tree">
     <li id="treeitem1" role="treeitem">tree item</li>
 </ul>
+<table id="treegrid" role="treegrid">
+<tbody>
+    <tr><td role="gridcell" colspan="3">cell</tr>
+    <tr><td role="gridcell" colspan="3">cell2</tr>
+</tbody>
+</table>
 
 <br>
 <div>Authored orientation</div>
-<div role="radiogroup" id="radiogroup" aria-orientation="vertical">
+<div role="radiogroup" id="radiogroup2" aria-orientation="vertical">
     <div role="radio" aria-label="radio 1" aria-checked=false>radio 1</div>
 </div>
-<table id="treegrid" role="treegrid" aria-orientation="horizontal">
+<table id="treegrid2" role="treegrid" aria-orientation="horizontal">
 <tbody>
     <tr><td role="gridcell" colspan="3">cell</tr>
     <tr><td role="gridcell" colspan="3">cell2</tr>
 </tbody>
 </table>
+<div role="separator" id="separator2" aria-orientation="undefined"></div>
 <span role="slider" id="slider2" aria-orientation="undefined" aria-valuenow=5 aria-valuemin=0 aria-valuemax=10>X</span>
 
 <p id="description"></p>
@@ -47,7 +58,7 @@
           shouldBe("slider.orientation", "'AXOrientation: AXHorizontalOrientation'");
           
           var combobox = accessibilityController.accessibleElementById("combo");
-          shouldBe("combobox.orientation", "'AXOrientation: AXVerticalOrientation'");
+          shouldBe("combobox.orientation", "'AXOrientation: AXUnknownOrientation'");
           
           var listbox = accessibilityController.accessibleElementById("listbox");
           shouldBe("listbox.orientation", "'AXOrientation: AXVerticalOrientation'");
           
           var menubar = accessibilityController.accessibleElementById("menubar");
           shouldBe("menubar.orientation", "'AXOrientation: AXHorizontalOrientation'");
+
+          var radiogroup = accessibilityController.accessibleElementById("radiogroup");
+          shouldBe("radiogroup.orientation", "'AXOrientation: AXUnknownOrientation'");
+
+          var separator = accessibilityController.accessibleElementById("separator");
+          shouldBe("separator.orientation", "'AXOrientation: AXHorizontalOrientation'");
           
           var tablist = accessibilityController.accessibleElementById("tablist");
           shouldBe("tablist.orientation", "'AXOrientation: AXHorizontalOrientation'");
           
           var tree = accessibilityController.accessibleElementById("tree");
           shouldBe("tree.orientation", "'AXOrientation: AXVerticalOrientation'");
+
+          var treegrid = accessibilityController.accessibleElementById("treegrid");
+          shouldBe("treegrid.orientation", "'AXOrientation: AXUnknownOrientation'");
           
           // Test authored aria-orientation are correct.
-          var radiogroup = accessibilityController.accessibleElementById("radiogroup");
-          shouldBe("radiogroup.orientation", "'AXOrientation: AXVerticalOrientation'");
+          var radiogroup2 = accessibilityController.accessibleElementById("radiogroup2");
+          shouldBe("radiogroup2.orientation", "'AXOrientation: AXVerticalOrientation'");
           
-          var treegrid = accessibilityController.accessibleElementById("treegrid");
-          shouldBe("treegrid.orientation", "'AXOrientation: AXHorizontalOrientation'");
+          var treegrid2 = accessibilityController.accessibleElementById("treegrid2");
+          shouldBe("treegrid2.orientation", "'AXOrientation: AXHorizontalOrientation'");
+
+          var separator2 = accessibilityController.accessibleElementById("separator2");
+          shouldBe("separator2.orientation", "'AXOrientation: AXUnknownOrientation'");
           
           var slider2 = accessibilityController.accessibleElementById("slider2");
           shouldBe("slider2.orientation", "'AXOrientation: AXUnknownOrientation'");
 
 </script>
 
-<script src="../../resources/js-test-post.js"></script>
+<script src="../resources/js-test-post.js"></script>
 </body>
 </html>
index 42ad5b3..7a3d378 100644 (file)
@@ -6,12 +6,12 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 AXRole: AXComboBox has orientation: AXOrientation: AXHorizontalOrientation
 
 Before combobox removal
-AXRole: AXMenu has orientation: 
+AXRole: AXMenu has orientation: AXOrientation: AXUnknownOrientation
 AXRole: AXMenuItem has orientation: AXOrientation: AXHorizontalOrientation
 
 After combobox removal
-AXRole: AXInvalid has orientation: 
-AXRole: AXInvalid has orientation: 
+AXRole: AXInvalid has orientation: AXOrientation: AXUnknownOrientation
+AXRole: AXInvalid has orientation: AXOrientation: AXUnknownOrientation
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 8082381..b5797b3 100644 (file)
@@ -28,7 +28,7 @@
           var succeeded = obj.isDecrementActionSupported();
           shouldBe("succeeded", "true");
 
-          var succeeded = obj.stringAttributeValue("AXOrientation") == "AXVerticalOrientation";
+          var succeeded = obj.stringAttributeValue("AXOrientation") == "AXHorizontalOrientation";
           shouldBe("succeeded", "true");
 
           // test the input slider
index 2f537d0..562d306 100644 (file)
@@ -1,3 +1,23 @@
+2017-05-02  Joanmarie Diggs  <jdiggs@igalia.com>
+
+        AX: Update implementation of aria-orientation
+        https://bugs.webkit.org/show_bug.cgi?id=171166
+
+        Reviewed by Chris Fleizach.
+
+        Update AccessibilityRenderObject::orientation() to be consistent with what is
+        in the ARIA 1.1 spec. Also add an isTreeGrid() convenience method to be consistent
+        with what we do for other roles.
+
+        Test: accessibility/aria-orientation.html
+
+        * accessibility/AccessibilityARIAGridRow.cpp:
+        (WebCore::AccessibilityARIAGridRow::isARIATreeGridRow):
+        * accessibility/AccessibilityObject.h:
+        (WebCore::AccessibilityObject::isTreeGrid):
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::orientation):
+
 2017-05-02  Myles C. Maxfield  <mmaxfield@apple.com>
 
         REGRESSION (r211382): Partial right-to-left text runs are painted at an offset (breaks Find indicators, Look Up, and custom ::selection style)
index dd4fda5..5c15ec0 100644 (file)
@@ -55,7 +55,7 @@ bool AccessibilityARIAGridRow::isARIATreeGridRow() const
     if (!parent)
         return false;
     
-    return parent->ariaRoleAttribute() == TreeGridRole;
+    return parent->isTreeGrid();
 }
     
 void AccessibilityARIAGridRow::disclosedRows(AccessibilityChildrenVector& disclosedRows)
index 2d1df21..311c99f 100644 (file)
@@ -567,6 +567,7 @@ public:
     bool isRadioGroup() const { return roleValue() == RadioGroupRole; }
     bool isComboBox() const { return roleValue() == ComboBoxRole; }
     bool isTree() const { return roleValue() == TreeRole; }
+    bool isTreeGrid() const { return roleValue() == TreeGridRole; }
     bool isTreeItem() const { return roleValue() == TreeItemRole; }
     bool isScrollbar() const { return roleValue() == ScrollBarRole; }
     bool isButton() const;
index e4ad98c..f0ecaf9 100644 (file)
@@ -2829,12 +2829,16 @@ AccessibilityOrientation AccessibilityRenderObject::orientation() const
     if (equalLettersIgnoringASCIICase(ariaOrientation, "undefined"))
         return AccessibilityOrientationUndefined;
 
-    // ARIA 1.1 Implicit defaults are defined on some roles.
-    // http://www.w3.org/TR/wai-aria-1.1/#aria-orientation
-    if (isScrollbar() || isComboBox() || isListBox() || isMenu() || isTree())
+    // In ARIA 1.1, the implicit value of aria-orientation changed from horizontal
+    // to undefined on all roles that don't have their own role-specific values. In
+    // addition, the implicit value of combobox became undefined.
+    if (isComboBox() || isRadioGroup() || isTreeGrid())
+        return AccessibilityOrientationUndefined;
+
+    if (isScrollbar() || isListBox() || isMenu() || isTree())
         return AccessibilityOrientationVertical;
     
-    if (isMenuBar() || isSplitter() || isTabList() || isToolbar())
+    if (isMenuBar() || isSplitter() || isTabList() || isToolbar() || isSlider())
         return AccessibilityOrientationHorizontal;
     
     return AccessibilityObject::orientation();
index ae68d94..f7f0b7a 100644 (file)
@@ -1,3 +1,18 @@
+2017-05-02  Joanmarie Diggs  <jdiggs@igalia.com>
+
+        AX: Update implementation of aria-orientation
+        https://bugs.webkit.org/show_bug.cgi?id=171166
+
+        Reviewed by Chris Fleizach.
+
+        Return "AXUnknownOrientation" when ATK_STATE_VERTICAL and ATK_STATE_HORIZONTAL
+        are both absent from the state set. Before we were returning an empty string
+        which was not consistent with what the Mac port does, thus making shared tests
+        harder.
+
+        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
+        (WTR::AccessibilityUIElement::orientation):
+
 2017-05-01  David Kilzer  <ddkilzer@apple.com>
 
         Stop using sprintf() in JavaScriptCore debugger
index 0325525..a5c98fc 100644 (file)
@@ -1294,9 +1294,8 @@ JSRetainPtr<JSStringRef> AccessibilityUIElement::orientation() const
         axOrientation = "AXOrientation: AXHorizontalOrientation";
     else if (checkElementState(m_element.get(), ATK_STATE_VERTICAL))
         axOrientation = "AXOrientation: AXVerticalOrientation";
-
-    if (!axOrientation)
-        return JSStringCreateWithCharacters(0, 0);
+    else
+        axOrientation = "AXOrientation: AXUnknownOrientation";
 
     return JSStringCreateWithUTF8CString(axOrientation);
 }