Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: dff761891a67d0fd7c8b5cffb905044f1be6d018
https://github.com/WebKit/WebKit/commit/dff761891a67d0fd7c8b5cffb905044f1be6d018
Author: Utku Uckun <[email protected]>
Date: 2026-08-05 (Wed, 05 Aug 2026)
Changed paths:
M Source/WebKit/UIProcess/mac/WebViewImpl.mm
Log Message:
-----------
AX: VoiceOver cursor not in sync with mail content breaking Intelligent Image
Descriptions
https://bugs.webkit.org/show_bug.cgi?id=321101
rdar://183950889
Reviewed by Tyler Wilcock.
VoiceOver's reported AXFrame for elements inside a WKWebView could go stale
whenever the view's position on screen changed for a reason other than the
containing window resizing -- e.g. the window moving, or an ancestor
NSScrollView/NSClipView repositioning the view (as Mail does when scrolling
its unified conversation view, which hosts message bodies in WKWebViews with
their own internal scrolling disabled).
The screen-space AXFrame for any element is computed by combining a
live, content-space rect with a cached per-frame AXFrameGeometry (screen
position + scale) via AccessibilityObject::convertFrameToSpace(). That
geometry is not recomputed automatically; it must be explicitly refreshed via
WebPageProxy::updateAccessibilityFrameGeometry(). WebViewImpl only called
this from windowDidMove(), so any other path that changes the view's
window-relative frame -- notably renewGState(), which AppKit calls whenever
a view's on-screen position changes for any reason, including an ancestor
view scrolling -- never refreshed it.
Fix this by moving the refresh into updateWindowAndViewFrames()'s deferred
dispatch block, which is the single chokepoint shared by every caller that
can change the view's window-relative frame (renewGState, windowDidMove,
windowDidResize, viewDidMoveToWindow, and others), rather than patching
individual call sites.
* Source/WebKit/UIProcess/mac/WebViewImpl.mm:
(WebKit::WebViewImpl::updateWindowAndViewFrames):
Canonical link: https://commits.webkit.org/318679@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications