Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: ffe69f5458b13f0741406f8425b0fe4f2da15203
      
https://github.com/WebKit/WebKit/commit/ffe69f5458b13f0741406f8425b0fe4f2da15203
  Author: Tyler Wilcock <[email protected]>
  Date:   2026-05-15 (Fri, 15 May 2026)

  Changed paths:
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp

  Log Message:
  -----------
  AX: VoiceOver bounding boxes are wrong on cross-origin frames when isolated 
tree mode is off
https://bugs.webkit.org/show_bug.cgi?id=314895
rdar://177171633

Reviewed by Dominic Mazzoni.

When a WebPage is initialized in a WebProcess where accessibility was already
enabled process-wide (e.g. via WebProcess::setEnhancedAccessibility before the
WebPage existed), AXObjectCache::gAccessibilityMode has already transitioned
to non-Off. Because that transition fired before WebPage::initialize ran, the
sync callback registered by setSyncModeToOtherProcessesCallback wasn't
installed yet, so the SetAccessibilityMode IPC was never sent to the
UIProcess. The new WebPageProxy's m_accessibilityMode stays at Off, and every
WebPageProxy::requestFrameScreenPosition for that frame early-returns. The
AccessibilityScrollView's frame geometry never gets populated, and
AccessibilityObject::convertFrameToSpace falls back to a default-constructed
AXFrameGeometry with screenPosition=(0,0), producing incorrect screen-relative
positions for every element in the frame.

Fix it by syncing the current process-wide accessibility mode to the
UIProcess WebPageProxy at the end of WebPage::initialize, immediately after
registering the sync callback, when the mode is already non-Off.

This is difficult to capture in a layout test, so no new test is added.
Fix was confirmed manually.

* Source/WebKit/WebProcess/WebPage/WebPage.cpp:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to