Changeset 222433 in webkit


Ignore:
Timestamp:
Sep 24, 2017 4:52:36 AM (7 years ago)
Author:
jdiggs@igalia.com
Message:

[ATK] Object attributes are missing for ARIA live region roles
https://bugs.webkit.org/show_bug.cgi?id=171174

Reviewed by Chris Fleizach.

Source/WebCore:

Expose the values of aria-live, aria-atomic, and aria-relevant via AtkObject
attributes on live region elements and their descendants. In order to accomplish
exposure on descendants, add AccessibilityObject::ariaLiveRegionAncestor(). Add an
optional argument, excludeIfOff, to AccessibilityObject::isInsideARIALiveRegion()
and AccessibilityObject::supportsARIALiveRegion(). This is needed because we need
to expose live region properties via ATK even in the case where the live region
is disabled/off, but supportsARIALiveRegion() deliberately checks if the live
region is enabled.

Tests: accessibility/aria-liveregion-marquee-default.html

accessibility/aria-liveregions-attributes.html

  • accessibility/AccessibilityObject.cpp:

(WebCore::AccessibilityObject::isInsideARIALiveRegion const):
(WebCore::AccessibilityObject::ariaLiveRegionAncestor const):
(WebCore::AccessibilityObject::supportsARIALiveRegion const):

  • accessibility/AccessibilityObject.h:
  • accessibility/atk/WebKitAccessibleWrapperAtk.cpp:

(webkitAccessibleGetAttributes):

Tools:

Add support for testing property values for AXARIALive, AXARIAAtomic, and
AXARIARelevant. Also add handling for testing whether AXElementBusy is
"supported" (in ATK, busy is a state and is supported on all elements
regardless of whether the state is present or absent from the state set).

  • WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

(WTR::AccessibilityUIElement::boolAttributeValue):
(WTR::AccessibilityUIElement::isAttributeSupported):

LayoutTests:

Move two macOS tests to the shared layout test set.

  • accessibility/aria-liveregion-marquee-default-expected.txt: Renamed from LayoutTests/accessibility/mac/aria-liveregion-marquee-default-expected.txt.
  • accessibility/aria-liveregion-marquee-default.html: Renamed from LayoutTests/accessibility/mac/aria-liveregion-marquee-default.html.
  • accessibility/aria-liveregions-attributes-expected.txt: Renamed from LayoutTests/accessibility/mac/aria-liveregions-attributes-expected.txt.
  • accessibility/aria-liveregions-attributes.html: Renamed from LayoutTests/accessibility/mac/aria-liveregions-attributes.html.
  • platform/win/TestExpectations: Add the above tests to the list of known failures.
Location:
trunk
Files:
8 edited
4 moved

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r222432 r222433  
     12017-09-24  Joanmarie Diggs  <jdiggs@igalia.com>
     2
     3        [ATK] Object attributes are missing for ARIA live region roles
     4        https://bugs.webkit.org/show_bug.cgi?id=171174
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Move two macOS tests to the shared layout test set.
     9
     10        * accessibility/aria-liveregion-marquee-default-expected.txt: Renamed from LayoutTests/accessibility/mac/aria-liveregion-marquee-default-expected.txt.
     11        * accessibility/aria-liveregion-marquee-default.html: Renamed from LayoutTests/accessibility/mac/aria-liveregion-marquee-default.html.
     12        * accessibility/aria-liveregions-attributes-expected.txt: Renamed from LayoutTests/accessibility/mac/aria-liveregions-attributes-expected.txt.
     13        * accessibility/aria-liveregions-attributes.html: Renamed from LayoutTests/accessibility/mac/aria-liveregions-attributes.html.
     14        * platform/win/TestExpectations: Add the above tests to the list of known failures.
     15
    1162017-09-24  Zan Dobersek  <zdobersek@igalia.com>
    217
  • trunk/LayoutTests/accessibility/aria-liveregion-marquee-default.html

    r222432 r222433  
    22<html>
    33<head>
    4 <script src="../../resources/js-test-pre.js"></script>
     4<script src="../resources/js-test-pre.js"></script>
    55</head>
    66<body id="body">
     
    2828</script>
    2929
    30 <script src="../../resources/js-test-post.js"></script>
     30<script src="../resources/js-test-post.js"></script>
    3131</body>
    3232</html>
  • trunk/LayoutTests/accessibility/aria-liveregions-attributes.html

    r222432 r222433  
    22<html>
    33<head>
    4 <script src="../../resources/js-test-pre.js"></script>
     4<script src="../resources/js-test-pre.js"></script>
    55</head>
    66<body id="body">
     
    103103</script>
    104104
    105 <script src="../../resources/js-test-post.js"></script>
     105<script src="../resources/js-test-post.js"></script>
    106106</body>
    107107</html>
  • trunk/LayoutTests/platform/win/TestExpectations

    r222423 r222433  
    4646
    4747accessibility/media-emits-object-replacement.html [ Failure ]
     48accessibility/aria-liveregions-attributes.html [ Failure ]
     49accessibility/aria-liveregion-marquee-default.html [ Failure ]
    4850
    4951
  • trunk/Source/WebCore/ChangeLog

    r222429 r222433  
     12017-09-24  Joanmarie Diggs  <jdiggs@igalia.com>
     2
     3        [ATK] Object attributes are missing for ARIA live region roles
     4        https://bugs.webkit.org/show_bug.cgi?id=171174
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Expose the values of aria-live, aria-atomic, and aria-relevant via AtkObject
     9        attributes on live region elements and their descendants. In order to accomplish
     10        exposure on descendants, add AccessibilityObject::ariaLiveRegionAncestor(). Add an
     11        optional argument, excludeIfOff, to AccessibilityObject::isInsideARIALiveRegion()
     12        and AccessibilityObject::supportsARIALiveRegion(). This is needed because we need
     13        to expose live region properties via ATK even in the case where the live region
     14        is disabled/off, but supportsARIALiveRegion() deliberately checks if the live
     15        region is enabled.
     16
     17        Tests: accessibility/aria-liveregion-marquee-default.html
     18               accessibility/aria-liveregions-attributes.html
     19
     20        * accessibility/AccessibilityObject.cpp:
     21        (WebCore::AccessibilityObject::isInsideARIALiveRegion const):
     22        (WebCore::AccessibilityObject::ariaLiveRegionAncestor const):
     23        (WebCore::AccessibilityObject::supportsARIALiveRegion const):
     24        * accessibility/AccessibilityObject.h:
     25        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
     26        (webkitAccessibleGetAttributes):
     27
    1282017-09-23  Youenn Fablet  <youenn@apple.com>
    229
  • trunk/Source/WebCore/accessibility/AccessibilityObject.cpp

    r222013 r222433  
    24982498}
    24992499   
    2500 bool AccessibilityObject::isInsideARIALiveRegion() const
    2501 {
    2502     if (supportsARIALiveRegion())
    2503         return true;
    2504    
    2505     return AccessibilityObject::matchedParent(*this, false, [] (const AccessibilityObject& object) {
    2506         return object.supportsARIALiveRegion();
    2507     }) != nullptr;
     2500bool AccessibilityObject::isInsideARIALiveRegion(bool excludeIfOff) const
     2501{
     2502    return ariaLiveRegionAncestor(excludeIfOff);
     2503}
     2504   
     2505AccessibilityObject* AccessibilityObject::ariaLiveRegionAncestor(bool excludeIfOff) const
     2506{
     2507    return const_cast<AccessibilityObject*>(AccessibilityObject::matchedParent(*this, true, [excludeIfOff] (const AccessibilityObject& object) {
     2508        return object.supportsARIALiveRegion(excludeIfOff);
     2509    }));
    25082510}
    25092511
     
    25362538}
    25372539   
    2538 bool AccessibilityObject::supportsARIALiveRegion() const
    2539 {
    2540     return liveRegionStatusIsEnabled(ariaLiveRegionStatus());
     2540bool AccessibilityObject::supportsARIALiveRegion(bool excludeIfOff) const
     2541{
     2542    const AtomicString& liveRegionStatus = ariaLiveRegionStatus();
     2543    return excludeIfOff ? liveRegionStatusIsEnabled(liveRegionStatus) : !liveRegionStatus.isEmpty();
    25412544}
    25422545
  • trunk/Source/WebCore/accessibility/AccessibilityObject.h

    r219751 r222433  
    974974   
    975975    // ARIA live-region features.
    976     bool supportsARIALiveRegion() const;
    977     bool isInsideARIALiveRegion() const;
     976    bool supportsARIALiveRegion(bool excludeIfOff = true) const;
     977    bool isInsideARIALiveRegion(bool excludeIfOff = true) const;
     978    AccessibilityObject* ariaLiveRegionAncestor(bool excludeIfOff = true) const;
    978979    virtual const String ariaLiveRegionStatus() const { return String(); }
    979980    virtual const AtomicString& ariaLiveRegionRelevant() const { return nullAtom(); }
  • trunk/Source/WebCore/accessibility/atk/WebKitAccessibleWrapperAtk.cpp

    r218809 r222433  
    548548    if (!roleDescription.isEmpty())
    549549        attributeSet = addToAtkAttributeSet(attributeSet, "roledescription", roleDescription.utf8().data());
     550
     551    // We need to expose the live region attributes even if the live region is currently disabled/off.
     552    if (auto liveContainer = coreObject->ariaLiveRegionAncestor(false)) {
     553        String liveStatus = liveContainer->ariaLiveRegionStatus();
     554        String relevant = liveContainer->ariaLiveRegionRelevant();
     555        bool isAtomic = liveContainer->ariaLiveRegionAtomic();
     556        String liveRole = roleString.isEmpty() ? computedRoleString : roleString;
     557
     558        // According to the Core AAM, we need to expose the above properties with "container-" prefixed
     559        // object attributes regardless of whether the container is this object, or an ancestor of it.
     560        attributeSet = addToAtkAttributeSet(attributeSet, "container-live", liveStatus.utf8().data());
     561        attributeSet = addToAtkAttributeSet(attributeSet, "container-relevant", relevant.utf8().data());
     562        if (isAtomic)
     563            attributeSet = addToAtkAttributeSet(attributeSet, "container-atomic", "true");
     564        if (!liveRole.isEmpty())
     565            attributeSet = addToAtkAttributeSet(attributeSet, "container-live-role", liveRole.utf8().data());
     566
     567        // According to the Core AAM, if this object is the live region (rather than its descendant),
     568        // we must expose the above properties on the object without a "container-" prefix.
     569        if (liveContainer == coreObject) {
     570            attributeSet = addToAtkAttributeSet(attributeSet, "live", liveStatus.utf8().data());
     571            attributeSet = addToAtkAttributeSet(attributeSet, "relevant", relevant.utf8().data());
     572            if (isAtomic)
     573                attributeSet = addToAtkAttributeSet(attributeSet, "atomic", "true");
     574        } else if (!isAtomic && coreObject->ariaLiveRegionAtomic())
     575            attributeSet = addToAtkAttributeSet(attributeSet, "atomic", "true");
     576    }
    550577
    551578    return attributeSet;
  • trunk/Tools/ChangeLog

    r222426 r222433  
     12017-09-24  Joanmarie Diggs  <jdiggs@igalia.com>
     2
     3        [ATK] Object attributes are missing for ARIA live region roles
     4        https://bugs.webkit.org/show_bug.cgi?id=171174
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Add support for testing property values for AXARIALive, AXARIAAtomic, and
     9        AXARIARelevant. Also add handling for testing whether AXElementBusy is
     10        "supported" (in ATK, busy is a state and is supported on all elements
     11        regardless of whether the state is present or absent from the state set).
     12
     13        * WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
     14        (WTR::AccessibilityUIElement::boolAttributeValue):
     15        (WTR::AccessibilityUIElement::isAttributeSupported):
     16
    1172017-09-23  Michael Catanzaro  <mcatanzaro@igalia.com>
    218
  • trunk/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp

    r220403 r222433  
    8383    SortNameIndex,
    8484    CurrentNameIndex,
     85    AriaLiveNameIndex,
     86    AriaAtomicNameIndex,
     87    AriaRelevantNameIndex,
     88    BusyNameIndex,
    8589
    8690    // Attribute values.
     
    107111    { "AXSortDirection", "sort" },
    108112    { "AXARIACurrent", "current" },
     113    { "AXARIALive", "live" },
     114    { "AXARIAAtomic", "atomic" },
     115    { "AXARIARelevant", "relevant" },
     116    { "AXElementBusy", "busy" },
    109117
    110118    // Attribute values.
     
    12171225        return ATK_IS_TABLE_CELL(m_element.get());
    12181226
     1227    if (attributeString == "AXARIAAtomic") {
     1228        String atkAttribute = coreAttributeToAtkAttribute(attribute);
     1229        return getAttributeSetValueForId(ATK_OBJECT(m_element.get()), ObjectAttributeType, atkAttribute) == "true";
     1230    }
     1231
    12191232    return false;
    12201233}
     
    12841297        return false;
    12851298
     1299    // In ATK, "busy" is a state and is supported on all AtkObject instances.
     1300    if (atkAttributeName == "busy")
     1301        return true;
     1302
    12861303    // For now, an attribute is supported whether it's exposed as a object or a text attribute.
    12871304    String attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), ObjectAttributeType, atkAttributeName);
    12881305    if (attributeValue.isEmpty())
    12891306        attributeValue = getAttributeSetValueForId(ATK_OBJECT(m_element.get()), TextAttributeType, atkAttributeName);
     1307
     1308    // When the aria-live value is "off", we expose that value via the "live" object attribute.
     1309    if (atkAttributeName == "live" && attributeValue == "off")
     1310        return false;
    12901311
    12911312    return !attributeValue.isEmpty();
Note: See TracChangeset for help on using the changeset viewer.