Title: [194054] trunk
Revision
194054
Author
[email protected]
Date
2015-12-14 13:12:22 -0800 (Mon, 14 Dec 2015)

Log Message

AX: iOS: Text field variations do not have the correct traits
https://bugs.webkit.org/show_bug.cgi?id=152237

Reviewed by Mario Sanchez Prada.

Source/WebCore:

Make search fields and text areas use the appropriate iOS traits to 
distinguish them.

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

* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
(-[WebAccessibilityObjectWrapper _accessibilityTextEntryTraits]):
(-[WebAccessibilityObjectWrapper accessibilityTraits]):

Tools:

Add iOS calls for determing if an object is a search field or a text area.

* DumpRenderTree/AccessibilityUIElement.cpp:
(getIsSearchFieldCallback):
(getIsTextAreaCallback):
(stringForSelectionCallback):
(AccessibilityUIElement::getJSClass):
* DumpRenderTree/AccessibilityUIElement.h:
* DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
(AccessibilityUIElement::identifier):
(AccessibilityUIElement::isTextArea):
(AccessibilityUIElement::isSearchField):
(AccessibilityUIElement::traits):
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
(WTR::AccessibilityUIElement::scrollPageRight):
(WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
(WTR::AccessibilityUIElement::fieldsetAncestorElement):
(WTR::AccessibilityUIElement::isSearchField):
(WTR::AccessibilityUIElement::isTextArea):
* WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
* WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
* WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
(WTR::AccessibilityUIElement::fieldsetAncestorElement):
(WTR::AccessibilityUIElement::isTextArea):
(WTR::AccessibilityUIElement::isSearchField):
(WTR::AccessibilityUIElement::rowCount):

LayoutTests:

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

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (194053 => 194054)


--- trunk/LayoutTests/ChangeLog	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/LayoutTests/ChangeLog	2015-12-14 21:12:22 UTC (rev 194054)
@@ -1,3 +1,13 @@
+2015-12-14  Chris Fleizach  <[email protected]>
+
+        AX: iOS: Text field variations do not have the correct traits
+        https://bugs.webkit.org/show_bug.cgi?id=152237
+
+        Reviewed by Mario Sanchez Prada.
+
+        * accessibility/ios-simulator/textentry-traits-expected.txt: Added.
+        * accessibility/ios-simulator/textentry-traits.html: Added.
+
 2015-12-14  Ryan Haddad  <[email protected]>
 
         Marking fast/viewport/ios/width-is-device-width-overflowing* tests as failing on iOS simulator

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


--- trunk/LayoutTests/accessibility/ios-simulator/textentry-traits-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/textentry-traits-expected.txt	2015-12-14 21:12:22 UTC (rev 194054)
@@ -0,0 +1,13 @@
+  
+This tests that input type: time is accessible on iOS.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS accessibilityController.accessibleElementById('text1').isSearchField || accessibilityController.accessibleElementById('text1').isTextArea is false
+PASS accessibilityController.accessibleElementById('text2').isSearchField is true
+PASS accessibilityController.accessibleElementById('text3').isTextArea is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

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


--- trunk/LayoutTests/accessibility/ios-simulator/textentry-traits.html	                        (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/textentry-traits.html	2015-12-14 21:12:22 UTC (rev 194054)
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script>
+var successfullyParsed = false;
+</script>
+<script src=""
+</head>
+<body id="body">
+
+<input type="text" id="text1">
+<input type="search" id="text2">
+<textarea id="text3"></textarea>
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+    description("This tests that input type: time is accessible on iOS.");
+
+    if (window.accessibilityController) {
+
+        // Regular text input should not be a search field or text area.
+        shouldBeFalse("accessibilityController.accessibleElementById('text1').isSearchField || accessibilityController.accessibleElementById('text1').isTextArea");
+
+        shouldBeTrue("accessibilityController.accessibleElementById('text2').isSearchField");
+        shouldBeTrue("accessibilityController.accessibleElementById('text3').isTextArea");
+    }
+
+    successfullyParsed = true;
+</script>
+
+<script src=""
+</body>
+</html>
+

Modified: trunk/Source/WebCore/ChangeLog (194053 => 194054)


--- trunk/Source/WebCore/ChangeLog	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Source/WebCore/ChangeLog	2015-12-14 21:12:22 UTC (rev 194054)
@@ -1,3 +1,20 @@
+2015-12-14  Chris Fleizach  <[email protected]>
+
+        AX: iOS: Text field variations do not have the correct traits
+        https://bugs.webkit.org/show_bug.cgi?id=152237
+
+        Reviewed by Mario Sanchez Prada.
+
+        Make search fields and text areas use the appropriate iOS traits to 
+        distinguish them.
+
+        Test: accessibility/ios-simulator/textentry-traits.html
+
+        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
+        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
+        (-[WebAccessibilityObjectWrapper _accessibilityTextEntryTraits]):
+        (-[WebAccessibilityObjectWrapper accessibilityTraits]):
+
 2015-12-14  Tim Horton  <[email protected]>
 
         Remove some Mavericks guards in ServicesOverlayController

Modified: trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (194053 => 194054)


--- trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm	2015-12-14 21:12:22 UTC (rev 194054)
@@ -272,6 +272,8 @@
 - (uint64_t)_axNotEnabledTrait { return (1 << 20); }
 - (uint64_t)_axRadioButtonTrait { return (1 << 21); }
 - (uint64_t)_axContainedByFieldsetTrait { return (1 << 22); }
+- (uint64_t)_axSearchFieldTrait { return (1 << 23); }
+- (uint64_t)_axTextAreaTrait { return (1 << 24); }
 
 - (BOOL)accessibilityCanFuzzyHitTest
 {
@@ -558,6 +560,20 @@
     return traits;
 }
 
+- (uint64_t)_accessibilityTextEntryTraits
+{
+    uint64_t traits = [self _axTextEntryTrait];
+    if (m_object->isFocused())
+        traits |= ([self _axHasTextCursorTrait] | [self _axTextOperationsAvailableTrait]);
+    if (m_object->isPasswordField())
+        traits |= [self _axSecureTextFieldTrait];
+    if (m_object->roleValue() == SearchFieldRole)
+        traits |= [self _axSearchFieldTrait];
+    if (m_object->roleValue() == TextAreaRole)
+        traits |= [self _axTextAreaTrait];
+    return traits;
+}
+
 - (uint64_t)accessibilityTraits
 {
     if (![self _prepareAccessibilityCall])
@@ -572,16 +588,10 @@
             if (m_object->isVisited())
                 traits |= [self _axVisitedTrait];
             break;
-        // TextFieldRole is intended to fall through to TextAreaRole, in order to pick up the text entry and text cursor traits.
         case TextFieldRole:
-            if (m_object->isPasswordField())
-                traits |= [self _axSecureTextFieldTrait];
-            FALLTHROUGH;
         case SearchFieldRole:
         case TextAreaRole:
-            traits |= [self _axTextEntryTrait];
-            if (m_object->isFocused())
-                traits |= ([self _axHasTextCursorTrait] | [self _axTextOperationsAvailableTrait]);
+            traits |= [self _accessibilityTextEntryTraits];
             break;
         case ImageRole:
             traits |= [self _axImageTrait];

Modified: trunk/Tools/ChangeLog (194053 => 194054)


--- trunk/Tools/ChangeLog	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Tools/ChangeLog	2015-12-14 21:12:22 UTC (rev 194054)
@@ -1,3 +1,37 @@
+2015-12-14  Chris Fleizach  <[email protected]>
+
+        AX: iOS: Text field variations do not have the correct traits
+        https://bugs.webkit.org/show_bug.cgi?id=152237
+
+        Reviewed by Mario Sanchez Prada.
+
+        Add iOS calls for determing if an object is a search field or a text area.
+
+        * DumpRenderTree/AccessibilityUIElement.cpp:
+        (getIsSearchFieldCallback):
+        (getIsTextAreaCallback):
+        (stringForSelectionCallback):
+        (AccessibilityUIElement::getJSClass):
+        * DumpRenderTree/AccessibilityUIElement.h:
+        * DumpRenderTree/ios/AccessibilityUIElementIOS.mm:
+        (AccessibilityUIElement::identifier):
+        (AccessibilityUIElement::isTextArea):
+        (AccessibilityUIElement::isSearchField):
+        (AccessibilityUIElement::traits):
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp:
+        (WTR::AccessibilityUIElement::scrollPageRight):
+        (WTR::AccessibilityUIElement::hasContainedByFieldsetTrait):
+        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
+        (WTR::AccessibilityUIElement::isSearchField):
+        (WTR::AccessibilityUIElement::isTextArea):
+        * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:
+        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl:
+        * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm:
+        (WTR::AccessibilityUIElement::fieldsetAncestorElement):
+        (WTR::AccessibilityUIElement::isTextArea):
+        (WTR::AccessibilityUIElement::isSearchField):
+        (WTR::AccessibilityUIElement::rowCount):
+
 2015-12-14  Carlos Alberto Lopez Perez  <[email protected]>
 
         [GTK] [JHBuild] package libtool-bin is now required on Debian systems.

Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp (194053 => 194054)


--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp	2015-12-14 21:12:22 UTC (rev 194054)
@@ -1349,6 +1349,16 @@
 
 #elif PLATFORM(IOS)
 
+static JSValueRef getIsSearchFieldCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
+{
+    return JSValueMakeBoolean(context, toAXElement(thisObject)->isSearchField());
+}
+
+static JSValueRef getIsTextAreaCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
+{
+    return JSValueMakeBoolean(context, toAXElement(thisObject)->isTextArea());
+}
+
 static JSValueRef stringForSelectionCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
 {
     JSRetainPtr<JSStringRef> labelString(Adopt, toAXElement(thisObject)->stringForSelection());
@@ -1640,6 +1650,8 @@
         { "elementTextLength", getElementTextLengthCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "stringForSelection", stringForSelectionCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "hasContainedByFieldsetTrait", hasContainedByFieldsetTraitCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "isSearchField", getIsSearchFieldCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "isTextArea", getIsTextAreaCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
 #endif // PLATFORM(IOS)
 #if PLATFORM(MAC) && !PLATFORM(IOS)
         { "supportedActions", supportedActionsCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },

Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.h (194053 => 194054)


--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.h	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.h	2015-12-14 21:12:22 UTC (rev 194054)
@@ -289,6 +289,10 @@
     AccessibilityUIElement headerElementAtIndex(unsigned);
     // This will simulate the accessibilityDidBecomeFocused API in UIKit.
     void assistiveTechnologySimulatedFocus();
+    
+    bool isTextArea() const;
+    bool isSearchField() const;
+    
 #endif // PLATFORM(IOS)
 
 #if PLATFORM(MAC) && !PLATFORM(IOS)

Modified: trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm (194053 => 194054)


--- trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm	2015-12-14 21:12:22 UTC (rev 194054)
@@ -83,6 +83,8 @@
 - (void)_accessibilitySetValue:(NSString *)value;
 - (void)_accessibilityActivate;
 - (UIAccessibilityTraits)_axSelectedTrait;
+- (UIAccessibilityTraits)_axTextAreaTrait;
+- (UIAccessibilityTraits)_axSearchFieldTrait;
 - (NSString *)accessibilityARIACurrentStatus;
 - (NSUInteger)accessibilityRowCount;
 - (NSUInteger)accessibilityColumnCount;
@@ -119,6 +121,16 @@
     return concatenateAttributeAndValue(@"AXIdentifier", [m_element accessibilityIdentifier]);
 }
 
+bool AccessibilityUIElement::isTextArea() const
+{
+    return ([m_element accessibilityTraits] & [m_element _axTextAreaTrait]) == [m_element _axTextAreaTrait];
+}
+
+bool AccessibilityUIElement::isSearchField() const
+{
+    return ([m_element accessibilityTraits] & [m_element _axSearchFieldTrait]) == [m_element _axSearchFieldTrait];
+}
+
 JSStringRef AccessibilityUIElement::traits()
 {
     return concatenateAttributeAndValue(@"AXTraits", [NSString stringWithFormat:@"%qu", [m_element accessibilityTraits]]);

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp (194053 => 194054)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp	2015-12-14 21:12:22 UTC (rev 194054)
@@ -72,6 +72,9 @@
 bool AccessibilityUIElement::scrollPageRight() { return false; }
 bool AccessibilityUIElement::hasContainedByFieldsetTrait() { return false; }
 PassRefPtr<AccessibilityUIElement> AccessibilityUIElement::fieldsetAncestorElement() { return nullptr; }
+bool AccessibilityUIElement::isSearchField() const { return false; }
+bool AccessibilityUIElement::isTextArea() const { return false; }
+
 #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 (194053 => 194054)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h	2015-12-14 21:12:22 UTC (rev 194054)
@@ -276,6 +276,8 @@
     PassRefPtr<AccessibilityUIElement> linkedElement();
     PassRefPtr<AccessibilityUIElement> headerElementAtIndex(unsigned index);
     void assistiveTechnologySimulatedFocus();
+    bool isSearchField() const;
+    bool isTextArea() const;
     
     bool scrollPageUp();
     bool scrollPageDown();

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl (194053 => 194054)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl	2015-12-14 21:12:22 UTC (rev 194054)
@@ -222,6 +222,8 @@
     AccessibilityUIElement headerElementAtIndex(unsigned long index);
     // This will simulate the accessibilityDidBecomeFocused API in UIKit.
     void assistiveTechnologySimulatedFocus();
+    readonly attribute boolean isSearchField;
+    readonly attribute boolean isTextArea;
 
     // Fieldset
     readonly attribute boolean hasContainedByFieldsetTrait;

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm (194053 => 194054)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm	2015-12-14 21:03:29 UTC (rev 194053)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm	2015-12-14 21:12:22 UTC (rev 194054)
@@ -60,6 +60,8 @@
 - (void)_accessibilitySetValue:(NSString *)value;
 - (void)_accessibilityActivate;
 - (UIAccessibilityTraits)_axSelectedTrait;
+- (UIAccessibilityTraits)_axTextAreaTrait;
+- (UIAccessibilityTraits)_axSearchFieldTrait;
 - (NSString *)accessibilityARIACurrentStatus;
 - (NSUInteger)accessibilityRowCount;
 - (NSUInteger)accessibilityColumnCount;
@@ -689,6 +691,16 @@
     return nullptr;
 }
 
+bool AccessibilityUIElement::isTextArea() const
+{
+    return ([m_element accessibilityTraits] & [m_element _axTextAreaTrait]) == [m_element _axTextAreaTrait];
+}
+
+bool AccessibilityUIElement::isSearchField() const
+{
+    return ([m_element accessibilityTraits] & [m_element _axSearchFieldTrait]) == [m_element _axSearchFieldTrait];
+}
+    
 int AccessibilityUIElement::rowCount()
 {
     return [m_element accessibilityRowCount];
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to