[webkit-changes] [WebKit/WebKit] f5c7df: AX: Include ignored objects in the core, platform-...
Tyler Wilcock
noreply at github.com
Sat Sep 28 09:31:38 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: f5c7df811ff73918a79c4e438c91e5b6546e9fa3
https://github.com/WebKit/WebKit/commit/f5c7df811ff73918a79c4e438c91e5b6546e9fa3
Author: Tyler Wilcock <tyler_w at apple.com>
Date: 2024-09-28 (Sat, 28 Sep 2024)
Changed paths:
M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
M Source/WTF/wtf/PlatformEnableCocoa.h
M Source/WebCore/accessibility/AXCoreObject.cpp
M Source/WebCore/accessibility/AXCoreObject.h
M Source/WebCore/accessibility/AXImage.cpp
M Source/WebCore/accessibility/AXLogger.cpp
M Source/WebCore/accessibility/AXObjectCache.cpp
M Source/WebCore/accessibility/AXSearchManager.cpp
M Source/WebCore/accessibility/AXTextMarker.cpp
M Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp
M Source/WebCore/accessibility/AccessibilityLabel.cpp
M Source/WebCore/accessibility/AccessibilityList.cpp
M Source/WebCore/accessibility/AccessibilityListBox.cpp
M Source/WebCore/accessibility/AccessibilityMathMLElement.cpp
M Source/WebCore/accessibility/AccessibilityMenuList.cpp
M Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp
M Source/WebCore/accessibility/AccessibilityNodeObject.cpp
M Source/WebCore/accessibility/AccessibilityObject.cpp
M Source/WebCore/accessibility/AccessibilityObject.h
M Source/WebCore/accessibility/AccessibilityRenderObject.cpp
M Source/WebCore/accessibility/AccessibilityTable.cpp
M Source/WebCore/accessibility/AccessibilityTableColumn.cpp
M Source/WebCore/accessibility/AccessibilityTableRow.cpp
M Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h
M Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm
M Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm
M Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
Log Message:
-----------
AX: Include ignored objects in the core, platform-agnostic accessibility tree behind a new feature flag
https://bugs.webkit.org/show_bug.cgi?id=280012
rdar://136316595
Reviewed by Chris Fleizach.
This patch adds a compile-time feature flag, ENABLE_INCLUDE_IGNORED_IN_CORE_AX_TREE, and a runtime feature flag,
IncludeIgnoredInCoreAXTree, to start including ignored objects in the "core", platform-agnostic accessibility tree.
This is necessary to support off-main-thread text marker computation, e.g. for emitting a newline when exiting the
accessibility object of an ignored `tr` element, as one of many examples.
Prior to this commit, any use of `AXCoreObject::children` implicitly assumed that the returned objects were unignored.
With this commit, that function is renamed to `unignoredChildren`, and any context which expected to only process
unignored objects now uses it. A new function, `childrenIncludingIgnored` is added, and that is used in a few places.
There were several direct usages of `m_children` that were problematic, as `m_children` now includes ignored objects
when ENABLE_INCLUDE_IGNORED_IN_CORE_AX_TREE is true. These usages are replaced with unignoredChildren(/* updateChildrenIfNeeded */ false),
achieving the same behavior in both configurations with more explicit intent.
There are many test failures left to fix in ENABLE_INCLUDE_IGNORED_IN_CORE_AX_TREE with this change (6 ITM off, 60 ITM on).
Those will be addressed in follow-up patches. We will also need to find ways to optimize `unignoredChildren`, either by
caching the result or something else, as this naive initial implementation does show up heavily in samples since the
accessibility tree now has signifcantly more objects to traverse through.
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WTF/wtf/PlatformEnableCocoa.h:
* Source/WebCore/accessibility/AXCoreObject.cpp:
(WebCore::AXCoreObject::tabChildren):
(WebCore::AXCoreObject::unignoredChildren):
(WebCore::AXCoreObject::nextInPreOrder):
(WebCore::AXCoreObject::nextSiblingIncludingIgnored const):
(WebCore::AXCoreObject::nextUnignoredSibling const):
(WebCore::AXCoreObject::nextUnignoredSiblingOrParent const):
(WebCore::AXCoreObject::contents):
(WebCore::AXCoreObject::ariaTreeItemContent):
(WebCore::AXCoreObject::selectedRadioButton):
(WebCore::AXCoreObject::selectedTabItem):
(WebCore::AXCoreObject::appendRadioButtonDescendants const):
(WebCore::AXCoreObject::parentObjectUnignored const):
* Source/WebCore/accessibility/AXCoreObject.h:
(WebCore::AXCoreObject::childrenIncludingIgnored):
(WebCore::AXCoreObject::unignoredChildren):
(WebCore::AXCoreObject::childrenIDs):
(WebCore::Accessibility::findUnignoredChild):
(WebCore::Accessibility::enumerateUnignoredDescendants):
(WebCore::Accessibility::findChild): Deleted.
(WebCore::Accessibility::enumerateDescendants): Deleted.
* Source/WebCore/accessibility/AXImage.cpp:
(WebCore::AXImage::imageOverlayElements):
* Source/WebCore/accessibility/AXLogger.cpp:
(WebCore::streamSubtree):
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::modalElementHasAccessibleContent):
(WebCore::AXObjectCache::focusedImageMapUIElement):
(WebCore::AXObjectCache::handleChildrenChanged):
* Source/WebCore/accessibility/AXSearchManager.cpp:
(WebCore::appendChildrenToArray):
* Source/WebCore/accessibility/AXTextMarker.cpp:
(WebCore::appendChildren):
(WebCore::AXTextMarker::characterRangeForLine const):
(WebCore::AXTextMarker::lineNumberForIndex const):
* Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp:
(WebCore::AccessibilityARIAGridRow::rowHeader):
* Source/WebCore/accessibility/AccessibilityLabel.cpp:
(WebCore::childrenContainOnlyStaticText):
(WebCore::AccessibilityLabel::containsOnlyStaticText const):
(WebCore::AccessibilityLabel::updateChildrenIfNecessary):
* Source/WebCore/accessibility/AccessibilityList.cpp:
(WebCore::AccessibilityList::childHasPseudoVisibleListItemMarkers):
(WebCore::AccessibilityList::determineAccessibilityRole):
* Source/WebCore/accessibility/AccessibilityListBox.cpp:
(WebCore::AccessibilityListBox::setSelectedChildren):
(WebCore::AccessibilityListBox::selectedChildren):
(WebCore::AccessibilityListBox::visibleChildren):
(WebCore::AccessibilityListBox::elementAccessibilityHitTest const):
* Source/WebCore/accessibility/AccessibilityMathMLElement.cpp:
(WebCore::AccessibilityMathMLElement::mathRadicand):
(WebCore::AccessibilityMathMLElement::mathRootIndexObject):
(WebCore::AccessibilityMathMLElement::mathNumeratorObject):
(WebCore::AccessibilityMathMLElement::mathDenominatorObject):
(WebCore::AccessibilityMathMLElement::mathUnderObject):
(WebCore::AccessibilityMathMLElement::mathOverObject):
(WebCore::AccessibilityMathMLElement::mathBaseObject):
(WebCore::AccessibilityMathMLElement::mathSubscriptObject):
(WebCore::AccessibilityMathMLElement::mathSuperscriptObject):
* Source/WebCore/accessibility/AccessibilityMenuList.cpp:
(WebCore::AccessibilityMenuList::didUpdateActiveOption):
* Source/WebCore/accessibility/AccessibilityMenuListPopup.cpp:
(WebCore::AccessibilityMenuListPopup::selectedChildren):
(WebCore::AccessibilityMenuListPopup::handleChildrenChanged):
(WebCore::AccessibilityMenuListPopup::didUpdateActiveOption):
* Source/WebCore/accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::boundingBoxRect const):
(WebCore::AccessibilityNodeObject::visibleChildren):
(WebCore::AccessibilityNodeObject::internalLinkElement const):
(WebCore::AccessibilityNodeObject::textAsLabelFor const):
(WebCore::AccessibilityNodeObject::stringValue const):
(WebCore::accessibleNameForNode):
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::insertChild):
(WebCore::AccessibilityObject::clickPoint):
(WebCore::AccessibilityObject::ariaTreeRows):
(WebCore::AccessibilityObject::disclosedRows):
(WebCore::AccessibilityObject::supportsPressAction const):
(WebCore::AccessibilityObject::elementAccessibilityHitTest const):
(WebCore::AccessibilityObject::includeIgnoredInCoreTree const):
(WebCore::AccessibilityObject::ariaListboxSelectedChildren):
(WebCore::AccessibilityObject::selectedListItems):
(WebCore::AccessibilityObject::parentObjectUnignored const): Deleted.
* Source/WebCore/accessibility/AccessibilityObject.h:
(WebCore::AccessibilityObject::parentInCoreTree const):
* Source/WebCore/accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::stringValue const):
(WebCore::AccessibilityRenderObject::documentLinks):
(WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest const):
(WebCore::AccessibilityRenderObject::updateAttachmentViewParents):
(WebCore::AccessibilityRenderObject::addNodeOnlyChildren):
(WebCore::AccessibilityRenderObject::updateRoleAfterChildrenCreation):
* Source/WebCore/accessibility/AccessibilityTable.cpp:
(WebCore::AccessibilityTable::updateChildrenRoles):
(WebCore::AccessibilityTable::addChildren):
(WebCore::AccessibilityTable::cells):
* Source/WebCore/accessibility/AccessibilityTableColumn.cpp:
(WebCore::AccessibilityTableColumn::elementRect const):
(WebCore::AccessibilityTableColumn::columnHeader):
* Source/WebCore/accessibility/AccessibilityTableRow.cpp:
(WebCore::AccessibilityTableRow::rowHeader):
(WebCore::AccessibilityTableRow::addChildren):
* Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper accessibilityElements]):
(-[WebAccessibilityObjectWrapper accessibilityElementCount]):
(-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
(-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):
(-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
(accessibleElementsForObjects):
(-[WebAccessibilityObjectWrapper accessibilityIsFirstItemInSuggestion]):
(-[WebAccessibilityObjectWrapper accessibilityIsLastItemInSuggestion]):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::AXIsolatedObject):
(WebCore::AXIsolatedObject::initializeProperties):
(WebCore::AXIsolatedObject::setProperty):
(WebCore::AXIsolatedObject::boolAttributeValue const):
(WebCore::AXIsolatedObject::relativeFrameFromChildren const):
(WebCore::AXIsolatedObject::sibling const): Deleted.
(WebCore::AXIsolatedObject::siblingOrParent const): Deleted.
(WebCore::AXIsolatedObject::parentObjectUnignored const): Deleted.
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::createEmptyContent):
(WebCore::AXIsolatedTree::shouldCreateNodeChange):
(WebCore::AXIsolatedTree::collectNodeChangesForSubtree):
(WebCore::AXIsolatedTree::updateNode):
(WebCore::AXIsolatedTree::updatePropertiesForSelfAndDescendants):
(WebCore::AXIsolatedTree::updateChildren):
(WebCore::AXIsolatedTree::removeNode):
(WebCore::AXIsolatedTree::lastMarker):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:
(WebCore::AXIsolatedTree::isUnconnectedNode const):
* Source/WebCore/accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm:
(WebCore::AXIsolatedObject::textMarkerRange const):
* Source/WebCore/accessibility/mac/AccessibilityObjectMac.mm:
(WebCore::isEmptyGroup):
* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(transformSpecialChildrenCases):
(children):
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
(-[WebAccessibilityObjectWrapper accessibilityIndexOfChild:]):
(-[WebAccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
(-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):
Canonical link: https://commits.webkit.org/284418@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list