Bug 235189

Summary: AX: AXIsolatedObject::initializeAttributeData should compute AXAncestorFlags if they are unexpectedly uninitialized
Product: WebKit Reporter: Tyler Wilcock <tyler_w>
Component: AccessibilityAssignee: Tyler Wilcock <tyler_w>
Status: RESOLVED FIXED    
Severity: Normal CC: aboxhall, andresg_22, apinheiro, cfleizach, dmazzoni, ews-watchlist, jcraig, jdiggs, samuel_white, webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Patch
none
Patch none

Tyler Wilcock
Reported 2022-01-13 10:01:10 PST
Currently in AXIsolatedObject::initializeAttributeData we have this: auto ancestorFlags = object.ancestorFlags(); // Only store the object's ancestor flags if any are set (excluding the "is initialized" flag). if (ancestorFlags ^ AXAncestorFlag::FlagsInitialized) setProperty(AXPropertyName::AncestorFlags, object.ancestorFlags()); Instead, we should do the traversal to initialize the flags rather than creating an isolated object with missing properties.
Attachments
Patch (6.21 KB, patch)
2022-01-13 10:11 PST, Tyler Wilcock
no flags
Patch (6.29 KB, patch)
2022-01-13 15:25 PST, Tyler Wilcock
no flags
Radar WebKit Bug Importer
Comment 1 2022-01-13 10:01:21 PST
Tyler Wilcock
Comment 2 2022-01-13 10:11:46 PST
Andres Gonzalez
Comment 3 2022-01-13 14:02:56 PST
(In reply to Tyler Wilcock from comment #2) > Created attachment 449077 [details] > Patch --- a/Source/WebCore/accessibility/AccessibilityObject.cpp +++ a/Source/WebCore/accessibility/AccessibilityObject.cpp +OptionSet<AXAncestorFlag> AccessibilityObject::computeAncestorFlagsWithTraversal() const +{ + OptionSet<AXAncestorFlag> computedFlags; + computedFlags.set(AXAncestorFlag::FlagsInitialized, true); Shouldn't we check that it hasn't been initialized yet? At least an ASSERT to catch it on debug? + Accessibility::enumerateAncestors<AXCoreObject>(*this, false, [&] (const AXCoreObject& ancestor) { + if (is<AccessibilityObject>(ancestor)) + computedFlags.add(downcast<AccessibilityObject>(ancestor).computeAncestorFlags()); Can't we use AccessibilityObject as template parameter? Or let the compiler infer the parameter? In either case, I don't think you would need is<> and the downcast.
Tyler Wilcock
Comment 4 2022-01-13 15:25:18 PST
Tyler Wilcock
Comment 5 2022-01-13 15:25:45 PST
Good points. Fixed both issues with the latest patch.
EWS
Comment 6 2022-01-14 13:05:26 PST
Committed r288027 (246053@main): <https://commits.webkit.org/246053@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 449120 [details].
Note You need to log in before you can comment on or make changes to this bug.