Title: [219751] trunk
Revision
219751
Author
n_w...@apple.com
Date
2017-07-21 16:25:21 -0700 (Fri, 21 Jul 2017)

Log Message

AX: Expose form validation on iOS as hint
https://bugs.webkit.org/show_bug.cgi?id=174722
<rdar://problem/33459761>

Reviewed by Chris Fleizach.

Source/WebCore:

Adding the validation message to the hint of the form control element.

Test: accessibility/ios-simulator/form-control-validation-message.html

* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::isShowingValidationMessage):
(WebCore::AccessibilityObject::validationMessage):
* accessibility/AccessibilityObject.h:
* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper accessibilityHint]):
(-[WebAccessibilityObjectWrapper accessibilityIsShowingValidationMessage]):
* html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::isShowingValidationMessage):
* html/HTMLFormControlElement.h:

LayoutTests:

* accessibility/ios-simulator/form-control-validation-message-expected.txt: Added.
* accessibility/ios-simulator/form-control-validation-message.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (219750 => 219751)


--- trunk/LayoutTests/ChangeLog	2017-07-21 22:44:32 UTC (rev 219750)
+++ trunk/LayoutTests/ChangeLog	2017-07-21 23:25:21 UTC (rev 219751)
@@ -1,3 +1,14 @@
+2017-07-21  Nan Wang  <n_w...@apple.com>
+
+        AX: Expose form validation on iOS as hint
+        https://bugs.webkit.org/show_bug.cgi?id=174722
+        <rdar://problem/33459761>
+
+        Reviewed by Chris Fleizach.
+
+        * accessibility/ios-simulator/form-control-validation-message-expected.txt: Added.
+        * accessibility/ios-simulator/form-control-validation-message.html: Added.
+
 2017-07-21  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: inspect(aFunction) should jump to function definition

Added: trunk/LayoutTests/accessibility/ios-simulator/form-control-validation-message-expected.txt (0 => 219751)


--- trunk/LayoutTests/accessibility/ios-simulator/form-control-validation-message-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/form-control-validation-message-expected.txt	2017-07-21 23:25:21 UTC (rev 219751)
@@ -0,0 +1,12 @@
+Required text input: 
+This tests that we are exposing form validation message through hint on iOS.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS input.helpText is 'AXHint: '
+PASS input.helpText is 'AXHint: Fill out this field'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/accessibility/ios-simulator/form-control-validation-message.html (0 => 219751)


--- trunk/LayoutTests/accessibility/ios-simulator/form-control-validation-message.html	                        (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/form-control-validation-message.html	2017-07-21 23:25:21 UTC (rev 219751)
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script>
+var successfullyParsed = false;
+</script>
+<script src=""
+</head>
+<body id="body">
+
+<form>
+  Required text input: <input id="input" type="text" required=""><input id="submit" type="submit" id="firstSubmitButton">
+</form>
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+    description("This tests that we are exposing form validation message through hint on iOS.");
+
+    if (window.accessibilityController) {
+
+        var input = accessibilityController.accessibleElementById("input");
+        
+        shouldBe("input.helpText", "'AXHint: '");
+        document.getElementById("submit").click();
+        shouldBe("input.helpText", "'AXHint: Fill out this field'");
+    }
+
+    successfullyParsed = true;
+</script>
+
+<script src=""
+</body>
+</html>
+

Modified: trunk/Source/WebCore/ChangeLog (219750 => 219751)


--- trunk/Source/WebCore/ChangeLog	2017-07-21 22:44:32 UTC (rev 219750)
+++ trunk/Source/WebCore/ChangeLog	2017-07-21 23:25:21 UTC (rev 219751)
@@ -1,3 +1,26 @@
+2017-07-21  Nan Wang  <n_w...@apple.com>
+
+        AX: Expose form validation on iOS as hint
+        https://bugs.webkit.org/show_bug.cgi?id=174722
+        <rdar://problem/33459761>
+
+        Reviewed by Chris Fleizach.
+
+        Adding the validation message to the hint of the form control element.
+
+        Test: accessibility/ios-simulator/form-control-validation-message.html
+
+        * accessibility/AccessibilityObject.cpp:
+        (WebCore::AccessibilityObject::isShowingValidationMessage):
+        (WebCore::AccessibilityObject::validationMessage):
+        * accessibility/AccessibilityObject.h:
+        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
+        (-[WebAccessibilityObjectWrapper accessibilityHint]):
+        (-[WebAccessibilityObjectWrapper accessibilityIsShowingValidationMessage]):
+        * html/HTMLFormControlElement.cpp:
+        (WebCore::HTMLFormControlElement::isShowingValidationMessage):
+        * html/HTMLFormControlElement.h:
+
 2017-07-21  Konstantin Tokarev  <annu...@yandex.ru>
 
         [cmake][Mac] Unreviewed, fix linking WebKitSystemInterface

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (219750 => 219751)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2017-07-21 22:44:32 UTC (rev 219750)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp	2017-07-21 23:25:21 UTC (rev 219751)
@@ -44,6 +44,7 @@
 #include "FrameLoader.h"
 #include "FrameSelection.h"
 #include "HTMLDetailsElement.h"
+#include "HTMLFormControlElement.h"
 #include "HTMLInputElement.h"
 #include "HTMLNames.h"
 #include "HTMLParserIdioms.h"
@@ -3163,6 +3164,20 @@
     return style.display() == NONE || style.visibility() != VISIBLE;
 }
 
