Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: cfe51e0a34f03d8db9e573f6ea104160f5208549
      
https://github.com/WebKit/WebKit/commit/cfe51e0a34f03d8db9e573f6ea104160f5208549
  Author: Joshua Hoffman <jhoffma...@apple.com>
  Date:   2024-01-25 (Thu, 25 Jan 2024)

  Changed paths:
    A LayoutTests/accessibility/combobox-linked-listbox-destroyed-expected.txt
    A LayoutTests/accessibility/combobox-linked-listbox-destroyed.html
    M LayoutTests/platform/glib/TestExpectations
    M Source/WebCore/accessibility/AXCoreObject.cpp
    M Source/WebCore/accessibility/AXCoreObject.h
    M Source/WebCore/accessibility/AXObjectCache.cpp
    M Source/WebCore/accessibility/AXObjectCache.h
    M Source/WebCore/accessibility/AccessibilityNodeObject.cpp
    M Source/WebCore/accessibility/AccessibilityNodeObject.h
    M Source/WebCore/accessibility/AccessibilityObject.h
    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

  Log Message:
  -----------
  AX: Comboboxes don't expose their linked objects correctly
https://bugs.webkit.org/show_bug.cgi?id=267754
rdar://problem/121242926

Reviewed by Chris Fleizach.

This patch resolves a bug that would cause comboboxes to not expose their 
linked objects
correctly.

That bug prevented ATs from properly navigating common combox patterns like the 
demos
provided on sites like the following:
* 
https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-list/
* https://webkit.org/blog-files/aria1.0/combobox_with_live_region_status.html

One reason that these comboboxes were "losing" their linked objects was due to 
the way we
currently handle replaced objects. After an object is replaced once, we 
wouldn't update the
m_nodeObjectMapping with the last AXID associated with a given node. This 
information is
critical to how we decide whether to update relations or not, so we were 
missing out on
critical relations updates, and not establishing controller/owner relationships 
properly.
To address this, we now update the m_nodeObjectMapping when new AX render 
objects are
created for the same node. We also now keep track of recently deleted 
relations, since
objects may be removed from relations due to their renderer being destroyed, 
and use this
to determine if a replaced object should result in re-calculating relations.

A test was added to verify that this behavior works for both aria-owns and 
aria-controls.

This patch also unifies several methods (linkedObjects, 
addRadioButtonGroupChildren, and
addRadioButtonGroupMembers) between live and isolated objects by moving them to 
AXCoreObject.
This not only permits constructing linkedObjects on the secondary thread from 
our cached
relations, but also allows linkedObjects to be more accurate, as it will be in 
lockstep
with the isolated tree's relations and not a separate property to update.

* LayoutTests/accessibility/combobox-linked-listbox-destroyed-expected.txt: 
Added.
* LayoutTests/accessibility/combobox-linked-listbox-destroyed.html: Added.
* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/accessibility/AXCoreObject.cpp:
(WebCore::AXCoreObject::linkedObjects const):
(WebCore::AXCoreObject::appendRadioButtonDescendants const):
(WebCore::AXCoreObject::appendRadioButtonGroupMembers const):
* Source/WebCore/accessibility/AXCoreObject.h:
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::cacheAndInitializeWrapper):
(WebCore::AXObjectCache::performDeferredCacheUpdate):
(WebCore::AXObjectCache::updateIsolatedTree):
(WebCore::AXObjectCache::removeRelations):
(WebCore::AXObjectCache::updateRelationsIfNeeded):
* Source/WebCore/accessibility/AXObjectCache.h:
* Source/WebCore/accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::radioButtonGroup const):
(WebCore::AccessibilityNodeObject::isRadioInput const):
(WebCore::AccessibilityNodeObject::internalLinkElement const):
(WebCore::AccessibilityNodeObject::addRadioButtonGroupChildren const): Deleted.
(WebCore::AccessibilityNodeObject::addRadioButtonGroupMembers const): Deleted.
(WebCore::AccessibilityNodeObject::linkedObjects const): Deleted.
* Source/WebCore/accessibility/AccessibilityNodeObject.h:
* Source/WebCore/accessibility/AccessibilityObject.h:
(WebCore::AccessibilityObject::observableObject const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::initializeProperties):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::updateNodeProperties):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:

Canonical link: https://commits.webkit.org/273542@main


_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to