Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 190312ee1df566632573fc0d568044de218ccb37
https://github.com/WebKit/WebKit/commit/190312ee1df566632573fc0d568044de218ccb37
Author: Joshua Hoffman <[email protected]>
Date: 2026-03-05 (Thu, 05 Mar 2026)
Changed paths:
M LayoutTests/TestExpectations
A LayoutTests/accessibility/mac/client/absolute-position-iframe-expected.txt
A LayoutTests/accessibility/mac/client/absolute-position-iframe.html
A LayoutTests/accessibility/mac/client/resources/frame-content.html
M LayoutTests/accessibility/mac/line-range-for-text-marker.html
M LayoutTests/accessibility/mac/text-marker-for-bounds.html
A
LayoutTests/http/tests/site-isolation/accessibility/client/absolute-position-iframe-expected.txt
A
LayoutTests/http/tests/site-isolation/accessibility/client/absolute-position-iframe.html
A
LayoutTests/http/tests/site-isolation/accessibility/client/iframe-bounds-expected.txt
A
LayoutTests/http/tests/site-isolation/accessibility/client/iframe-bounds.html
A LayoutTests/http/tests/site-isolation/resources/frame-with-text.html
M LayoutTests/platform/mac-wk2/TestExpectations
M Source/WebCore/accessibility/AXCoreObject.h
M Source/WebCore/accessibility/AXObjectCache.cpp
M Source/WebCore/accessibility/AXObjectCache.h
M Source/WebCore/accessibility/AccessibilityObject.cpp
M Source/WebCore/accessibility/AccessibilityObject.h
M Source/WebCore/accessibility/AccessibilityRenderObject.cpp
M Source/WebCore/accessibility/AccessibilityScrollView.cpp
M Source/WebCore/accessibility/AccessibilityScrollView.h
M Source/WebCore/accessibility/ios/AccessibilityObjectIOS.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
M Source/WebCore/page/ChromeClient.h
M Source/WebCore/rendering/AccessibilityRegionContext.cpp
M Source/WebKit/Scripts/webkit/messages.py
M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/UIProcess/WebPageProxy.messages.in
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
M Source/WebKit/WebProcess/WebPage/WebPage.h
M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
M Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm
M Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm
M
Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.h
M
Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.mm
M Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm
Log Message:
-----------
[Site Isolation] AX: Setup screen position infrastructure for remote frames
https://bugs.webkit.org/show_bug.cgi?id=308524
rdar://169469908
Reviewed by Tyler Wilcock.
This PR sets up new infrastructure for computing and propagating the screen
position and
screen relative positions of local and remote subframes. Importantly, this PR
removes the
AXConvertRelativeFrame parameterized attribute when
ENABLE(ACCESSIBILITY_LOCAL_FRAME) is
enabled, as well as removes AXRelativeFrame from attribute names, so that ATs
just rely on
screen position.
In both the local and remote frame case, we now cache the screen-relative
position of the
frames on the AXObjectCache as well as the transforms, and use it in
convertFrameToSpace
(in both live and isolated objects) in order to serve the screen position for
all elements.
This is also cached in the AXIsolatedTree, using the pending pattern seen
elsewhere.
Also for both local and remote frames, during add[Remote/Local]FrameChild(), we
send a
RequestFrameScreenPosition IPC message to the UIProcess. The UIProcess walks
the frame tree
using convertRectToMainFrameCoordinates to compute the screen position of the
frame, and
sends the result back to the frame's web content process via
UpdateRemotePageAccessibilityScreenPosition.
When ENABLE(ACCESSIBILITY_LOCAL_FRAME) is off, the legacy codepath and behavior
is fully
supported.
One piece missing from this PR is updating these cached screen positions when
the scroll
position of any frame changes. That will be addressed in a follow up, as it
will require
large code additions that build on top of this PR. Test expectations have been
updated to
reflect this.
Tests: accessibility/mac/client/absolute-position-iframe.html
http/tests/site-isolation/accessibility/client/absolute-position-iframe.html
http/tests/site-isolation/accessibility/client/iframe-bounds.html
* LayoutTests/TestExpectations:
* LayoutTests/accessibility/mac/client/absolute-position-iframe-expected.txt:
Added.
* LayoutTests/accessibility/mac/client/absolute-position-iframe.html: Added.
* LayoutTests/accessibility/mac/client/resources/frame-content.html: Added.
* LayoutTests/accessibility/mac/line-range-for-text-marker.html:
* LayoutTests/accessibility/mac/text-marker-for-bounds.html:
*
LayoutTests/http/tests/site-isolation/accessibility/client/absolute-position-iframe-expected.txt:
Added.
*
LayoutTests/http/tests/site-isolation/accessibility/client/absolute-position-iframe.html:
Added.
*
LayoutTests/http/tests/site-isolation/accessibility/client/iframe-bounds-expected.txt:
Added.
*
LayoutTests/http/tests/site-isolation/accessibility/client/iframe-bounds.html:
Added.
* LayoutTests/http/tests/site-isolation/resources/frame-with-text.html: Added.
* LayoutTests/platform/mac-wk2/TestExpectations:
* Source/WebCore/accessibility/AXCoreObject.h:
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::scrollViewForFrame):
(WebCore::AXObjectCache::setFrameInheritedState):
(WebCore::AXObjectCache::setFrameGeometry):
(WebCore::AXObjectCache::getAndUpdateFrameGeometry):
* Source/WebCore/accessibility/AXObjectCache.h:
* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::convertFrameToSpace const):
(WebCore::AccessibilityObject::relativeFrame const):
* Source/WebCore/accessibility/AccessibilityObject.h:
* Source/WebCore/accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::accessibilityHitTest const):
* Source/WebCore/accessibility/AccessibilityScrollView.cpp:
(WebCore::AccessibilityScrollView::addLocalFrameChild):
(WebCore::AccessibilityScrollView::addRemoteFrameChild):
(WebCore::AccessibilityScrollView::elementRect const):
(WebCore::AccessibilityScrollView::frameGeometry const):
(WebCore::AccessibilityScrollView::updateHostedFrameInheritedState):
(WebCore::AccessibilityScrollView::frameRootScrollView const):
* Source/WebCore/accessibility/AccessibilityScrollView.h:
* Source/WebCore/accessibility/ios/AccessibilityObjectIOS.mm:
(WebCore::AccessibilityObject::convertRectToPlatformSpace const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::approximateHitTest const):
(WebCore::AXIsolatedObject::frameScreenPosition const):
(WebCore::AXIsolatedObject::frameScreenTransform const):
(WebCore::AXIsolatedObject::convertFrameToSpace const):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::create):
(WebCore::AXIsolatedTree::setFrameGeometry):
(WebCore::AXIsolatedTree::updateRootScreenRelativePosition):
(WebCore::AXIsolatedTree::applyPendingChangesLocked):
(WebCore::createIsolatedObjectData):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:
(WebCore::AXIsolatedTree::frameGeometry const):
* Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
(-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
(createParameterizedAttributeHandlerMap):
* Source/WebCore/page/ChromeClient.h:
(WebCore::ChromeClient::requestFrameScreenPosition const):
* Source/WebCore/rendering/AccessibilityRegionContext.cpp:
(WebCore::AccessibilityRegionContext::takeBoundsInternal):
(WebCore::AccessibilityRegionContext::takeBounds):
(WebCore::AccessibilityRegionContext::onPaint):
* Source/WebKit/Scripts/webkit/messages.py:
(headers_for_type):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::requestFrameScreenPosition):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::requestFrameScreenPosition const):
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updateRemotePageAccessibilityScreenPosition):
(WebKit::WebPage::requestFrameScreenPosition):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
* Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::updateRemotePageAccessibilityOffset):
* Source/WebKit/WebProcess/WebPage/mac/WebPageMac.mm:
(WebKit::WebPage::updateRemotePageAccessibilityOffset):
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
(WTR::findElementByIdRecursive):
(WTR::AccessibilityController::accessibleElementById):
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.h:
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementClientMac.mm:
(WTR::AccessibilityUIElementClientMac::domIdentifier const):
* Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm:
(WTR::attributeValue):
Canonical link: https://commits.webkit.org/308698@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications