Diff
Deleted: trunk/LayoutTests/accessibility/aria-busy-updates-after-dynamic-change-expected.txt (295445 => 295446)
--- trunk/LayoutTests/accessibility/aria-busy-updates-after-dynamic-change-expected.txt 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/LayoutTests/accessibility/aria-busy-updates-after-dynamic-change-expected.txt 2022-06-10 06:25:28 UTC (rev 295446)
@@ -1,24 +0,0 @@
-This test ensures that an element's busy state updates aria-busy changes.
-
-Verifying initial busy state:
-
-#clock is busy: false
-#clock-display-contents is busy: false
-
-Setting aria-busy to true.
-
-#clock is busy: true
-#clock-display-contents is busy: true
-
-Setting aria-busy to false.
-
-#clock is busy: false
-#clock-display-contents is busy: false
-
-
-PASS successfullyParsed is true
-
-TEST COMPLETE
-2:30pm
-4:30pm
-
Deleted: trunk/LayoutTests/accessibility/aria-busy-updates-after-dynamic-change.html (295445 => 295446)
--- trunk/LayoutTests/accessibility/aria-busy-updates-after-dynamic-change.html 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/LayoutTests/accessibility/aria-busy-updates-after-dynamic-change.html 2022-06-10 06:25:28 UTC (rev 295446)
@@ -1,52 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src=""
-<script src=""
-</head>
-<body>
-
-<div id="clock" role="timer" aria-live="polite" aria-atomic="true">2:30pm</div>
-<div id="clock-display-contents" style="display: contents" role="timer" aria-live="polite" aria-atomic="true">4:30pm</div>
-
-<script>
- var testOutput = "This test ensures that an element's busy state updates aria-busy changes.\n\n";
-
- var axClock, axClockWithDisplayContents;
- function verifyElements() {
- testOutput += `#clock is busy: ${axClock.isBusy}\n`;
- testOutput += `#clock-display-contents is busy: ${axClockWithDisplayContents.isBusy}\n\n`;
- }
-
- if (window.accessibilityController) {
- window.jsTestIsAsync = true;
- axClock = accessibilityController.accessibleElementById("clock");
- axClockWithDisplayContents = accessibilityController.accessibleElementById("clock-display-contents");
-
- testOutput += "Verifying initial busy state:\n\n";
- verifyElements();
-
- const clock = document.getElementById("clock");
- const clockWithDisplayContents = document.getElementById("clock-display-contents");
-
- testOutput += "Setting aria-busy to true.\n\n";
- clock.ariaBusy = "true";
- clockWithDisplayContents.ariaBusy = "true";
- setTimeout(async function() {
- await waitFor(() => { return axClock.isBusy && axClockWithDisplayContents.isBusy });
- verifyElements();
-
- testOutput += "Setting aria-busy to false.\n\n";
- clock.ariaBusy = "false";
- clockWithDisplayContents.ariaBusy = "false";
- await waitFor(() => { return !axClock.isBusy && !axClockWithDisplayContents.isBusy });
- verifyElements();
-
- debug(testOutput);
- finishJSTest();
- }, 0);
- }
-</script>
-</body>
-</html>
-
Added: trunk/LayoutTests/accessibility/live-region-attributes-update-after-dynamic-change-expected.txt (0 => 295446)
--- trunk/LayoutTests/accessibility/live-region-attributes-update-after-dynamic-change-expected.txt (rev 0)
+++ trunk/LayoutTests/accessibility/live-region-attributes-update-after-dynamic-change-expected.txt 2022-06-10 06:25:28 UTC (rev 295446)
@@ -0,0 +1,48 @@
+This test ensures that an element's busy state updates aria-busy changes.
+
+Verifying initial states:
+
+#clock is atomic: true
+#clock-display-contents is atomic: true
+
+#clock is busy: false
+#clock-display-contents is busy: false
+
+#clock relevant: additions text
+#clock-display-contents relevant: additions text
+
+#clock live region status: polite
+#clock-display-contents live region status: polite
+
+Setting aria-busy to true.
+
+#clock is busy: true
+#clock-display-contents is busy: true
+
+Setting aria-busy to false.
+
+#clock is busy: false
+#clock-display-contents is busy: false
+
+Setting aria-atomic to false.
+
+#clock is atomic: false
+#clock-display-contents is atomic: false
+
+Setting aria-relevant to removals.
+
+#clock relevant: removals
+#clock-display-contents relevant: removals
+
+Setting aria-live to assertive.
+
+#clock live region status: assertive
+#clock-display-contents live region status: assertive
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+2:30pm
+4:30pm
+
Added: trunk/LayoutTests/accessibility/live-region-attributes-update-after-dynamic-change.html (0 => 295446)
--- trunk/LayoutTests/accessibility/live-region-attributes-update-after-dynamic-change.html (rev 0)
+++ trunk/LayoutTests/accessibility/live-region-attributes-update-after-dynamic-change.html 2022-06-10 06:25:28 UTC (rev 295446)
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+<body>
+
+<div id="clock" role="timer" aria-live="polite" aria-atomic="true" aria-relevant="additions text">2:30pm</div>
+<div id="clock-display-contents" style="display: contents" role="timer" aria-live="polite" aria-atomic="true" aria-relevant="additions text">4:30pm</div>
+
+<script>
+ var testOutput = "This test ensures that an element's busy state updates aria-busy changes.\n\n";
+
+ var axClock, axClockWithDisplayContents;
+ function verifyIsBusy() {
+ testOutput += `#clock is busy: ${axClock.isBusy}\n`;
+ testOutput += `#clock-display-contents is busy: ${axClockWithDisplayContents.isBusy}\n\n`;
+ }
+ function verifyIsAtomic() {
+ testOutput += `#clock is atomic: ${axClock.isAtomicLiveRegion}\n`;
+ testOutput += `#clock-display-contents is atomic: ${axClockWithDisplayContents.isAtomicLiveRegion}\n\n`;
+ }
+ function verifyLiveRegionRelevant() {
+ testOutput += `#clock relevant: ${axClock.liveRegionRelevant}\n`;
+ testOutput += `#clock-display-contents relevant: ${axClockWithDisplayContents.liveRegionRelevant}\n\n`;
+ }
+ function verifyLiveRegionStatus() {
+ testOutput += `#clock live region status: ${axClock.liveRegionStatus}\n`;
+ testOutput += `#clock-display-contents live region status: ${axClockWithDisplayContents.liveRegionStatus}\n\n`;
+ }
+
+ if (window.accessibilityController) {
+ window.jsTestIsAsync = true;
+ axClock = accessibilityController.accessibleElementById("clock");
+ axClockWithDisplayContents = accessibilityController.accessibleElementById("clock-display-contents");
+
+ testOutput += "Verifying initial states:\n\n";
+ verifyIsAtomic();
+ verifyIsBusy();
+ verifyLiveRegionRelevant();
+ verifyLiveRegionStatus();
+
+ const clock = document.getElementById("clock");
+ const clockWithDisplayContents = document.getElementById("clock-display-contents");
+
+ testOutput += "Setting aria-busy to true.\n\n";
+ clock.ariaBusy = "true";
+ clockWithDisplayContents.ariaBusy = "true";
+ setTimeout(async function() {
+ await waitFor(() => axClock.isBusy && axClockWithDisplayContents.isBusy);
+ verifyIsBusy();
+
+ testOutput += "Setting aria-busy to false.\n\n";
+ clock.ariaBusy = "false";
+ clockWithDisplayContents.ariaBusy = "false";
+ await waitFor(() => !axClock.isBusy && !axClockWithDisplayContents.isBusy);
+ verifyIsBusy();
+
+ testOutput += "Setting aria-atomic to false.\n\n";
+ clock.ariaAtomic = "false";
+ clockWithDisplayContents.ariaAtomic = "false";
+ await waitFor(() => !axClock.isAtomicLiveRegion && !axClockWithDisplayContents.isAtomicLiveRegion);
+ verifyIsAtomic();
+
+ testOutput += "Setting aria-relevant to removals.\n\n";
+ clock.ariaRelevant = "removals";
+ clockWithDisplayContents.ariaRelevant = "removals";
+ await waitFor(() => axClock.liveRegionRelevant.includes("removals") && axClockWithDisplayContents.liveRegionRelevant.includes("removals"));
+ verifyLiveRegionRelevant();
+
+ testOutput += "Setting aria-live to assertive.\n\n";
+ clock.ariaLive = "assertive";
+ clockWithDisplayContents.ariaLive = "assertive";
+ await waitFor(() => axClock.liveRegionStatus.includes("assertive") && axClockWithDisplayContents.liveRegionStatus.includes("assertive"));
+ verifyLiveRegionStatus();
+
+ debug(testOutput);
+ finishJSTest();
+ }, 0);
+ }
+</script>
+</body>
+</html>
+
Modified: trunk/LayoutTests/platform/glib/TestExpectations (295445 => 295446)
--- trunk/LayoutTests/platform/glib/TestExpectations 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/LayoutTests/platform/glib/TestExpectations 2022-06-10 06:25:28 UTC (rev 295446)
@@ -344,8 +344,8 @@
# Need to implement AccessibilityUIElement::domIdentifier() for this test to pass after webkit.org/b/234198.
accessibility/focusable-div.html [ Skip ]
-# Missing AccessibilityUIElement::isBusy implementation.
-accessibility/aria-busy-updates-after-dynamic-change.html [ Skip ]
+# Missing AccessibilityUIElement::{isBusy, isAtomicLiveRegion, liveRegionStatus, liveRegionRelevant} implementations.
+accessibility/live-region-attributes-update-after-dynamic-change.html [ Skip ]
# Timing out since it was added in https://bugs.webkit.org/show_bug.cgi?id=239434.
accessibility/text-updates-after-dynamic-change.html [ Skip ]
Modified: trunk/LayoutTests/platform/ios/TestExpectations (295445 => 295446)
--- trunk/LayoutTests/platform/ios/TestExpectations 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/LayoutTests/platform/ios/TestExpectations 2022-06-10 06:25:28 UTC (rev 295446)
@@ -2115,7 +2115,6 @@
fast/dom/linkify-phone-numbers.html [ Pass ]
accessibility/table-exposure-updates-dynamically.html [ Pass ]
-accessibility/aria-busy-updates-after-dynamic-change.html [ Pass ]
accessibility/aria-describedby-on-input.html [ Pass ]
accessibility/aria-hidden-display-contents-element.html [ Pass ]
accessibility/aria-multiline.html [ Pass ]
@@ -2126,6 +2125,7 @@
accessibility/element-haspopup.html [ Pass ]
accessibility/heading-level.html [ Pass ]
accessibility/list-with-dynamically-changing-content.html [ Pass ]
+accessibility/live-region-attributes-update-after-dynamic-change.html [ Pass ]
accessibility/node-only-inert-object.html [ Pass ]
accessibility/node-only-object-element-rect.html [ Pass ]
accessibility/text-updates-after-dynamic-change.html [ Pass ]
Modified: trunk/LayoutTests/platform/win/TestExpectations (295445 => 295446)
--- trunk/LayoutTests/platform/win/TestExpectations 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/LayoutTests/platform/win/TestExpectations 2022-06-10 06:25:28 UTC (rev 295446)
@@ -501,8 +501,8 @@
accessibility/aria-readonly-updates-after-dynamic-change.html [ Skip ]
# Missing AccessibilityUIElement::isRequired implementation.
accessibility/aria-required-updates-after-dynamic-change.html [ Skip ]
-# Missing AccessibilityUIElement::isBusy implementation.
-accessibility/aria-busy-updates-after-dynamic-change.html [ Skip ]
+# Missing AccessibilityUIElement::{isBusy, isAtomicLiveRegion, liveRegionStatus, liveRegionRelevant} implementations.
+accessibility/live-region-attributes-update-after-dynamic-change.html [ Skip ]
# TODO Conic gradients
http/wpt/css/css-images-4/conic-gradient-parsing.html [ Skip ]
Modified: trunk/Source/WebCore/accessibility/AXLogger.cpp (295445 => 295446)
--- trunk/Source/WebCore/accessibility/AXLogger.cpp 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Source/WebCore/accessibility/AXLogger.cpp 2022-06-10 06:25:28 UTC (rev 295446)
@@ -406,6 +406,9 @@
case AXObjectCache::AXNotification::AXImageOverlayChanged:
stream << "AXImageOverlayChanged";
break;
+ case AXObjectCache::AXNotification::AXIsAtomicChanged:
+ stream << "AXIsAtomicChanged";
+ break;
case AXObjectCache::AXNotification::AXLanguageChanged:
stream << "AXLanguageChanged";
break;
@@ -460,6 +463,12 @@
case AXObjectCache::AXNotification::AXLiveRegionChanged:
stream << "AXLiveRegionChanged";
break;
+ case AXObjectCache::AXNotification::AXLiveRegionRelevantChanged:
+ stream << "AXLiveRegionRelevantChanged";
+ break;
+ case AXObjectCache::AXNotification::AXLiveRegionStatusChanged:
+ stream << "AXLiveRegionStatusChanged";
+ break;
case AXObjectCache::AXNotification::AXMenuListItemSelected:
stream << "AXMenuListItemSelected";
break;
Modified: trunk/Source/WebCore/accessibility/AXObjectCache.cpp (295445 => 295446)
--- trunk/Source/WebCore/accessibility/AXObjectCache.cpp 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.cpp 2022-06-10 06:25:28 UTC (rev 295446)
@@ -1940,6 +1940,8 @@
if (attrName == aria_activedescendantAttr)
handleActiveDescendantChanged(*element);
+ else if (attrName == aria_atomicAttr)
+ postNotification(element, AXIsAtomicChanged);
else if (attrName == aria_busyAttr)
postNotification(element, AXObjectCache::AXElementBusyChanged);
else if (attrName == aria_valuenowAttr || attrName == aria_valuetextAttr)
@@ -1954,6 +1956,8 @@
postNotification(element, AXGrabbedStateChanged);
else if (attrName == aria_levelAttr)
postNotification(element, AXLevelChanged);
+ else if (attrName == aria_liveAttr)
+ postNotification(element, AXLiveRegionStatusChanged);
else if (attrName == aria_valuemaxAttr)
postNotification(element, AXMaximumValueChanged);
else if (attrName == aria_valueminAttr)
@@ -1969,6 +1973,8 @@
postNotification(element, AXMultiSelectableStateChanged);
else if (attrName == aria_posinsetAttr)
postNotification(element, AXPositionInSetChanged);
+ else if (attrName == aria_relevantAttr)
+ postNotification(element, AXLiveRegionRelevantChanged);
else if (attrName == aria_selectedAttr)
selectedStateChanged(element);
else if (attrName == aria_setsizeAttr)
@@ -3560,7 +3566,10 @@
case AXGrabbedStateChanged:
case AXHasPopupChanged:
case AXInvalidStatusChanged:
+ case AXIsAtomicChanged:
case AXLevelChanged:
+ case AXLiveRegionStatusChanged:
+ case AXLiveRegionRelevantChanged:
case AXMenuListValueChanged:
case AXMultiSelectableStateChanged:
case AXPressedStateChanged:
Modified: trunk/Source/WebCore/accessibility/AXObjectCache.h (295445 => 295446)
--- trunk/Source/WebCore/accessibility/AXObjectCache.h 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.h 2022-06-10 06:25:28 UTC (rev 295446)
@@ -288,6 +288,7 @@
AXHasPopupChanged,
AXIdAttributeChanged,
AXImageOverlayChanged,
+ AXIsAtomicChanged,
AXLanguageChanged,
AXLayoutComplete,
AXLevelChanged,
@@ -303,6 +304,8 @@
AXScrolledToAnchor,
AXLiveRegionCreated,
AXLiveRegionChanged,
+ AXLiveRegionRelevantChanged,
+ AXLiveRegionStatusChanged,
AXMaximumValueChanged,
AXMenuListItemSelected,
AXMenuListValueChanged,
Modified: trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp (295445 => 295446)
--- trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp 2022-06-10 06:25:28 UTC (rev 295446)
@@ -1304,6 +1304,43 @@
return equalLettersIgnoringASCIICase(getAttribute(attributeName), "true"_s);
}
+const String AccessibilityNodeObject::liveRegionStatus() const
+{
+ const auto& liveRegionStatus = getAttribute(aria_liveAttr);
+ if (liveRegionStatus.isEmpty())
+ return defaultLiveRegionStatusForRole(roleValue());
+
+ return liveRegionStatus;
+}
+
+const String AccessibilityNodeObject::liveRegionRelevant() const
+{
+ const auto& relevant = getAttribute(aria_relevantAttr);
+ // Default aria-relevant = "additions text".
+ if (relevant.isEmpty())
+ return "additions text"_s;
+
+ return relevant;
+}
+
+bool AccessibilityNodeObject::liveRegionAtomic() const
+{
+ const auto& atomic = getAttribute(aria_atomicAttr);
+ if (equalLettersIgnoringASCIICase(atomic, "true"_s))
+ return true;
+ if (equalLettersIgnoringASCIICase(atomic, "false"_s))
+ return false;
+
+ // WAI-ARIA "alert" and "status" roles have an implicit aria-atomic value of true.
+ switch (roleValue()) {
+ case AccessibilityRole::ApplicationAlert:
+ case AccessibilityRole::ApplicationStatus:
+ return true;
+ default:
+ return false;
+ }
+}
+
bool AccessibilityNodeObject::isGenericFocusableElement() const
{
if (!canSetFocusAttribute())
Modified: trunk/Source/WebCore/accessibility/AccessibilityNodeObject.h (295445 => 295446)
--- trunk/Source/WebCore/accessibility/AccessibilityNodeObject.h 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Source/WebCore/accessibility/AccessibilityNodeObject.h 2022-06-10 06:25:28 UTC (rev 295446)
@@ -173,6 +173,10 @@
bool elementAttributeValue(const QualifiedName&) const;
+ const String liveRegionStatus() const override;
+ const String liveRegionRelevant() const override;
+ bool liveRegionAtomic() const override;
+
bool isLabelable() const;
AccessibilityObject* correspondingControlForLabelElement() const override;
AccessibilityObject* correspondingLabelForControlElement() const override;
Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (295445 => 295446)
--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp 2022-06-10 06:25:28 UTC (rev 295446)
@@ -3264,46 +3264,6 @@
return AccessibilityNodeObject::canHaveChildren();
}
-const String AccessibilityRenderObject::liveRegionStatus() const
-{
- const AtomString& liveRegionStatus = getAttribute(aria_liveAttr);
- // These roles have implicit live region status.
- if (liveRegionStatus.isEmpty())
- return defaultLiveRegionStatusForRole(roleValue());
-
- return liveRegionStatus;
-}
-
-const String AccessibilityRenderObject::liveRegionRelevant() const
-{
- static MainThreadNeverDestroyed<const AtomString> defaultLiveRegionRelevant("additions text"_s);
- const AtomString& relevant = getAttribute(aria_relevantAttr);
-
- // Default aria-relevant = "additions text".
- if (relevant.isEmpty())
- return "additions text"_s;
-
- return relevant;
-}
-
-bool AccessibilityRenderObject::liveRegionAtomic() const
-{
- const AtomString& atomic = getAttribute(aria_atomicAttr);
- if (equalLettersIgnoringASCIICase(atomic, "true"_s))
- return true;
- if (equalLettersIgnoringASCIICase(atomic, "false"_s))
- return false;
-
- // WAI-ARIA "alert" and "status" roles have an implicit aria-atomic value of true.
- switch (roleValue()) {
- case AccessibilityRole::ApplicationAlert:
- case AccessibilityRole::ApplicationStatus:
- return true;
- default:
- return false;
- }
-}
-
bool AccessibilityRenderObject::canHaveSelectedChildren() const
{
switch (roleValue()) {
Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h (295445 => 295446)
--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h 2022-06-10 06:25:28 UTC (rev 295446)
@@ -266,10 +266,6 @@
OptionSet<SpeakAs> speakAsProperty() const override;
- const String liveRegionStatus() const override;
- const String liveRegionRelevant() const override;
- bool liveRegionAtomic() const override;
-
bool inheritsPresentationalRole() const override;
bool shouldGetTextFromNode(AccessibilityTextUnderElementMode) const;
Modified: trunk/Source/WebCore/accessibility/atspi/AXObjectCacheAtspi.cpp (295445 => 295446)
--- trunk/Source/WebCore/accessibility/atspi/AXObjectCacheAtspi.cpp 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Source/WebCore/accessibility/atspi/AXObjectCacheAtspi.cpp 2022-06-10 06:25:28 UTC (rev 295446)
@@ -213,6 +213,12 @@
break;
case AXMultiSelectableStateChanged:
break;
+ case AXIsAtomicChanged:
+ break;
+ case AXLiveRegionRelevantChanged:
+ break;
+ case AXLiveRegionStatusChanged:
+ break;
}
}
Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp (295445 => 295446)
--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.cpp 2022-06-10 06:25:28 UTC (rev 295446)
@@ -1244,6 +1244,18 @@
return JSValueMakeString(context, language.get());
}
+static JSValueRef getLiveRegionRelevantCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
+{
+ auto liveRegionRelevant = toAXElement(thisObject)->liveRegionRelevant();
+ return JSValueMakeString(context, liveRegionRelevant.get());
+}
+
+static JSValueRef getLiveRegionStatusCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
+{
+ auto liveRegionStatus = toAXElement(thisObject)->liveRegionStatus();
+ return JSValueMakeString(context, liveRegionStatus.get());
+}
+
static JSValueRef getOrientationCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
{
auto orientation = toAXElement(thisObject)->orientation();
@@ -1327,6 +1339,11 @@
return JSValueMakeString(context, selectedTextRange.get());
}
+static JSValueRef getIsAtomicLiveRegionCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
+{
+ return JSValueMakeBoolean(context, toAXElement(thisObject)->isAtomicLiveRegion());
+}
+
static JSValueRef getIsBusyCallback(JSContextRef context, JSObjectRef thisObject, JSStringRef propertyName, JSValueRef* exception)
{
return JSValueMakeBoolean(context, toAXElement(thisObject)->isBusy());
@@ -1929,6 +1946,7 @@
{ "columnCount", columnCountCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "insertionPointLineNumber", getInsertionPointLineNumberCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "selectedTextRange", getSelectedTextRangeCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "isAtomicLiveRegion", getIsAtomicLiveRegionCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "isBusy", getIsBusyCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "isEnabled", getIsEnabledCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "isRequired", getIsRequiredCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
@@ -1953,6 +1971,8 @@
{ "documentURI", getDocumentURICallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "url", getURLCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "isValid", getIsValidCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "liveRegionRelevant", getLiveRegionRelevantCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+ { "liveRegionStatus", getLiveRegionStatusCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "orientation", getOrientationCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "ariaIsGrabbed", getARIAIsGrabbedCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ "ariaDropEffects", getARIADropEffectsCallback, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
Modified: trunk/Tools/DumpRenderTree/AccessibilityUIElement.h (295445 => 295446)
--- trunk/Tools/DumpRenderTree/AccessibilityUIElement.h 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/DumpRenderTree/AccessibilityUIElement.h 2022-06-10 06:25:28 UTC (rev 295446)
@@ -133,6 +133,8 @@
JSRetainPtr<JSStringRef> accessibilityValue() const;
void setValue(JSStringRef);
JSRetainPtr<JSStringRef> helpText() const;
+ JSRetainPtr<JSStringRef> liveRegionRelevant() const;
+ JSRetainPtr<JSStringRef> liveRegionStatus() const;
JSRetainPtr<JSStringRef> orientation() const;
double x();
double y();
@@ -145,6 +147,7 @@
JSRetainPtr<JSStringRef> valueDescription();
int insertionPointLineNumber();
JSRetainPtr<JSStringRef> selectedTextRange();
+ bool isAtomicLiveRegion() const;
bool isBusy() const;
bool isEnabled();
bool isRequired() const;
Modified: trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm (295445 => 295446)
--- trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/DumpRenderTree/ios/AccessibilityUIElementIOS.mm 2022-06-10 06:25:28 UTC (rev 295446)
@@ -75,6 +75,9 @@
- (NSUInteger)accessibilityARIARowIndex;
- (NSUInteger)accessibilityARIAColumnIndex;
- (BOOL)accessibilityARIAIsBusy;
+- (BOOL)accessibilityARIALiveRegionIsAtomic;
+- (NSString *)accessibilityARIALiveRegionStatus;
+- (NSString *)accessibilityARIARelevantStatus;
- (UIAccessibilityTraits)_axContainedByFieldsetTrait;
- (id)_accessibilityFieldsetAncestor;
- (BOOL)_accessibilityHasTouchEventListener;
@@ -812,6 +815,16 @@
return concatenateAttributeAndValue(@"AXLabel", [m_element accessibilityLabel]);
}
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionRelevant() const
+{
+ return [[m_element accessibilityARIARelevantStatus] createJSStringRef];
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionStatus() const
+{
+ return [[m_element accessibilityARIALiveRegionStatus] createJSStringRef];
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::orientation() const
{
return WTR::createJSString();
@@ -862,6 +875,11 @@
return -1;
}
+bool AccessibilityUIElement::isAtomicLiveRegion() const
+{
+ return [m_element accessibilityARIALiveRegionIsAtomic];
+}
+
bool AccessibilityUIElement::isBusy() const
{
return [m_element accessibilityARIAIsBusy];
Modified: trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm (295445 => 295446)
--- trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/DumpRenderTree/mac/AccessibilityUIElementMac.mm 2022-06-10 06:25:28 UTC (rev 295446)
@@ -684,6 +684,16 @@
return stringAttributeValue(NSAccessibilityDOMIdentifierAttribute);
}
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionRelevant() const
+{
+ return stringAttributeValue(@"AXARIARelevant");
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionStatus() const
+{
+ return stringAttributeValue(@"AXARIALive");
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::orientation() const
{
BEGIN_AX_OBJC_EXCEPTIONS
@@ -852,6 +862,11 @@
return false;
}
+bool AccessibilityUIElement::isAtomicLiveRegion() const
+{
+ return boolAttributeValue(@"AXARIAAtomic");
+}
+
bool AccessibilityUIElement::isBusy() const
{
return boolAttributeValue(@"AXElementBusy");
Modified: trunk/Tools/DumpRenderTree/win/AccessibilityUIElementWin.cpp (295445 => 295446)
--- trunk/Tools/DumpRenderTree/win/AccessibilityUIElementWin.cpp 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/DumpRenderTree/win/AccessibilityUIElementWin.cpp 2022-06-10 06:25:28 UTC (rev 295446)
@@ -523,6 +523,21 @@
return 0;
}
+bool AccessibilityUIElement::isAtomicLiveRegion() const
+{
+ return false;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionRelevant() const
+{
+ return 0;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionStatus() const
+{
+ return 0;
+}
+
double AccessibilityUIElement::intValue() const
{
if (!m_element)
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h (295445 => 295446)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h 2022-06-10 06:25:28 UTC (rev 295446)
@@ -156,6 +156,8 @@
JSRetainPtr<JSStringRef> accessibilityValue() const;
JSRetainPtr<JSStringRef> helpText() const;
JSRetainPtr<JSStringRef> orientation() const;
+ JSRetainPtr<JSStringRef> liveRegionRelevant() const;
+ JSRetainPtr<JSStringRef> liveRegionStatus() const;
double x();
double y();
double width();
@@ -168,6 +170,7 @@
JSRetainPtr<JSStringRef> valueDescription();
int insertionPointLineNumber();
JSRetainPtr<JSStringRef> selectedTextRange();
+ bool isAtomicLiveRegion() const;
bool isBusy() const;
bool isEnabled();
bool isRequired() const;
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl (295445 => 295446)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl 2022-06-10 06:25:28 UTC (rev 295446)
@@ -58,6 +58,8 @@
readonly attribute DOMString valueDescription;
readonly attribute DOMString url;
readonly attribute DOMString speakAs;
+ readonly attribute DOMString liveRegionRelevant;
+ readonly attribute DOMString liveRegionStatus;
readonly attribute DOMString orientation;
readonly attribute long insertionPointLineNumber;
readonly attribute DOMString selectedTextRange;
@@ -82,6 +84,7 @@
readonly attribute long minValue;
readonly attribute long maxValue;
+ readonly attribute boolean isAtomicLiveRegion;
readonly attribute boolean isBusy;
readonly attribute boolean isEnabled;
readonly attribute boolean isRequired;
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp (295445 => 295446)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp 2022-06-10 06:25:28 UTC (rev 295446)
@@ -881,6 +881,21 @@
return OpaqueJSString::tryCreate(orientationValue).leakRef();
}
+bool AccessibilityUIElement::isAtomicLiveRegion() const
+{
+ return false;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionRelevant() const
+{
+ return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionStatus() const
+{
+ return nullptr;
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::stringValue()
{
m_element->updateBackingStore();
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm (295445 => 295446)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm 2022-06-10 06:25:28 UTC (rev 295446)
@@ -83,6 +83,9 @@
- (NSUInteger)accessibilityARIARowIndex;
- (NSUInteger)accessibilityARIAColumnIndex;
- (BOOL)accessibilityARIAIsBusy;
+- (BOOL)accessibilityARIALiveRegionIsAtomic;
+- (NSString *)accessibilityARIALiveRegionStatus;
+- (NSString *)accessibilityARIARelevantStatus;
- (NSString *)accessibilityInvalidStatus;
- (UIAccessibilityTraits)_axContainedByFieldsetTrait;
- (id)_accessibilityFieldsetAncestor;
@@ -532,6 +535,16 @@
return concatenateAttributeAndValue(@"AXLabel", [m_element accessibilityLabel]);
}
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionRelevant() const
+{
+ return [[m_element accessibilityARIARelevantStatus] createJSStringRef];
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionStatus() const
+{
+ return [[m_element accessibilityARIALiveRegionStatus] createJSStringRef];
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::orientation() const
{
return createJSString();
@@ -632,6 +645,11 @@
return false;
}
+bool AccessibilityUIElement::isAtomicLiveRegion() const
+{
+ return [m_element accessibilityARIALiveRegionIsAtomic];
+}
+
bool AccessibilityUIElement::isBusy() const
{
return [m_element accessibilityARIAIsBusy];
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm (295445 => 295446)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm 2022-06-10 06:25:28 UTC (rev 295446)
@@ -805,6 +805,16 @@
return nullptr;
}
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionStatus() const
+{
+ return stringAttributeValue(@"AXARIALive");
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionRelevant() const
+{
+ return stringAttributeValue(@"AXARIARelevant");
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::orientation() const
{
BEGIN_AX_OBJC_EXCEPTIONS
@@ -983,6 +993,11 @@
return false;
}
+bool AccessibilityUIElement::isAtomicLiveRegion() const
+{
+ return boolAttributeValue(@"AXARIAAtomic");
+}
+
bool AccessibilityUIElement::isBusy() const
{
return boolAttributeValue(@"AXElementBusy");
Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp (295445 => 295446)
--- trunk/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp 2022-06-10 04:58:46 UTC (rev 295445)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityUIElementWin.cpp 2022-06-10 06:25:28 UTC (rev 295446)
@@ -298,6 +298,24 @@
return nullptr;
}
+bool AccessibilityUIElement::isAtomicLiveRegion() const
+{
+ notImplemented();
+ return false;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionRelevant() const
+{
+ notImplemented();
+ return nullptr;
+}
+
+JSRetainPtr<JSStringRef> AccessibilityUIElement::liveRegionStatus() const
+{
+ notImplemented();
+ return nullptr;
+}
+
JSRetainPtr<JSStringRef> AccessibilityUIElement::stringValue()
{
notImplemented();