Title: [127882] trunk
Revision
127882
Author
dmazz...@google.com
Date
2012-09-07 10:07:25 -0700 (Fri, 07 Sep 2012)

Log Message

Source/WebCore: AX: ARIA spin button should support range value attributes
https://bugs.webkit.org/show_bug.cgi?id=96076

Reviewed by Chris Fleizach.

Make an ARIA spin button support ARIA range attributes like
aria-valuenow, aria-valuemin, etc. - just like slider, progressbar,
and scrollbar.

Test: accessibility/spinbutton-value.html

* accessibility/AccessibilityObject.h:
(WebCore::AccessibilityObject::isSpinButton):
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::valueDescription):
(WebCore):
(WebCore::AccessibilityRenderObject::isAriaRange):
(WebCore::AccessibilityRenderObject::valueForRange):
(WebCore::AccessibilityRenderObject::maxValueForRange):
(WebCore::AccessibilityRenderObject::minValueForRange):
(WebCore::AccessibilityRenderObject::stringValue):
(WebCore::AccessibilityRenderObject::title):
(WebCore::AccessibilityRenderObject::isGenericFocusableElement):
(WebCore::AccessibilityRenderObject::ariaRoleHasPresentationalChildren):
* accessibility/AccessibilityRenderObject.h:
(AccessibilityRenderObject):
* accessibility/mac/WebAccessibilityObjectWrapper.mm:
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

Source/WebKit/chromium: AX: ARIA spin button should support range value attributes
https://bugs.webkit.org/show_bug.cgi?id=96076

Reviewed by Chris Fleizach.

Expose supportsRangeValue to simplify Chromium logic for when to
extract a value from a range.

* public/WebAccessibilityObject.h:
(WebAccessibilityObject):
* src/WebAccessibilityObject.cpp:
(WebKit::WebAccessibilityObject::supportsRangeValue):
(WebKit):

Tools: New time input needs accessibility
https://bugs.webkit.org/show_bug.cgi?id=96032

Reviewed by Chris Fleizach.

Add support for valueDescription for testing.

* DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
(getValueDescription):
(AccessibilityUIElement::AccessibilityUIElement):
(AccessibilityUIElement::valueDescriptionGetterCallback):
* DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.h:
(AccessibilityUIElement):

LayoutTests: AX: ARIA spin button should support range value attributes
https://bugs.webkit.org/show_bug.cgi?id=96076

Reviewed by Chris Fleizach.

Test that an ARIA spin button exposes ARIA range attributes like
aria-valuenow, aria-valuemin, etc.

* accessibility/spinbutton-value-expected.txt: Added.
* accessibility/spinbutton-value.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (127881 => 127882)


--- trunk/LayoutTests/ChangeLog	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/LayoutTests/ChangeLog	2012-09-07 17:07:25 UTC (rev 127882)
@@ -1,3 +1,16 @@
+2012-09-07  Dominic Mazzoni  <dmazz...@google.com>
+
+        AX: ARIA spin button should support range value attributes
+        https://bugs.webkit.org/show_bug.cgi?id=96076
+
+        Reviewed by Chris Fleizach.
+
+        Test that an ARIA spin button exposes ARIA range attributes like
+        aria-valuenow, aria-valuemin, etc.
+
+        * accessibility/spinbutton-value-expected.txt: Added.
+        * accessibility/spinbutton-value.html: Added.
+
 2012-09-07  Christophe Dumez  <christophe.du...@intel.com>
 
         [EFL][WK2] Unskip test cases that are now passing consistently

Added: trunk/LayoutTests/accessibility/spinbutton-value-expected.txt (0 => 127882)


--- trunk/LayoutTests/accessibility/spinbutton-value-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/accessibility/spinbutton-value-expected.txt	2012-09-07 17:07:25 UTC (rev 127882)
@@ -0,0 +1,16 @@
+
+42
+This tests that a spin button supports range value attributes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS endsWith(axSpin.intValue, '5') is true
+PASS endsWith(axSpin.minValue, '1') is true
+PASS endsWith(axSpin.maxValue, '9') is true
+PASS endsWith(axSpin.valueDescription, '5 of 9') is true
+PASS axSpin.title is axUntitled.title
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/accessibility/spinbutton-value.html (0 => 127882)


