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