[webkit-changes] [WebKit/WebKit] 2d9b49: AX: Eliminate all ways AXCoreObject::elementRect c...
Tyler Wilcock
noreply at github.com
Sat Apr 8 11:11:04 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 2d9b495ba0234def09ddf3b307d65ccbd57e5825
https://github.com/WebKit/WebKit/commit/2d9b495ba0234def09ddf3b307d65ccbd57e5825
Author: Tyler Wilcock <tyler_w at apple.com>
Date: 2023-04-08 (Sat, 08 Apr 2023)
Changed paths:
M Source/WebCore/accessibility/AccessibilityMenuListPopup.h
M Source/WebCore/accessibility/AccessibilityObject.h
M Source/WebCore/accessibility/AccessibilityObjectInterface.h
M Source/WebCore/accessibility/cocoa/AccessibilityObjectCocoa.mm
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp
M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
M Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm
Log Message:
-----------
AX: Eliminate all ways AXCoreObject::elementRect could be called on an AXIsolatedObject
https://bugs.webkit.org/show_bug.cgi?id=255138
rdar://problem/107741185
Reviewed by Chris Fleizach.
In a future patch, we will be caching the AXCoreObject::relativeFrame of each isolated object.
The relative frame is the position of an object relative to the current viewport (i.e. relative
frame is affected by things like scrolling). This is different than `AXCoreObject::elementRect`,
which is the "absolute" rect (relative to the root document origin, not effected by scrolling).
To avoid the need to cache both `elementRect` and `relativeFrame`, we must eliminate all ways
`elementRect` could be called on an `AXIsolatedObject` in the wrapper and elsewhere. This patch
accomplishes this in two ways.
First, AXCoreObject::size() is made virtual. In the future, AXIsolatedObject will be able to serve
this entirely off the main-thread (because `relativeFrame` will be cached).
Second, a new AXCoreObject::screenRelativePosition method is added to service
`-[WebAccessibilityObjectWrapperMac position]`. This batches the two main-thread trips `position`
currently makes into one single trip, and prevents calling `elementRect` on an AXIsolatedObject.
This patch also groups all frame / rect related methods in AccessibilityObjectInterface.h together.
* Source/WebCore/accessibility/AccessibilityMenuListPopup.h:
* Source/WebCore/accessibility/AccessibilityObject.h:
* Source/WebCore/accessibility/AccessibilityObjectInterface.h:
(WebCore::AXCoreObject::size const): Deleted.
* Source/WebCore/accessibility/cocoa/AccessibilityObjectCocoa.mm:
(WebCore::AccessibilityObject::screenRelativePosition const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::screenRelativePosition const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper position]):
(-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
Canonical link: https://commits.webkit.org/262752@main
More information about the webkit-changes
mailing list