[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-10851-g50815da
cfleizach at apple.com
cfleizach at apple.com
Wed Dec 22 18:34:09 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 4f5eb1cc8becc2437bbc0ca3b5d0c64956b58b7e
Author: cfleizach at apple.com <cfleizach at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue Dec 14 00:16:07 2010 +0000
AX: aria-invalid should be supported.
https://bugs.webkit.org/show_bug.cgi?id=50573
Reviewed by Beth Dakin.
WebCore:
Test: platform/mac/accessibility/aria-invalid.html
* accessibility/AXObjectCache.h:
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::invalidStatus):
* accessibility/AccessibilityObject.h:
* accessibility/chromium/AXObjectCacheChromium.cpp
(WebCore::AXObjectCache::postPlatformNotification):
* accessibility/mac/AXObjectCacheMac.mm:
(WebCore::AXObjectCache::postPlatformNotification):
* accessibility/mac/AccessibilityObjectWrapper.mm:
(-[AccessibilityObjectWrapper accessibilityAttributeNames]):
(-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
* dom/Element.cpp:
(WebCore::Element::updateAfterAttributeChanged):
* html/HTMLAttributeNames.in:
LayoutTests:
* platform/mac/accessibility/aria-invalid-expected.txt: Added.
* platform/mac/accessibility/aria-invalid.html: Added.
* platform/mac/accessibility/radio-button-group-members-expected.txt:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@73983 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index f9b0227..6385e01 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -2,6 +2,17 @@
Reviewed by Beth Dakin.
+ AX: aria-invalid should be supported.
+ https://bugs.webkit.org/show_bug.cgi?id=50573
+
+ * platform/mac/accessibility/aria-invalid-expected.txt: Added.
+ * platform/mac/accessibility/aria-invalid.html: Added.
+ * platform/mac/accessibility/radio-button-group-members-expected.txt:
+
+2010-12-13 Chris Fleizach <cfleizach at apple.com>
+
+ Reviewed by Beth Dakin.
+
AX: lists and list boxes need different attributes
https://bugs.webkit.org/show_bug.cgi?id=50978
diff --git a/LayoutTests/platform/mac/accessibility/aria-invalid-expected.txt b/LayoutTests/platform/mac/accessibility/aria-invalid-expected.txt
new file mode 100644
index 0000000..fdd8039
--- /dev/null
+++ b/LayoutTests/platform/mac/accessibility/aria-invalid-expected.txt
@@ -0,0 +1,16 @@
+ALERT: Notification received successfully.
+
+This tests that aria-invalid causes the right attribute to be returned and it ensures a notification is sent when it changes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS accessibilityController.focusedElement.stringAttributeValue('AXInvalid') is 'true'
+PASS accessibilityController.focusedElement.stringAttributeValue('AXInvalid') is 'grammar'
+PASS accessibilityController.focusedElement.stringAttributeValue('AXInvalid') is 'false'
+PASS accessibilityController.focusedElement.stringAttributeValue('AXInvalid') is 'false'
+PASS addedNotification is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/mac/accessibility/aria-invalid.html b/LayoutTests/platform/mac/accessibility/aria-invalid.html
new file mode 100644
index 0000000..34b4313
--- /dev/null
+++ b/LayoutTests/platform/mac/accessibility/aria-invalid.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../../../fast/js/resources/js-test-style.css">
+<script>
+var successfullyParsed = false;
+</script>
+<script src="../../../fast/js/resources/js-test-pre.js"></script>
+</head>
+<body id="body">
+
+
+<input type="text" id="text1" aria-invalid="true">
+<input type="text" id="text2" aria-invalid="grammar">
+<input type="text" id="text3" aria-invalid="">
+<input type="text" id="text4">
+
+<p id="description"></p>
+<div id="console"></div>
+
+<script>
+
+ description("This tests that aria-invalid causes the right attribute to be returned and it ensures a notification is sent when it changes.");
+
+ var notificationElement = 0;
+ function notificationCallback(notification) {
+ if (notification == "AXInvalidStatusChanged") {
+ alert("Notification received successfully.");
+ notificationElement.removeNotificationListener();
+ window.layoutTestController.notifyDone();
+ }
+ }
+
+ if (window.accessibilityController) {
+ window.layoutTestController.waitUntilDone();
+
+ document.getElementById("text1").focus();
+ shouldBe("accessibilityController.focusedElement.stringAttributeValue('AXInvalid')", "'true'");
+
+ document.getElementById("text2").focus();
+ shouldBe("accessibilityController.focusedElement.stringAttributeValue('AXInvalid')", "'grammar'");
+
+ document.getElementById("text3").focus();
+ shouldBe("accessibilityController.focusedElement.stringAttributeValue('AXInvalid')", "'false'");
+
+ document.getElementById("text4").focus();
+ shouldBe("accessibilityController.focusedElement.stringAttributeValue('AXInvalid')", "'false'");
+
+ notificationElement = accessibilityController.focusedElement;
+ var addedNotification = notificationElement.addNotificationListener(notificationCallback);
+ shouldBeTrue("addedNotification");
+
+ document.getElementById("text4").setAttribute("aria-invalid", "spelling");
+ }
+
+ successfullyParsed = true;
+</script>
+
+<script src="../../../fast/js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/platform/mac/accessibility/radio-button-group-members-expected.txt b/LayoutTests/platform/mac/accessibility/radio-button-group-members-expected.txt
index c8004dc..09dc66e 100644
--- a/LayoutTests/platform/mac/accessibility/radio-button-group-members-expected.txt
+++ b/LayoutTests/platform/mac/accessibility/radio-button-group-members-expected.txt
@@ -24,6 +24,7 @@ AXTopLevelUIElement: <AXRadioButton>
AXTitleUIElement: (null)
AXAccessKey: (null)
AXRequired: 0
+AXInvalid: false
------------
AXRole: AXRadioButton
@@ -50,6 +51,7 @@ AXTopLevelUIElement: <AXRadioButton>
AXTitleUIElement: (null)
AXAccessKey: (null)
AXRequired: 0
+AXInvalid: false
------------
AXRole: AXRadioButton
@@ -76,6 +78,7 @@ AXTopLevelUIElement: <AXRadioButton>
AXTitleUIElement: (null)
AXAccessKey: (null)
AXRequired: 0
+AXInvalid: false
------------
@@ -106,6 +109,7 @@ AXTopLevelUIElement: <AXRadioButton>
AXTitleUIElement: (null)
AXAccessKey: (null)
AXRequired: 0
+AXInvalid: false
------------
AXRole: AXRadioButton
@@ -132,6 +136,7 @@ AXTopLevelUIElement: <AXRadioButton>
AXTitleUIElement: (null)
AXAccessKey: (null)
AXRequired: 0
+AXInvalid: false
------------
@@ -162,6 +167,7 @@ AXTopLevelUIElement: <AXRadioButton: 'Yes'>
AXTitleUIElement: (null)
AXAccessKey: (null)
AXRequired: 0
+AXInvalid: false
------------
AXRole: AXRadioButton
@@ -188,6 +194,7 @@ AXTopLevelUIElement: <AXRadioButton: 'No'>
AXTitleUIElement: (null)
AXAccessKey: (null)
AXRequired: 0
+AXInvalid: false
------------
@@ -218,6 +225,7 @@ AXTopLevelUIElement: <AXRadioButton>
AXTitleUIElement: (null)
AXAccessKey: (null)
AXRequired: 0
+AXInvalid: false
------------
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index a323230..4021eaa 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,27 @@
+2010-12-13 Chris Fleizach <cfleizach at apple.com>
+
+ Reviewed by Beth Dakin.
+
+ AX: aria-invalid should be supported.
+ https://bugs.webkit.org/show_bug.cgi?id=50573
+
+ Test: platform/mac/accessibility/aria-invalid.html
+
+ * accessibility/AXObjectCache.h:
+ * accessibility/AccessibilityObject.cpp:
+ (WebCore::AccessibilityObject::invalidStatus):
+ * accessibility/AccessibilityObject.h:
+ * accessibility/chromium/AXObjectCacheChromium.cpp
+ (WebCore::AXObjectCache::postPlatformNotification):
+ * accessibility/mac/AXObjectCacheMac.mm:
+ (WebCore::AXObjectCache::postPlatformNotification):
+ * accessibility/mac/AccessibilityObjectWrapper.mm:
+ (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
+ (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
+ * dom/Element.cpp:
+ (WebCore::Element::updateAfterAttributeChanged):
+ * html/HTMLAttributeNames.in:
+
2010-12-13 Joone Hur <joone at kldp.org>
Reviewed by Eric Seidel.
diff --git a/WebCore/accessibility/AXObjectCache.h b/WebCore/accessibility/AXObjectCache.h
index 2ee56ee..fc6dbb5 100644
--- a/WebCore/accessibility/AXObjectCache.h
+++ b/WebCore/accessibility/AXObjectCache.h
@@ -125,6 +125,7 @@ public:
AXRowCountChanged,
AXRowCollapsed,
AXRowExpanded,
+ AXInvalidStatusChanged,
};
void postNotification(RenderObject*, AXNotification, bool postToElement, PostType = PostAsynchronously);
diff --git a/WebCore/accessibility/AccessibilityObject.cpp b/WebCore/accessibility/AccessibilityObject.cpp
index 4157844..cfe8a22 100644
--- a/WebCore/accessibility/AccessibilityObject.cpp
+++ b/WebCore/accessibility/AccessibilityObject.cpp
@@ -836,6 +836,20 @@ const String& AccessibilityObject::actionVerb() const
return noAction;
}
}
+
+const AtomicString& AccessibilityObject::invalidStatus() const
+{
+ DEFINE_STATIC_LOCAL(const AtomicString, invalidStatusFalse, ("false"));
+
+ // aria-invalid can return false (default), grammer, spelling, or true.
+ const AtomicString& ariaInvalid = getAttribute(aria_invalidAttr);
+
+ // If empty or not present, it should return false.
+ if (ariaInvalid.isEmpty())
+ return invalidStatusFalse;
+
+ return ariaInvalid;
+}
const AtomicString& AccessibilityObject::getAttribute(const QualifiedName& attribute) const
{
diff --git a/WebCore/accessibility/AccessibilityObject.h b/WebCore/accessibility/AccessibilityObject.h
index c1ea04f..ad9b723 100644
--- a/WebCore/accessibility/AccessibilityObject.h
+++ b/WebCore/accessibility/AccessibilityObject.h
@@ -360,7 +360,8 @@ public:
virtual bool supportsARIAFlowTo() const { return false; }
virtual void ariaFlowToElements(AccessibilityChildrenVector&) const { }
virtual bool ariaHasPopup() const { return false; }
-
+ virtual const AtomicString& invalidStatus() const;
+
// ARIA drag and drop
virtual bool supportsARIADropping() const { return false; }
virtual bool supportsARIADragging() const { return false; }
diff --git a/WebCore/accessibility/chromium/AXObjectCacheChromium.cpp b/WebCore/accessibility/chromium/AXObjectCacheChromium.cpp
index 9a1dcaf..0dddc17 100644
--- a/WebCore/accessibility/chromium/AXObjectCacheChromium.cpp
+++ b/WebCore/accessibility/chromium/AXObjectCacheChromium.cpp
@@ -90,6 +90,7 @@ void AXObjectCache::postPlatformNotification(AccessibilityObject* obj, AXNotific
case AXSelectedChildrenChanged:
case AXSelectedTextChanged:
case AXValueChanged:
+ case AXInvalidStatusChanged:
break;
}
diff --git a/WebCore/accessibility/mac/AXObjectCacheMac.mm b/WebCore/accessibility/mac/AXObjectCacheMac.mm
index fbb485d..13c8ec2 100644
--- a/WebCore/accessibility/mac/AXObjectCacheMac.mm
+++ b/WebCore/accessibility/mac/AXObjectCacheMac.mm
@@ -79,6 +79,9 @@ void AXObjectCache::postPlatformNotification(AccessibilityObject* obj, AXNotific
case AXLoadComplete:
macNotification = "AXLoadComplete";
break;
+ case AXInvalidStatusChanged:
+ macNotification = "AXInvalidStatusChanged";
+ break;
case AXSelectedChildrenChanged:
macNotification = NSAccessibilitySelectedChildrenChangedNotification;
break;
diff --git a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
index cbfefac..d1d613c 100644
--- a/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
+++ b/WebCore/accessibility/mac/AccessibilityObjectWrapper.mm
@@ -121,6 +121,10 @@ using namespace std;
#define NSAccessibilityRequiredAttribute @"AXRequired"
#endif
+#ifndef NSAccessibilityInvalidAttribute
+#define NSAccessibilityInvalidAttribute @"AXInvalid"
+#endif
+
#ifndef NSAccessibilityOwnsAttribute
#define NSAccessibilityOwnsAttribute @"AXOwns"
#endif
@@ -763,6 +767,7 @@ static WebCoreTextMarkerRange* textMarkerRangeFromVisiblePositions(AXObjectCache
[tempArray addObject:NSAccessibilityTitleUIElementAttribute];
[tempArray addObject:NSAccessibilityAccessKeyAttribute];
[tempArray addObject:NSAccessibilityRequiredAttribute];
+ [tempArray addObject:NSAccessibilityInvalidAttribute];
[tempArray addObject:NSAccessibilityPlaceholderValueAttribute];
textAttrs = [[NSArray alloc] initWithArray:tempArray];
[tempArray release];
@@ -780,6 +785,7 @@ static WebCoreTextMarkerRange* textMarkerRangeFromVisiblePositions(AXObjectCache
tempArray = [[NSMutableArray alloc] initWithArray:listAttrs];
[tempArray addObject:NSAccessibilityAccessKeyAttribute];
[tempArray addObject:NSAccessibilityRequiredAttribute];
+ [tempArray addObject:NSAccessibilityInvalidAttribute];
listBoxAttrs = [[NSArray alloc] initWithArray:tempArray];
[tempArray release];
}
@@ -840,6 +846,7 @@ static WebCoreTextMarkerRange* textMarkerRangeFromVisiblePositions(AXObjectCache
[tempArray addObject:NSAccessibilityTitleUIElementAttribute];
[tempArray addObject:NSAccessibilityAccessKeyAttribute];
[tempArray addObject:NSAccessibilityRequiredAttribute];
+ [tempArray addObject:NSAccessibilityInvalidAttribute];
controlAttrs = [[NSArray alloc] initWithArray:tempArray];
[tempArray release];
}
@@ -909,6 +916,7 @@ static WebCoreTextMarkerRange* textMarkerRangeFromVisiblePositions(AXObjectCache
tempArray = [[NSMutableArray alloc] initWithArray:attributes];
[tempArray addObject:NSAccessibilityTitleUIElementAttribute];
[tempArray addObject:NSAccessibilityRequiredAttribute];
+ [tempArray addObject:NSAccessibilityInvalidAttribute];
passwordFieldAttrs = [[NSArray alloc] initWithArray:tempArray];
[tempArray release];
}
@@ -1875,6 +1883,9 @@ static NSString* roleValueToNSString(AccessibilityRole value)
if ([attributeName isEqualToString:NSAccessibilityRequiredAttribute])
return [NSNumber numberWithBool:m_object->isRequired()];
+ if ([attributeName isEqualToString:NSAccessibilityInvalidAttribute])
+ return m_object->invalidStatus();
+
if ([attributeName isEqualToString:NSAccessibilityOwnsAttribute]) {
AccessibilityObject::AccessibilityChildrenVector ariaOwns;
m_object->ariaOwnsElements(ariaOwns);
diff --git a/WebCore/dom/Element.cpp b/WebCore/dom/Element.cpp
index 8e633aa..0707c96 100644
--- a/WebCore/dom/Element.cpp
+++ b/WebCore/dom/Element.cpp
@@ -703,6 +703,8 @@ void Element::updateAfterAttributeChanged(Attribute* attr)
document()->axObjectCache()->handleAriaExpandedChange(renderer());
else if (attrName == aria_hiddenAttr)
document()->axObjectCache()->childrenChanged(renderer());
+ else if (attrName == aria_invalidAttr)
+ document()->axObjectCache()->postNotification(renderer(), AXObjectCache::AXInvalidStatusChanged, true);
}
void Element::recalcStyleIfNeededAfterAttributeChanged(Attribute* attr)
diff --git a/WebCore/html/HTMLAttributeNames.in b/WebCore/html/HTMLAttributeNames.in
index e3ac153..089b280 100644
--- a/WebCore/html/HTMLAttributeNames.in
+++ b/WebCore/html/HTMLAttributeNames.in
@@ -26,6 +26,7 @@ aria-grabbed
aria-haspopup
aria-help
aria-hidden
+aria-invalid
aria-label
aria-labeledby
aria-labelledby
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list