Changeset 272390 in webkit
- Timestamp:
- Feb 4, 2021 2:33:13 PM (18 months ago)
- Location:
- trunk
- Files:
-
- 2 added
- 5 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/accessibility/focusable-inside-hidden-expected.txt (added)
-
LayoutTests/accessibility/focusable-inside-hidden.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/accessibility/AXObjectCache.cpp (modified) (3 diffs)
-
Source/WebCore/accessibility/AXObjectCache.h (modified) (1 diff)
-
Source/WebCore/accessibility/AccessibilityObject.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r272379 r272390 1 2021-02-04 Chris Fleizach <cfleizach@apple.com> 2 3 AX: expose focusable elements even if element or ancestor has aria-hidden=true 4 https://bugs.webkit.org/show_bug.cgi?id=220534 5 <rdar://problem/71865875> 6 7 Reviewed by Zalan Bujtas. 8 9 * accessibility/focusable-inside-hidden-expected.txt: Added. 10 * accessibility/focusable-inside-hidden.html: Added. 11 1 12 2021-02-04 Myles C. Maxfield <mmaxfield@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r272379 r272390 1 2021-02-04 Chris Fleizach <cfleizach@apple.com> 2 3 AX: expose focusable elements even if element or ancestor has aria-hidden=true 4 https://bugs.webkit.org/show_bug.cgi?id=220534 5 <rdar://problem/71865875> 6 7 Reviewed by Zalan Bujtas. 8 9 ARIA states that if an item is focused, then it should override aria-hidden status. 10 https://github.com/w3c/aria/pull/1387/files 11 12 Test: accessibility/focusable-inside-hidden.html 13 14 * accessibility/AXObjectCache.cpp: 15 (WebCore::isNodeAriaVisible): 16 * accessibility/AccessibilityObject.cpp: 17 (WebCore::AccessibilityObject::isAXHidden const): 18 (WebCore::AccessibilityObject::setIsIgnoredFromParentDataForChild): 19 1 20 2021-02-04 Myles C. Maxfield <mmaxfield@apple.com> 2 21 -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r272067 r272390 1828 1828 } 1829 1829 1830 void AXObjectCache::recomputeIsIgnored(Node* node) 1831 { 1832 if (AccessibilityObject* obj = get(node)) 1833 obj->notifyIfIgnoredValueChanged(); 1834 } 1835 1830 1836 void AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates() 1831 1837 { … … 3152 3158 m_deferredAttributeChange.clear(); 3153 3159 3154 for (auto& deferredFocusedChangeContext : m_deferredFocusedNodeChange) 3160 for (auto& deferredFocusedChangeContext : m_deferredFocusedNodeChange) { 3155 3161 handleFocusedUIElementChanged(deferredFocusedChangeContext.first, deferredFocusedChangeContext.second); 3162 // Recompute isIgnored after a focus change in case that altered visibility. 3163 recomputeIsIgnored(deferredFocusedChangeContext.first); 3164 recomputeIsIgnored(deferredFocusedChangeContext.second); 3165 } 3156 3166 m_deferredFocusedNodeChange.clear(); 3157 3167 … … 3350 3360 return false; 3351 3361 3362 // If an element is focused, it should not be hidden. 3363 if (is<Element>(*node) && downcast<Element>(*node).focused()) 3364 return true; 3365 3352 3366 // ARIA Node visibility is controlled by aria-hidden 3353 3367 // 1) if aria-hidden=true, the whole subtree is hidden -
trunk/Source/WebCore/accessibility/AXObjectCache.h
r272067 r272390 194 194 195 195 void deferAttributeChangeIfNeeded(const QualifiedName&, Element*); 196 void recomputeIsIgnored(RenderObject* renderer); 196 void recomputeIsIgnored(RenderObject*); 197 void recomputeIsIgnored(Node*); 197 198 198 199 #if ENABLE(ACCESSIBILITY) -
trunk/Source/WebCore/accessibility/AccessibilityObject.cpp
r271415 r272390 3198 3198 bool AccessibilityObject::isAXHidden() const 3199 3199 { 3200 if (isFocused()) 3201 return false; 3202 3200 3203 return Accessibility::findAncestor<AccessibilityObject>(*this, true, [] (const AccessibilityObject& object) { 3201 return equalLettersIgnoringASCIICase(object.getAttribute(aria_hiddenAttr), "true") ;3204 return equalLettersIgnoringASCIICase(object.getAttribute(aria_hiddenAttr), "true") && !object.isFocused(); 3202 3205 }) != nullptr; 3203 3206 } … … 3568 3571 AccessibilityIsIgnoredFromParentData result = AccessibilityIsIgnoredFromParentData(this); 3569 3572 if (!m_isIgnoredFromParentData.isNull()) { 3570 result.isAXHidden = m_isIgnoredFromParentData.isAXHidden || equalLettersIgnoringASCIICase(child->getAttribute(aria_hiddenAttr), "true");3573 result.isAXHidden = (m_isIgnoredFromParentData.isAXHidden || equalLettersIgnoringASCIICase(child->getAttribute(aria_hiddenAttr), "true")) && !child->isFocused(); 3571 3574 result.isPresentationalChildOfAriaRole = m_isIgnoredFromParentData.isPresentationalChildOfAriaRole || ariaRoleHasPresentationalChildren(); 3572 3575 result.isDescendantOfBarrenParent = m_isIgnoredFromParentData.isDescendantOfBarrenParent || !canHaveChildren();
Note: See TracChangeset
for help on using the changeset viewer.