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.
<rdar://problem/87556197>
Created attachment 449077 [details] Patch
(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.
Created attachment 449120 [details] Patch
Good points. Fixed both issues with the latest patch.
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].