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

Reply via email to