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;