Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: c148f97f417f7724d88b029ab049b06c27468dd7
      
https://github.com/WebKit/WebKit/commit/c148f97f417f7724d88b029ab049b06c27468dd7
  Author: Joshua Hoffman <[email protected]>
  Date:   2025-11-20 (Thu, 20 Nov 2025)

  Changed paths:
    A 
LayoutTests/accessibility/ios-simulator/live-regions/live-region-types-expected.txt
    A 
LayoutTests/accessibility/ios-simulator/live-regions/live-region-types.html
    A 
LayoutTests/accessibility/mac/live-regions/live-region-alert-added-expected.txt
    A LayoutTests/accessibility/mac/live-regions/live-region-alert-added.html
    A 
LayoutTests/accessibility/mac/live-regions/live-region-alert-on-initial-load-expected.txt
    A 
LayoutTests/accessibility/mac/live-regions/live-region-alert-on-initial-load.html
    A 
LayoutTests/accessibility/mac/live-regions/live-region-dynamically-added-expected.txt
    A 
LayoutTests/accessibility/mac/live-regions/live-region-dynamically-added.html
    A 
LayoutTests/accessibility/mac/live-regions/live-region-hidden-content-expected.txt
    A LayoutTests/accessibility/mac/live-regions/live-region-hidden-content.html
    A 
LayoutTests/accessibility/mac/live-regions/live-region-removals-expected.txt
    A LayoutTests/accessibility/mac/live-regions/live-region-removals.html
    A LayoutTests/accessibility/mac/live-regions/live-region-types-expected.txt
    A LayoutTests/accessibility/mac/live-regions/live-region-types.html
    A 
LayoutTests/accessibility/mac/live-regions/live-region-with-atomic-expected.txt
    A LayoutTests/accessibility/mac/live-regions/live-region-with-atomic.html
    M LayoutTests/resources/accessibility-helper.js
    M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/accessibility/AXCoreObject.h
    A Source/WebCore/accessibility/AXLiveRegionManager.cpp
    A Source/WebCore/accessibility/AXLiveRegionManager.h
    M Source/WebCore/accessibility/AXObjectCache.cpp
    M Source/WebCore/accessibility/AXObjectCache.h
    M Source/WebCore/accessibility/AXTextMarker.cpp
    M Source/WebCore/accessibility/AXTextMarker.h
    M Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm
    M Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h
    M Source/WebCore/accessibility/mac/AXObjectCacheMac.mm
    M Source/WebCore/accessibility/mac/CocoaAccessibilityConstants.h
    M Source/WebCore/en.lproj/Localizable.strings
    M Source/WebCore/loader/EmptyClients.h
    M Source/WebCore/page/Chrome.cpp
    M Source/WebCore/page/Chrome.h
    M Source/WebCore/page/ChromeClient.h
    M Source/WebCore/platform/LocalizedStrings.cpp
    M Source/WebCore/platform/LocalizedStrings.h
    M Source/WebKit/Scripts/webkit/messages.py
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/UIProcess/PageClient.h
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.messages.in
    M Source/WebKit/UIProcess/ios/PageClientImplIOS.h
    M Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
    M Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
    M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
    M Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
    M Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.h

  Log Message:
  -----------
  AX: Move live region announcements into webkit behind feature flag
https://bugs.webkit.org/show_bug.cgi?id=302716
rdar://164972478

Reviewed by Tyler Wilcock.

This patch consists of the initial implementation of bringing live region 
announcements into
WebKit (guarded behind a runtime flag). In doing so, we can streamline how live 
regions
function across different ATs.

There are a few pieces to this patch:
- AXLiveRegionManager: this encapsulates the logic to compute announcements, 
changes, and
keep track of live regions. Each AXObjectCache has one AXLiveRegionManager, 
which is also
an indicator that the feature flag is enabled. Live regions are stored in the 
manager as
an array of "snapshots", which are used to calculate changes when a live region 
changes.
- AXObjectCache changes: This is where we initialize the manager, and route 
node additions/
removals so that they are registered properly by the manager. The cache is also 
responsible
for posting the announcement notifications, using information computed by the 
manager.
- IPC (relayLiveRegionNotification): On iOS, we need to post notifications from 
the UI
process, rather than the web content process. These new IPC messages forward 
the information
needed to build an announcement notification in the UI process.

When this runtime flag is enabled, AXLiveRegionChanged and AXLiveRegionCreated 
notifications
will no longer be sent.

Several new tests are added to verify this initial behavior.

Tests: accessibility/ios-simulator/live-regions/live-region-types.html
       accessibility/mac/live-regions/live-region-alert-added.html
       accessibility/mac/live-regions/live-region-alert-on-initial-load.html
       accessibility/mac/live-regions/live-region-dynamically-added.html
       accessibility/mac/live-regions/live-region-hidden-content.html
       accessibility/mac/live-regions/live-region-removals.html
       accessibility/mac/live-regions/live-region-types.html
       accessibility/mac/live-regions/live-region-with-atomic.html

* 
LayoutTests/accessibility/ios-simulator/live-regions/live-region-types-expected.txt:
 Added.
