Skip to content

Commit

Permalink
AX: add a new trait for elements in fieldset on iOS
Browse files Browse the repository at this point in the history
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.


Canonical link: https://commits.webkit.org/169454@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192456 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
Nan Wang committed Nov 14, 2015
1 parent 23f1dd8 commit 9a8c226
Show file tree
Hide file tree
Showing 13 changed files with 190 additions and 1 deletion.
10 changes: 10 additions & 0 deletions LayoutTests/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
2015-11-14 Nan Wang <n_wang@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 <zalan@apple.com>

Always render at least a device pixel line when border/outline width > 0.
Expand Down
Original file line number Diff line number Diff line change
@@ -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

40 changes: 40 additions & 0 deletions LayoutTests/accessibility/ios-simulator/fieldset-traits.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script>
var successfullyParsed = false;
</script>
<script src="../../resources/js-test-pre.js"></script>
</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="../../resources/js-test-post.js"></script>
</body>
</html>

18 changes: 18 additions & 0 deletions Source/WebCore/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
2015-11-14 Nan Wang <n_wang@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-queue@webkit.org>

Unreviewed, rolling out r192445, r192451, and r192452.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ - (uint64_t)_axMenuItemTrait { return (1 << 18); }
- (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
{
Expand Down Expand Up @@ -494,6 +495,16 @@ - (AccessibilityObjectWrapper*)_accessibilityTableAncestor
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;
Expand Down Expand Up @@ -538,6 +549,10 @@ - (uint64_t)_accessibilityTraitsFromAncestors
traits |= [self _axContainedByLandmarkTrait];
break;
}

// If this object has fieldset parent, we should add containedByFieldsetTrait to it.
if (parent->isFieldset())
traits |= [self _axContainedByFieldsetTrait];
}

return traits;
Expand Down
34 changes: 34 additions & 0 deletions Tools/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,37 @@
2015-11-14 Nan Wang <n_wang@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_miller@apple.com>

Unreviewed, change JavaScriptCore watchlist to exclude inspector things.
Expand Down
12 changes: 11 additions & 1 deletion Tools/DumpRenderTree/AccessibilityUIElement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,11 @@ static JSValueRef assistiveTechnologySimulatedFocusCallback(JSContextRef context
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)
Expand Down Expand Up @@ -1373,7 +1378,10 @@ static JSValueRef getElementTextLengthCallback(JSContextRef context, JSObjectRef
return JSValueMakeNumber(context, toAXElement(thisObject)->elementTextLength());
}


static JSValueRef hasContainedByFieldsetTraitCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef, JSValueRef*)
{
return JSValueMakeBoolean(context, toAXElement(thisObject)->hasContainedByFieldsetTrait());
}

#endif // PLATFORM(IOS)

Expand Down Expand Up @@ -1631,6 +1639,7 @@ JSClassRef AccessibilityUIElement::getJSClass()
{ "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 },
Expand Down Expand Up @@ -1748,6 +1757,7 @@ JSClassRef AccessibilityUIElement::getJSClass()
{ "scrollPageLeft", scrollPageLeftCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "scrollPageRight", scrollPageRightCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "assistiveTechnologySimulatedFocus", assistiveTechnologySimulatedFocusCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "fieldsetAncestorElement", fieldsetAncestorElementCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
#endif
{ 0, 0, 0 }
};
Expand Down
3 changes: 3 additions & 0 deletions Tools/DumpRenderTree/AccessibilityUIElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,9 @@ class AccessibilityUIElement {
bool scrollPageDown();
bool scrollPageLeft();
bool scrollPageRight();

bool hasContainedByFieldsetTrait();
AccessibilityUIElement fieldsetAncestorElement();
#endif

#if PLATFORM(GTK) || PLATFORM(EFL)
Expand Down
18 changes: 18 additions & 0 deletions Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ - (NSUInteger)accessibilityARIARowCount;
- (NSUInteger)accessibilityARIAColumnCount;
- (NSUInteger)accessibilityARIARowIndex;
- (NSUInteger)accessibilityARIAColumnIndex;
- (UIAccessibilityTraits)_axContainedByFieldsetTrait;
- (id)_accessibilityFieldsetAncestor;
@end

@interface NSObject (WebAccessibilityObjectWrapperPrivate)
Expand Down Expand Up @@ -134,6 +136,22 @@ static JSStringRef concatenateAttributeAndValue(NSString* attribute, NSString* v
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 = [m_element accessibilityURL];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ bool AccessibilityUIElement::scrollPageUp() { return false; }
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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,10 @@ class AccessibilityUIElement : public JSWrappable {
bool scrollPageLeft();
bool scrollPageRight();

// Fieldset
bool hasContainedByFieldsetTrait();
PassRefPtr<AccessibilityUIElement> fieldsetAncestorElement();

private:
AccessibilityUIElement(PlatformUIElement);
AccessibilityUIElement(const AccessibilityUIElement&);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,10 @@ interface AccessibilityUIElement {
// 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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ - (NSUInteger)accessibilityARIARowCount;
- (NSUInteger)accessibilityARIAColumnCount;
- (NSUInteger)accessibilityARIARowIndex;
- (NSUInteger)accessibilityARIAColumnIndex;
- (UIAccessibilityTraits)_axContainedByFieldsetTrait;
- (id)_accessibilityFieldsetAncestor;
@end

@interface NSObject (WebAccessibilityObjectWrapperPrivate)
Expand Down Expand Up @@ -672,6 +674,21 @@ static JSValueRef convertElementsToObjectArray(JSContextRef context, Vector<RefP
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];
Expand Down

0 comments on commit 9a8c226

Please sign in to comment.