--- trunk/LayoutTests/accessibility/spinbutton-value.html	                        (rev 0)
+++ trunk/LayoutTests/accessibility/spinbutton-value.html	2012-09-07 17:07:25 UTC (rev 127882)
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML>
+<html>
+<body>
+<script src=""
+
+<button id="untitled"></button>
+
+<div id="spin"
+     tabindex="0"
+     role="spinbutton"
+     aria-valuetext="5 of 9"
+     aria-valuemin="1"
+     aria-valuemax="9"
+     aria-valuenow="5">42</div>
+
+<div id="console"></div>
+<script>
+description("This tests that a spin button supports range value attributes.")
+
+if (window.testRunner && window.accessibilityController) {
+    window.testRunner.dumpAsText();
+
+    function endsWith(str, suffix) {
+        str = '' + str;
+        return str.substr(str.length - suffix.length) == suffix;
+    }
+
+    var untitled = document.getElementById('untitled');
+    untitled.focus();
+    window.axUntitled = accessibilityController.focusedElement;
+
+    var spin = document.getElementById('spin');
+    spin.focus();
+    window.axSpin = accessibilityController.focusedElement;
+
+    // Test range value attributes.
+    shouldBe("endsWith(axSpin.intValue, '5')", "true");
+    shouldBe("endsWith(axSpin.minValue, '1')", "true");
+    shouldBe("endsWith(axSpin.maxValue, '9')", "true");
+    shouldBe("endsWith(axSpin.valueDescription, '5 of 9')", "true");
+
+    // Make sure the title doesn't come from the inner text. It should just be empty if
+    // not otherwise specified.
+    shouldBe("axSpin.title", "axUntitled.title");
+}
+
+</script>
+
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (127881 => 127882)


--- trunk/Source/WebCore/ChangeLog	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Source/WebCore/ChangeLog	2012-09-07 17:07:25 UTC (rev 127882)
@@ -1,3 +1,34 @@
+2012-09-07  Dominic Mazzoni  <dmazz...@google.com>
+
+        AX: ARIA spin button should support range value attributes
+        https://bugs.webkit.org/show_bug.cgi?id=96076
+
+        Reviewed by Chris Fleizach.
+
+        Make an ARIA spin button support ARIA range attributes like
+        aria-valuenow, aria-valuemin, etc. - just like slider, progressbar,
+        and scrollbar.
+
+        Test: accessibility/spinbutton-value.html
+
+        * accessibility/AccessibilityObject.h:
+        (WebCore::AccessibilityObject::isSpinButton):
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::valueDescription):
+        (WebCore):
+        (WebCore::AccessibilityRenderObject::isAriaRange):
+        (WebCore::AccessibilityRenderObject::valueForRange):
+        (WebCore::AccessibilityRenderObject::maxValueForRange):
+        (WebCore::AccessibilityRenderObject::minValueForRange):
+        (WebCore::AccessibilityRenderObject::stringValue):
+        (WebCore::AccessibilityRenderObject::title):
+        (WebCore::AccessibilityRenderObject::isGenericFocusableElement):
+        (WebCore::AccessibilityRenderObject::ariaRoleHasPresentationalChildren):
+        * accessibility/AccessibilityRenderObject.h:
+        (AccessibilityRenderObject):
+        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
+        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
+
 2012-09-07  Sheriff Bot  <webkit.review....@gmail.com>
 
         Unreviewed, rolling out r127820.

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (127881 => 127882)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2012-09-07 17:07:25 UTC (rev 127882)
@@ -1556,6 +1556,14 @@
     
     return SortDirectionNone;
 }