* LayoutTests/accessibility/ios-simulator/live-regions/live-region-types.html: 
Added.
* 
LayoutTests/accessibility/mac/live-regions/live-region-alert-added-expected.txt:
 Added.
* LayoutTests/accessibility/mac/live-regions/live-region-alert-added.html: 
Added.
* 
LayoutTests/accessibility/mac/live-regions/live-region-alert-on-initial-load-expected.txt:
 Added.
* 
LayoutTests/accessibility/mac/live-regions/live-region-alert-on-initial-load.html:
 Added.
* 
LayoutTests/accessibility/mac/live-regions/live-region-dynamically-added-expected.txt:
 Added.
* 
LayoutTests/accessibility/mac/live-regions/live-region-dynamically-added.html: 
Added.
* 
LayoutTests/accessibility/mac/live-regions/live-region-hidden-content-expected.txt:
 Added.
* LayoutTests/accessibility/mac/live-regions/live-region-hidden-content.html: 
Added.
* LayoutTests/accessibility/mac/live-regions/live-region-removals-expected.txt: 
Added.
* LayoutTests/accessibility/mac/live-regions/live-region-removals.html: Added.
* LayoutTests/accessibility/mac/live-regions/live-region-types-expected.txt: 
Added.
* LayoutTests/accessibility/mac/live-regions/live-region-types.html: Added.
* 
LayoutTests/accessibility/mac/live-regions/live-region-with-atomic-expected.txt:
 Added.
* LayoutTests/accessibility/mac/live-regions/live-region-with-atomic.html: 
Added.
* LayoutTests/resources/accessibility-helper.js:
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/accessibility/AXCoreObject.h:
* Source/WebCore/accessibility/AXLiveRegionManager.cpp: Added.
(WebCore::AXLiveRegionManager::AXLiveRegionManager):
(WebCore::debugDescriptionForSnapshot):
(WebCore::AXLiveRegionManager::registerLiveRegion):
(WebCore::stringToLiveRegionStatus):
(WebCore::stringToLiveRegionRelevant):
(WebCore::AXLiveRegionManager::handleLiveRegionChange):
(WebCore::AXLiveRegionManager::buildLiveRegionSnapshot const):
(WebCore::AXLiveRegionManager::shouldIncludeInSnapshot const):
(WebCore::AXLiveRegionManager::textForObject const):
(WebCore::AXLiveRegionManager::computeChanges const):
(WebCore::AXLiveRegionManager::computeAnnouncement const):
(WebCore::AXLiveRegionManager::postAnnouncementForChange):
* Source/WebCore/accessibility/AXLiveRegionManager.h: Added.
(WebCore::AXLiveRegionManager::unregisterLiveRegion):
* Source/WebCore/accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::AXObjectCache):
(WebCore::AXObjectCache::remove):
(WebCore::AXObjectCache::handleLiveRegionCreated):
(WebCore::AXObjectCache::initializeLiveRegionManager):
(WebCore::AXObjectCache::postLiveRegionNotification):
(WebCore::AXObjectCache::postLiveRegionChangeNotification):
(WebCore::AXObjectCache::performDeferredCacheUpdate):
* Source/WebCore/accessibility/AXObjectCache.h:
* Source/WebCore/accessibility/AXTextMarker.cpp:
(WebCore::AXTextMarkerRange::toString const):
* Source/WebCore/accessibility/AXTextMarker.h:
* Source/WebCore/accessibility/ios/AXObjectCacheIOS.mm:
(WebCore::AXObjectCache::postPlatformARIANotifyNotification):
(WebCore::AXObjectCache::postPlatformLiveRegionNotification):
* Source/WebCore/accessibility/isolatedtree/AXIsolatedObject.h:
* Source/WebCore/accessibility/mac/AXObjectCacheMac.mm:
(WebCore::AXObjectCache::postPlatformLiveRegionNotification):
(WebCore::AXObjectCache::deferSortForNewLiveRegion):
(WebCore::AXObjectCache::sortedLiveRegions):
(WebCore::AXObjectCache::initializeSortedIDLists):
* Source/WebCore/accessibility/mac/CocoaAccessibilityConstants.h:
* Source/WebCore/en.lproj/Localizable.strings:
* Source/WebCore/loader/EmptyClients.h:
* Source/WebCore/page/Chrome.cpp:
(WebCore::Chrome::relayLiveRegionNotification const):
* Source/WebCore/page/Chrome.h:
* Source/WebCore/page/ChromeClient.h:
* Source/WebCore/platform/LocalizedStrings.cpp:
(WebCore::AXRemovedText):
* Source/WebCore/platform/LocalizedStrings.h:
* Source/WebKit/Scripts/webkit/messages.py:
(headers_for_type):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/PageClient.h:
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/UIProcess/ios/PageClientImplIOS.h:
* Source/WebKit/UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::relayLiveRegionNotification):
* Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::relayLiveRegionNotification):
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:
* Source/WebKit/WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm:
(WebKit::WebChromeClient::relayLiveRegionNotification const):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::relayAriaNotifyNotification):
(WebKit::WebPage::relayLiveRegionNotification):
* Source/WebKitLegacy/ios/WebCoreSupport/WebChromeClientIOS.h:

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



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

Reply via email to