+bool AccessibilityObject::isShowingValidationMessage() const
+{
+    if (is<HTMLFormControlElement>(node()))
+        return downcast<HTMLFormControlElement>(*node()).isShowingValidationMessage();
+    return false;
+}
+
+String AccessibilityObject::validationMessage() const
+{
+    if (is<HTMLFormControlElement>(node()))
+        return downcast<HTMLFormControlElement>(*node()).validationMessage();
+    return String();
+}
+
 AccessibilityObjectInclusion AccessibilityObject::defaultObjectInclusion() const
 {
     bool useParentData = !m_isIgnoredFromParentData.isNull();

Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.h (219750 => 219751)


--- trunk/Source/WebCore/accessibility/AccessibilityObject.h	2017-07-21 22:44:32 UTC (rev 219750)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.h	2017-07-21 23:25:21 UTC (rev 219751)
@@ -648,6 +648,9 @@
     virtual AccessibilityObjectInclusion defaultObjectInclusion() const;
     bool accessibilityIsIgnoredByDefault() const;
     
+    bool isShowingValidationMessage() const;
+    String validationMessage() const;
+    
     unsigned blockquoteLevel() const;
     virtual int headingLevel() const { return 0; }
     virtual int tableLevel() const { return 0; }

Modified: trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (219750 => 219751)


--- trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm	2017-07-21 22:44:32 UTC (rev 219750)
+++ trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm	2017-07-21 23:25:21 UTC (rev 219751)
@@ -1377,7 +1377,13 @@
     if (![self _prepareAccessibilityCall])
         return nil;
 
-    return [self baseAccessibilityHelpText];
+    NSMutableString *result = [NSMutableString string];
+    appendStringToResult(result, [self baseAccessibilityHelpText]);
+    
+    if ([self accessibilityIsShowingValidationMessage])
+        appendStringToResult(result, m_object->validationMessage());
+    
+    return result;
 }
 
 - (NSURL *)accessibilityURL
@@ -2859,6 +2865,14 @@
     return m_object->isExpanded();
 }
 
+- (BOOL)accessibilityIsShowingValidationMessage
+{
+    if (![self _prepareAccessibilityCall])
+        return NO;
+    
+    return m_object->isShowingValidationMessage();
+}
+
 - (NSString *)accessibilityInvalidStatus
 {
     if (![self _prepareAccessibilityCall])

Modified: trunk/Source/WebCore/html/HTMLFormControlElement.cpp (219750 => 219751)


--- trunk/Source/WebCore/html/HTMLFormControlElement.cpp	2017-07-21 22:44:32 UTC (rev 219750)
+++ trunk/Source/WebCore/html/HTMLFormControlElement.cpp	2017-07-21 23:25:21 UTC (rev 219751)
@@ -488,6 +488,11 @@
     return false;
 }
 
+bool HTMLFormControlElement::isShowingValidationMessage() const
+{
+    return m_validationMessage && m_validationMessage->isVisible();
+}
+    
 bool HTMLFormControlElement::reportValidity()
 {
     Vector<RefPtr<HTMLFormControlElement>> elements;

Modified: trunk/Source/WebCore/html/HTMLFormControlElement.h (219750 => 219751)


--- trunk/Source/WebCore/html/HTMLFormControlElement.h	2017-07-21 22:44:32 UTC (rev 219750)
+++ trunk/Source/WebCore/html/HTMLFormControlElement.h	2017-07-21 23:25:21 UTC (rev 219751)
@@ -102,6 +102,7 @@
     WEBCORE_EXPORT bool checkValidity(Vector<RefPtr<HTMLFormControlElement>>* unhandledInvalidControls = nullptr);
     bool reportValidity();
     void focusAndShowValidationMessage();
+    bool isShowingValidationMessage() const;
     // This must be called when a validation constraint or control value is changed.
     void updateValidity();
     void setCustomValidity(const String&) override;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to