+
+bool AccessibilityObject::supportsRangeValue() const
+{
+    return isProgressIndicator()
+        || isSlider()
+        || isScrollbar()
+        || isSpinButton();
+}
     
 bool AccessibilityObject::supportsARIAExpanded() const
 {

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (127881 => 127882)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.h	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h	2012-09-07 17:07:25 UTC (rev 127882)
@@ -366,7 +366,7 @@
     virtual bool isMenuList() const { return false; }
     virtual bool isMenuListPopup() const { return false; }
     virtual bool isMenuListOption() const { return false; }
-    virtual bool isSpinButton() const { return false; }
+    virtual bool isSpinButton() const { return roleValue() == SpinButtonRole; }
     virtual bool isSpinButtonPart() const { return false; }
     virtual bool isMockObject() const { return false; }
     bool isTextControl() const { return roleValue() == TextAreaRole || roleValue() == TextFieldRole; }
@@ -461,6 +461,7 @@
     bool supportsARIAExpanded() const;
     AccessibilitySortDirection sortDirection() const;
     virtual bool canvasHasFallbackContent() const { return false; }
+    bool supportsRangeValue() const;
     
     // ARIA drag and drop
     virtual bool supportsARIADropping() const { return false; }

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (127881 => 127882)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2012-09-07 17:07:25 UTC (rev 127882)
@@ -1156,8 +1156,7 @@
 
 String AccessibilityRenderObject::valueDescription() const
 {
-    // Only sliders and progress bars support value descriptions currently.
-    if (!isProgressIndicator() && !isSlider())
+    if (!isARIARange())
         return String();
     
     return getAttribute(aria_valuetextAttr).string();
@@ -1167,10 +1166,18 @@
 {
     return getAttribute(stepAttr).toFloat();
 }
+
+bool AccessibilityRenderObject::isARIARange() const
+{
+    return m_ariaRole == ProgressIndicatorRole
+        || m_ariaRole == SliderRole
+        || m_ariaRole == ScrollBarRole
+        || m_ariaRole == SpinButtonRole;
+}
     
 float AccessibilityRenderObject::valueForRange() const
 {
-    if (!isProgressIndicator() && !isSlider() && !isScrollbar())
+    if (!isARIARange())
         return 0.0f;
 
     return getAttribute(aria_valuenowAttr).toFloat();
@@ -1178,7 +1185,7 @@
 
 float AccessibilityRenderObject::maxValueForRange() const
 {
-    if (!isProgressIndicator() && !isSlider())
+    if (!isARIARange())
         return 0.0f;
 
     return getAttribute(aria_valuemaxAttr).toFloat();
@@ -1186,7 +1193,7 @@
 
 float AccessibilityRenderObject::minValueForRange() const
 {
-    if (!isProgressIndicator() && !isSlider())
+    if (!isARIARange())
         return 0.0f;
 
     return getAttribute(aria_valueminAttr).toFloat();
@@ -1398,7 +1405,7 @@
     default:
         break;
     }
-    
+   
     if (isHeading() || isLink())
         return textUnderElement();
 
@@ -3140,6 +3147,10 @@
     if (isControl())
         return false;
 
+    // If it has an aria role, it's not generic.
+    if (m_ariaRole != UnknownRole)
+        return false;
+
     // If the content editable attribute is set on this element, that's the reason
     // it's focusable, and existing logic should handle this case already - so it's not a
     // generic focusable element.
@@ -3376,6 +3387,7 @@
     case SliderRole:
     case ImageRole:
     case ProgressIndicatorRole:
+    case SpinButtonRole:
     // case SeparatorRole:
         return true;
     default:

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h (127881 => 127882)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h	2012-09-07 17:07:25 UTC (rev 127882)
@@ -302,6 +302,7 @@
     bool isDescendantOfElementType(const QualifiedName& tagName) const;
     // This returns true if it's focusable but it's not content editable and it's not a control or ARIA control.
     bool isGenericFocusableElement() const;
+    bool isARIARange() const;
 
     void addTextFieldChildren();
     void addImageMapChildren();

Modified: trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm (127881 => 127882)


--- trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm	2012-09-07 17:07:25 UTC (rev 127882)
@@ -1999,7 +1999,7 @@
             if ([[[self attachmentView] accessibilityAttributeNames] containsObject:NSAccessibilityValueAttribute]) 
                 return [[self attachmentView] accessibilityAttributeValue:NSAccessibilityValueAttribute];
         }
-        if (m_object->isProgressIndicator() || m_object->isSlider() || m_object->isScrollbar())
+        if (m_object->supportsRangeValue())
             return [NSNumber numberWithFloat:m_object->valueForRange()];
         if (m_object->roleValue() == SliderThumbRole)
             return [NSNumber numberWithFloat:m_object->parentObject()->valueForRange()];

Modified: trunk/Source/WebKit/chromium/ChangeLog (127881 => 127882)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-09-07 17:07:25 UTC (rev 127882)
@@ -1,3 +1,19 @@
+2012-09-07  Dominic Mazzoni  <dmazz...@google.com>
+
+        AX: ARIA spin button should support range value attributes
+        https://bugs.webkit.org/show_bug.cgi?id=96076
+
+        Reviewed by Chris Fleizach.
+
+        Expose supportsRangeValue to simplify Chromium logic for when to
+        extract a value from a range.
+
+        * public/WebAccessibilityObject.h:
+        (WebAccessibilityObject):
+        * src/WebAccessibilityObject.cpp:
+        (WebKit::WebAccessibilityObject::supportsRangeValue):
+        (WebKit):
+
 2012-09-07  Allan Sandfeld Jensen  <allan.jen...@nokia.com>
 
         Simplify hitTestResultAtPoint and nodesFromRect APIs

Modified: trunk/Source/WebKit/chromium/public/WebAccessibilityObject.h (127881 => 127882)


--- trunk/Source/WebKit/chromium/public/WebAccessibilityObject.h	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Source/WebKit/chromium/public/WebAccessibilityObject.h	2012-09-07 17:07:25 UTC (rev 127882)
@@ -149,6 +149,7 @@
     WEBKIT_EXPORT WebAccessibilityObject titleUIElement() const;
     WEBKIT_EXPORT WebURL url() const;
 
+    WEBKIT_EXPORT bool supportsRangeValue() const;
     WEBKIT_EXPORT WebString valueDescription() const;
     WEBKIT_EXPORT float valueForRange() const;
     WEBKIT_EXPORT float maxValueForRange() const;

Modified: trunk/Source/WebKit/chromium/src/WebAccessibilityObject.cpp (127881 => 127882)


--- trunk/Source/WebKit/chromium/src/WebAccessibilityObject.cpp	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Source/WebKit/chromium/src/WebAccessibilityObject.cpp	2012-09-07 17:07:25 UTC (rev 127882)
@@ -610,6 +610,14 @@
     return m_private->url();
 }
 
+bool WebAccessibilityObject::supportsRangeValue() const
+{
+    if (isDetached())
+        return false;
+
+    return m_private->supportsRangeValue();
+}
+
 WebString WebAccessibilityObject::valueDescription() const
 {
     if (isDetached())

Modified: trunk/Tools/ChangeLog (127881 => 127882)


--- trunk/Tools/ChangeLog	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Tools/ChangeLog	2012-09-07 17:07:25 UTC (rev 127882)
@@ -1,3 +1,19 @@
+2012-09-07  Dominic Mazzoni <dmazz...@google.com>
+
+        New time input needs accessibility
+        https://bugs.webkit.org/show_bug.cgi?id=96032
+
+        Reviewed by Chris Fleizach.
+
+        Add support for valueDescription for testing.
+
+        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
+        (getValueDescription):
+        (AccessibilityUIElement::AccessibilityUIElement):
+        (AccessibilityUIElement::valueDescriptionGetterCallback):
+        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.h:
+        (AccessibilityUIElement):
+
 2012-09-07  Peter Beverloo  <pe...@chromium.org>
 
         Add the google-android-tests build slave to the master's config

Modified: trunk/Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp (127881 => 127882)


--- trunk/Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp	2012-09-07 17:07:25 UTC (rev 127882)
@@ -251,6 +251,12 @@
     return "AXOrientation: AXHorizontalOrientation";
 }
 
+string getValueDescription(const WebAccessibilityObject& object)
+{
+    string valueDescription = object.valueDescription().utf8();
+    return valueDescription.insert(0, "AXValueDescription: ");
+}
+
 string getAttributes(const WebAccessibilityObject& object)
 {
     // FIXME: Concatenate all attributes of the AccessibilityObject.
@@ -303,6 +309,7 @@
     bindProperty("intValue", &AccessibilityUIElement::intValueGetterCallback);
     bindProperty("minValue", &AccessibilityUIElement::minValueGetterCallback);
     bindProperty("maxValue", &AccessibilityUIElement::maxValueGetterCallback);
+    bindProperty("valueDescription", &AccessibilityUIElement::valueDescriptionGetterCallback);
     bindProperty("childrenCount", &AccessibilityUIElement::childrenCountGetterCallback);
     bindProperty("insertionPointLineNumber", &AccessibilityUIElement::insertionPointLineNumberGetterCallback);
     bindProperty("selectedTextRange", &AccessibilityUIElement::selectedTextRangeGetterCallback);
@@ -452,6 +459,11 @@
     result->set(accessibilityObject().maxValueForRange());
 }
 
+void AccessibilityUIElement::valueDescriptionGetterCallback(CppVariant* result)
+{
+    result->set(getValueDescription(accessibilityObject()));
+}
+
 void AccessibilityUIElement::childrenCountGetterCallback(CppVariant* result)
 {
     int count = 1; // Root object always has only one child, the WebView.

Modified: trunk/Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.h (127881 => 127882)


--- trunk/Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.h	2012-09-07 17:02:32 UTC (rev 127881)
+++ trunk/Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.h	2012-09-07 17:07:25 UTC (rev 127882)
@@ -71,6 +71,7 @@
     void intValueGetterCallback(CppVariant*);
     void minValueGetterCallback(CppVariant*);
     void maxValueGetterCallback(CppVariant*);
+    void valueDescriptionGetterCallback(CppVariant*);
     void childrenCountGetterCallback(CppVariant*);
     void insertionPointLineNumberGetterCallback(CppVariant*);
     void selectedTextRangeGetterCallback(CppVariant*);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to