Title: [192456] trunk
Revision
192456
Author
n_w...@apple.com
Date
2015-11-14 01:39:28 -0800 (Sat, 14 Nov 2015)

Log Message

AX: add a new trait for elements in fieldset on iOS
https://bugs.webkit.org/show_bug.cgi?id=151281

Reviewed by Chris Fleizach.

Source/WebCore:

Added a new trait for elements in the fieldset, so VoiceOver can speak the legend
information for those elements.

Test: accessibility/ios-simulator/fieldset-traits.html

* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
(-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):
(-[WebAccessibilityObjectWrapper _accessibilityFieldsetAncestor]):
(-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):

Tools:

* DumpRenderTree/AccessibilityUIElement.cpp:
(assistiveTechnologySimulatedFocusCallback):
(fieldsetAncestorElementCallback):
(childAtIndexCallback):
(getElementTextLengthCallback):
(hasContainedByFieldsetTraitCallback):
(AccessibilityUIElement::getJSClass):
* DumpRenderTree/AccessibilityUIElement.h:
* DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
(AccessibilityUIElement::elementTextLength):
(AccessibilityUIElement::hasContainedByFieldsetTrait):
(AccessibilityUIElement::fieldsetAncestorElement):
(AccessibilityUIElement::url):
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
(WTR::AccessibilityUIElement::scrollPageDown):
(WTR::AccessibilityUIElement::scrollPageLeft):
(WTR::AccessibilityUIElement::scrollPageRight):
(WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
(WTR::AccessibilityUIElement::fieldsetAncestorElement):
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
* WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
* WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
(WTR::AccessibilityUIElement::identifier):
(WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
(WTR::AccessibilityUIElement::fieldsetAncestorElement):
(WTR::AccessibilityUIElement::rowCount):

LayoutTests:

* accessibility/ios-simulator/fieldset-traits-expected.txt: Added.
* accessibility/ios-simulator/fieldset-traits.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (192455 => 192456)


--- trunk/LayoutTests/ChangeLog	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/LayoutTests/ChangeLog	2015-11-14 09:39:28 UTC (rev 192456)
@@ -1,3 +1,13 @@
+2015-11-14  Nan Wang  <n_w...@apple.com>
+
+        AX: add a new trait for elements in fieldset on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=151281
+
+        Reviewed by Chris Fleizach.
+
+        * accessibility/ios-simulator/fieldset-traits-expected.txt: Added.
+        * accessibility/ios-simulator/fieldset-traits.html: Added.
+
 2015-11-13  Zalan Bujtas  <za...@apple.com>
 
         Always render at least a device pixel line when border/outline width > 0.

Added: trunk/LayoutTests/accessibility/ios-simulator/fieldset-traits-expected.txt (0 => 192456)


--- trunk/LayoutTests/accessibility/ios-simulator/fieldset-traits-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/fieldset-traits-expected.txt	2015-11-14 09:39:28 UTC (rev 192456)
@@ -0,0 +1,14 @@
+Personalia:
+Name: 
+Email: 
+This tests that elements in a fieldset are having the correct traits.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS inputname.hasContainedByFieldsetTrait is true
+PASS fieldset.isEqual(inputname.fieldsetAncestorElement()) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/accessibility/ios-simulator/fieldset-traits.html (0 => 192456)


--- trunk/LayoutTests/accessibility/ios-simulator/fieldset-traits.html	                        (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/fieldset-traits.html	2015-11-14 09:39:28 UTC (rev 192456)
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script>
+var successfullyParsed = false;
+</script>
+<script src=""
+</head>
+<body id="body">
+
+<form>
+<fieldset id="fieldset">
+<legend>Personalia:</legend>
+Name: <input type="text" id="inputname"><br>
+Email: <input type="text"><br>
+</fieldset>
+</form>
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+    description("This tests that elements in a fieldset are having the correct traits.");
+
+    if (window.accessibilityController) {
+
+        var inputname = accessibilityController.accessibleElementById("inputname");
+        var fieldset = accessibilityController.accessibleElementById("fieldset");
+        shouldBeTrue("inputname.hasContainedByFieldsetTrait");
+        shouldBeTrue("fieldset.isEqual(inputname.fieldsetAncestorElement())");
+    }
+
+    successfullyParsed = true;
+</script>
+
+<script src=""
+</body>
+</html>
+

Modified: trunk/Source/WebCore/ChangeLog (192455 => 192456)


--- trunk/Source/WebCore/ChangeLog	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Source/WebCore/ChangeLog	2015-11-14 09:39:28 UTC (rev 192456)
@@ -1,3 +1,21 @@
+2015-11-14  Nan Wang  <n_w...@apple.com>
+
+        AX: add a new trait for elements in fieldset on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=151281
+
+        Reviewed by Chris Fleizach.
+
+        Added a new trait for elements in the fieldset, so VoiceOver can speak the legend
+        information for those elements.
+
+        Test: accessibility/ios-simulator/fieldset-traits.html
+
+        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
+        (-[WebAccessibilityObjectWrapper accessibilityCanFuzzyHitTest]):
+        (-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):
+        (-[WebAccessibilityObjectWrapper _accessibilityFieldsetAncestor]):
+        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
+
 2015-11-13  Commit Queue  <commit-qu...@webkit.org>
 
         Unreviewed, rolling out r192445, r192451, and r192452.

Modified: trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (192455 => 192456)


--- trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm	2015-11-14 09:39:28 UTC (rev 192456)
@@ -271,6 +271,7 @@
 - (uint64_t)_axSelectedTrait { return (1 << 19); }
 - (uint64_t)_axNotEnabledTrait { return (1 << 20); }
 - (uint64_t)_axRadioButtonTrait { return (1 << 21); }
+- (uint64_t)_axContainedByFieldsetTrait { return (1 << 22); }
 
 - (BOOL)accessibilityCanFuzzyHitTest
 {
@@ -494,6 +495,16 @@
     return nil;
 }
 
+- (AccessibilityObjectWrapper*)_accessibilityFieldsetAncestor
+{
+    for (AccessibilityObject* parent = m_object->parentObject(); parent != nil; parent = parent->parentObject()) {
+        if (parent->isFieldset())
+            return parent->wrapper();
+    }
+    
+    return nil;
+}
+
 - (uint64_t)_accessibilityTraitsFromAncestors
 {
     uint64_t traits = 0;
@@ -538,6 +549,10 @@
                     traits |= [self _axContainedByLandmarkTrait];
                 break;
         }
+        
+        // If this object has fieldset parent, we should add containedByFieldsetTrait to it.
+        if (parent->isFieldset())
+            traits |= [self _axContainedByFieldsetTrait];
     }
     
     return traits;

Modified: trunk/Tools/ChangeLog (192455 => 192456)


--- trunk/Tools/ChangeLog	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Tools/ChangeLog	2015-11-14 09:39:28 UTC (rev 192456)
@@ -1,3 +1,37 @@
+2015-11-14  Nan Wang  <n_w...@apple.com>
+
+        AX: add a new trait for elements in fieldset on iOS
+        https://bugs.webkit.org/show_bug.cgi?id=151281
+
+        Reviewed by Chris Fleizach.
+
+        * DumpRenderTree/AccessibilityUIElement.cpp:
+        (assistiveTechnologySimulatedFocusCallback):
+        (fieldsetAncestorElementCallback):
+        (childAtIndexCallback):
+        (getElementTextLengthCallback):
+        (hasContainedByFieldsetTraitCallback):
+        (AccessibilityUIElement::getJSClass):
+        * DumpRenderTree/AccessibilityUIElement.h:
+        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
+        (AccessibilityUIElement::elementTextLength):
+        (AccessibilityUIElement::hasContainedByFieldsetTrait):
+        (AccessibilityUIElement::fieldsetAncestorElement):
+        (AccessibilityUIElement::url):
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
+        (WTR::AccessibilityUIElement::scrollPageDown):
+        (WTR::AccessibilityUIElement::scrollPageLeft):
+        (WTR::AccessibilityUIElement::scrollPageRight):
+        (WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
+        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
+        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
+        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
+        (WTR::AccessibilityUIElement::identifier):
+        (WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
+        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
+        (WTR::AccessibilityUIElement::rowCount):
+
 2015-11-13  Keith Miller  <keith_mil...@apple.com>
 
         Unreviewed, change _javascript_Core watchlist to exclude inspector things.

Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp (192455 => 192456)


--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp	2015-11-14 09:39:28 UTC (rev 192456)
@@ -364,6 +364,11 @@
     return JSValueMakeUndefined(context);
 }
 
+static JSValueRef fieldsetAncestorElementCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    return AccessibilityUIElement::makeJSAccessibilityUIElement(context, toAXElement(thisObject)->fieldsetAncestorElement());
+}
+
 #endif
 
 static JSValueRef childAtIndexCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
@@ -1373,8 +1378,11 @@
     return JSValueMakeNumber(context, toAXElement(thisObject)->elementTextLength());
 }
 
+static JSValueRef hasContainedByFieldsetTraitCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef, JSValueRef*)
+{
+    return JSValueMakeBoolean(context, toAXElement(thisObject)->hasContainedByFieldsetTrait());
+}
 
