Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e5a92c63a66a763a8b1bfdf6b872d4aa19e22920
      
https://github.com/WebKit/WebKit/commit/e5a92c63a66a763a8b1bfdf6b872d4aa19e22920
  Author: Tyler Wilcock <[email protected]>
  Date:   2025-05-06 (Tue, 06 May 2025)

  Changed paths:
    M LayoutTests/accessibility/link-becomes-visited-expected.txt
    M LayoutTests/accessibility/link-becomes-visited.html
    A LayoutTests/platform/ios/accessibility/link-becomes-visited-expected.txt
    M Source/WebCore/accessibility/AXCoreObject.h
    M Source/WebCore/accessibility/AXLogger.cpp
    M Source/WebCore/accessibility/AXObjectCache.cpp
    M Source/WebCore/accessibility/AXSearchManager.cpp
    M Source/WebCore/accessibility/AccessibilityObject.cpp
    M Source/WebCore/accessibility/AccessibilityObject.h
    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/mac/WebAccessibilityObjectWrapperMac.mm

  Log Message:
  -----------
  AX: Text descendants of links can incorrectly return 
InsideLink::InsideVisited or InsideLink::InsideUnvisited despite not being 
links, in turn causing AXProperty::InsideLink to be cached for them, wasting 
memory
https://bugs.webkit.org/show_bug.cgi?id=292622
rdar://150779990

Reviewed by Joshua Hoffman.

RenderTexts take their parent's style, which is a problem for the 
implementation of AccessibilityObject::insideLink
prior to this commit, as RenderStyle::isLink would return true for these 
RenderTexts, despite them not actually being
links. This is confusing and wrong from a behavioral standpoint, and also 
caused AXProperty::InsideLink to be cached
for objects associated with these RenderTexts, wasting memory.

Fix this by adding an AXCoreObject::isLink check. Also replace 
AXProperty::InsideLink with AXProperty::IsVisited,
meaning we only ever cache a value for visited links. Some webpages have tens 
of thousands of links, so this can
make quite a significant difference.

* LayoutTests/accessibility/link-becomes-visited-expected.txt:
* LayoutTests/accessibility/link-becomes-visited.html:
New testcase added ensuring static text doesn't think it is ever `isVisited`.
* Source/WebCore/accessibility/AXCoreObject.h:
(WebCore::AXCoreObject::isUnvisitedLink const):
(WebCore::AXCoreObject::isVisitedLink const):
(WebCore::AXCoreObject::isUnvisited const): Deleted.
(WebCore::AXCoreObject::isVisited const): Deleted.
* Source/WebCore/accessibility/AXLogger.cpp:
(WebCore::operator<<):
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::updateIsolatedTree):
* Source/WebCore/accessibility/AXSearchManager.cpp:
(WebCore::AXSearchManager::matchForSearchKeyAtIndex):
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::isVisited const):
(WebCore::AccessibilityObject::insideLink const): Deleted.
* Source/WebCore/accessibility/AccessibilityObject.h:
* Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
(-[WebAccessibilityObjectWrapper accessibilityTraits]):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::initializeProperties):
(WebCore::AXIsolatedObject::setProperty):
(WebCore::AXIsolatedObject::boolAttributeValue const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::updateNodeProperties):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:
* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to