Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 41d4dd496795863c1a114a1cb123d22c875c27c8
      
https://github.com/WebKit/WebKit/commit/41d4dd496795863c1a114a1cb123d22c875c27c8
  Author: Tyler Wilcock <[email protected]>
  Date:   2023-10-03 (Tue, 03 Oct 2023)

  Changed paths:
    M Source/WebCore/accessibility/AXImage.cpp
    M Source/WebCore/accessibility/AXImage.h
    M Source/WebCore/accessibility/AccessibilityAttachment.h
    M Source/WebCore/accessibility/AccessibilityImageMapLink.cpp
    M Source/WebCore/accessibility/AccessibilityImageMapLink.h
    M Source/WebCore/accessibility/AccessibilityLabel.h
    M Source/WebCore/accessibility/AccessibilityList.cpp
    M Source/WebCore/accessibility/AccessibilityList.h
    M Source/WebCore/accessibility/AccessibilityListBox.h
    M Source/WebCore/accessibility/AccessibilityListBoxOption.h
    M Source/WebCore/accessibility/AccessibilityMenuList.h
    M Source/WebCore/accessibility/AccessibilityMenuListOption.h
    M Source/WebCore/accessibility/AccessibilityMenuListPopup.h
    M Source/WebCore/accessibility/AccessibilityNodeObject.cpp
    M Source/WebCore/accessibility/AccessibilityNodeObject.h
    M Source/WebCore/accessibility/AccessibilityObject.cpp
    M Source/WebCore/accessibility/AccessibilityObject.h
    M Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp
    M Source/WebCore/accessibility/AccessibilityProgressIndicator.h
    M Source/WebCore/accessibility/AccessibilityRenderObject.h
    M Source/WebCore/accessibility/AccessibilitySVGElement.h
    M Source/WebCore/accessibility/AccessibilitySVGRoot.cpp
    M Source/WebCore/accessibility/AccessibilitySVGRoot.h
    M Source/WebCore/accessibility/AccessibilityScrollView.h
    M Source/WebCore/accessibility/AccessibilityScrollbar.h
    M Source/WebCore/accessibility/AccessibilitySlider.h
    M Source/WebCore/accessibility/AccessibilitySpinButton.h
    M Source/WebCore/accessibility/AccessibilityTable.h
    M Source/WebCore/accessibility/AccessibilityTableColumn.h
    M Source/WebCore/accessibility/AccessibilityTableHeaderContainer.h

  Log Message:
  -----------
  AX: AccessibilityRenderObject::updateRoleAfterChildrenCreation causes 
unnecessary AXRoleChanged notifications for several subclasses
https://bugs.webkit.org/show_bug.cgi?id=262351
rdar://problem/116213145

Reviewed by Andres Gonzalez.

AccessibilityRenderObject::updateRoleAfterChildrenCreation is predicated on the 
assumption that the
class uses m_role. However, many subclasses don't, instead hard-coding a value 
like so:

AccessibilityRole roleValue() const final { return AccessibilityRole::Label; }

This means that m_role (not actually used) may differ from roleValue(), causing 
updateRoleAfterChildrenCreation
to post a spurious AXRoleChanged notification every time the object's children 
are cleared and re-added, in turn
causing lots of wasted work, as AXRoleChanged causes a full node update in the 
isolated tree.

With this patch, we move most subclasses towards using `m_role` rather than 
overriding roleValue(),
preventing spurious AXRoleChanged notifications (because now we will properly 
detect that the role has not changed).

This saves 10k node changes of 132k total node changes on an internal web page, 
as this webpage has thousands
of SVG elements that cleared and re-added their children a few times.

* Source/WebCore/accessibility/AXImage.cpp:
(WebCore::AXImage::determineAccessibilityRole):
(WebCore::AXImage::roleValue const): Deleted.
* Source/WebCore/accessibility/AXImage.h:
* Source/WebCore/accessibility/AccessibilityAttachment.h:
* Source/WebCore/accessibility/AccessibilityImageMapLink.cpp:
(WebCore::AccessibilityImageMapLink::setHTMLAreaElement):
(WebCore::AccessibilityImageMapLink::determineAccessibilityRole):
(WebCore::AccessibilityImageMapLink::detachFromParent):
(WebCore::AccessibilityImageMapLink::roleValue const): Deleted.
* Source/WebCore/accessibility/AccessibilityImageMapLink.h:
* Source/WebCore/accessibility/AccessibilityLabel.h:
* Source/WebCore/accessibility/AccessibilityList.cpp:
(WebCore::AccessibilityList::determineAccessibilityRole):
(WebCore::AccessibilityList::roleValue const): Deleted.
* Source/WebCore/accessibility/AccessibilityList.h:
* Source/WebCore/accessibility/AccessibilityListBox.h:
* Source/WebCore/accessibility/AccessibilityListBoxOption.h:
* Source/WebCore/accessibility/AccessibilityMenuList.h:
* Source/WebCore/accessibility/AccessibilityMenuListOption.h:
* Source/WebCore/accessibility/AccessibilityMenuListPopup.h:
* Source/WebCore/accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::init):
(WebCore::AccessibilityNodeObject::computeAccessibilityIsIgnored const):
(WebCore::AccessibilityNodeObject::updateRole): Deleted.
* Source/WebCore/accessibility/AccessibilityNodeObject.h:
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::init):
(WebCore::AccessibilityObject::updateRole):
* Source/WebCore/accessibility/AccessibilityObject.h:
(WebCore::AccessibilityObject::init): Deleted.
(WebCore::AccessibilityObject::updateRole): Deleted.
* Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp:
(WebCore::AccessibilityProgressIndicator::determineAccessibilityRole):
(WebCore::AccessibilityProgressIndicator::roleValue const): Deleted.
* Source/WebCore/accessibility/AccessibilityProgressIndicator.h:
* Source/WebCore/accessibility/AccessibilityRenderObject.h:
* Source/WebCore/accessibility/AccessibilitySVGElement.h:
* Source/WebCore/accessibility/AccessibilitySVGRoot.cpp:
(WebCore::AccessibilitySVGRoot::determineAccessibilityRole):
(WebCore::AccessibilitySVGRoot::roleValue const): Deleted.
* Source/WebCore/accessibility/AccessibilitySVGRoot.h:
* Source/WebCore/accessibility/AccessibilityScrollView.h:
* Source/WebCore/accessibility/AccessibilityScrollbar.h:
* Source/WebCore/accessibility/AccessibilitySlider.h:
* Source/WebCore/accessibility/AccessibilitySpinButton.h:
* Source/WebCore/accessibility/AccessibilityTable.h:
* Source/WebCore/accessibility/AccessibilityTableColumn.h:
* Source/WebCore/accessibility/AccessibilityTableHeaderContainer.h:

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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to