-
 #endif // PLATFORM(IOS)
 
 #if PLATFORM(MAC) && !PLATFORM(IOS)
@@ -1631,6 +1639,7 @@
         { "elementTextPosition", getElementTextPositionCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "elementTextLength", getElementTextLengthCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "stringForSelection", stringForSelectionCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "hasContainedByFieldsetTrait", hasContainedByFieldsetTraitCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
 #endif // PLATFORM(IOS)
 #if PLATFORM(MAC) && !PLATFORM(IOS)
         { "supportedActions", supportedActionsCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
@@ -1748,6 +1757,7 @@
         { "scrollPageLeft", scrollPageLeftCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "scrollPageRight", scrollPageRightCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "assistiveTechnologySimulatedFocus", assistiveTechnologySimulatedFocusCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "fieldsetAncestorElement", fieldsetAncestorElementCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
 #endif
         { 0, 0, 0 }
     };

Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.h (192455 => 192456)


--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.h	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.h	2015-11-14 09:39:28 UTC (rev 192456)
@@ -226,6 +226,9 @@
     bool scrollPageDown();
     bool scrollPageLeft();
     bool scrollPageRight();
+    
+    bool hasContainedByFieldsetTrait();
+    AccessibilityUIElement fieldsetAncestorElement();
 #endif
 
 #if PLATFORM(GTK) || PLATFORM(EFL)

Modified: trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm (192455 => 192456)


--- trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm	2015-11-14 09:39:28 UTC (rev 192456)
@@ -90,6 +90,8 @@
 - (NSUInteger)accessibilityARIAColumnCount;
 - (NSUInteger)accessibilityARIARowIndex;
 - (NSUInteger)accessibilityARIAColumnIndex;
+- (UIAccessibilityTraits)_axContainedByFieldsetTrait;
+- (id)_accessibilityFieldsetAncestor;
 @end
 
 @interface NSObject (WebAccessibilityObjectWrapperPrivate)
@@ -134,6 +136,22 @@
     return range.length;    
 }
 
+bool AccessibilityUIElement::hasContainedByFieldsetTrait()
+{
+    UIAccessibilityTraits traits = [m_element accessibilityTraits];
+    return (traits & [m_element _axContainedByFieldsetTrait]) == [m_element _axContainedByFieldsetTrait];
+}
+
+AccessibilityUIElement AccessibilityUIElement::fieldsetAncestorElement()
+{
+    id ancestorElement = [m_element _accessibilityFieldsetAncestor];
+    if (ancestorElement)
+        return AccessibilityUIElement(ancestorElement);
+    
+    return nullptr;
+}
+
+
 JSStringRef AccessibilityUIElement::url()
 {
     NSURL *url = "" accessibilityURL];

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp (192455 => 192456)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp	2015-11-14 09:39:28 UTC (rev 192456)
@@ -70,6 +70,8 @@
 bool AccessibilityUIElement::scrollPageDown() { return false; }
 bool AccessibilityUIElement::scrollPageLeft() { return false; }
 bool AccessibilityUIElement::scrollPageRight() { return false; }
+bool AccessibilityUIElement::hasContainedByFieldsetTrait() { return false; }
+PassRefPtr<AccessibilityUIElement> AccessibilityUIElement::fieldsetAncestorElement() { return nullptr; }
 #endif
     
 // Unsupported methods on various platforms. As they're implemented on other platforms this list should be modified.

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h (192455 => 192456)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2015-11-14 09:39:28 UTC (rev 192456)
@@ -282,6 +282,10 @@
     bool scrollPageLeft();
     bool scrollPageRight();
     
+    // Fieldset
+    bool hasContainedByFieldsetTrait();
+    PassRefPtr<AccessibilityUIElement> fieldsetAncestorElement();
+    
 private:
     AccessibilityUIElement(PlatformUIElement);
     AccessibilityUIElement(const AccessibilityUIElement&);

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl (192455 => 192456)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl	2015-11-14 09:39:28 UTC (rev 192456)
@@ -223,6 +223,10 @@
     // This will simulate the accessibilityDidBecomeFocused API in UIKit.
     void assistiveTechnologySimulatedFocus();
 
+    // Fieldset
+    readonly attribute boolean hasContainedByFieldsetTrait;
+    AccessibilityUIElement fieldsetAncestorElement();
+
     // Notification support.
     boolean addNotificationListener(object callbackFunction);
     boolean removeNotificationListener();

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm (192455 => 192456)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm	2015-11-14 05:51:27 UTC (rev 192455)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm	2015-11-14 09:39:28 UTC (rev 192456)
@@ -67,6 +67,8 @@
 - (NSUInteger)accessibilityARIAColumnCount;
 - (NSUInteger)accessibilityARIARowIndex;
 - (NSUInteger)accessibilityARIAColumnIndex;
+- (UIAccessibilityTraits)_axContainedByFieldsetTrait;
+- (id)_accessibilityFieldsetAncestor;
 @end
 
 @interface NSObject (WebAccessibilityObjectWrapperPrivate)
@@ -672,6 +674,21 @@
     return concatenateAttributeAndValue(@"AXIdentifier", [m_element accessibilityIdentifier]);
 }
 
+bool AccessibilityUIElement::hasContainedByFieldsetTrait()
+{
+    UIAccessibilityTraits traits = [m_element accessibilityTraits];
+    return (traits & [m_element _axContainedByFieldsetTrait]) == [m_element _axContainedByFieldsetTrait];
+}
+
+PassRefPtr<AccessibilityUIElement> AccessibilityUIElement::fieldsetAncestorElement()
+{
+    id ancestorElement = [m_element _accessibilityFieldsetAncestor];
+    if (ancestorElement)
+        return AccessibilityUIElement::create(ancestorElement);
+    
+    return nullptr;
+}
+
 int AccessibilityUIElement::rowCount()
 {
     return [m_element accessibilityRowCount];
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to