Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 23a2f28972cb07b98f802ecdb48dcc77e3f35fed
https://github.com/WebKit/WebKit/commit/23a2f28972cb07b98f802ecdb48dcc77e3f35fed
Author: Andy Estes <[email protected]>
Date: 2026-06-03 (Wed, 03 Jun 2026)
Changed paths:
M Source/WebKit/Platform/spi/ios/BaseBoardSPI.h
M Source/WebKit/Platform/spi/ios/RunningBoardServicesSPI.h
M Source/WebKit/SourcesCocoa.txt
M Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.h
M Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.mm
M Source/WebKit/UIProcess/EndowmentStateTracker.h
M Source/WebKit/UIProcess/EndowmentStateTracker.mm
M Source/WebKit/UIProcess/PageClient.h
A Source/WebKit/UIProcess/ios/LayerHostingVisibilityPropagator.h
A Source/WebKit/UIProcess/ios/LayerHostingVisibilityPropagator.mm
M Source/WebKit/UIProcess/ios/PageClientImplIOS.h
M Source/WebKit/UIProcess/ios/PageClientImplIOS.mm
M Source/WebKit/UIProcess/ios/WKContentView.h
M Source/WebKit/UIProcess/ios/WKContentView.mm
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
Log Message:
-----------
[iOS] Propagate visibility during fullscreen video layer hosting
https://bugs.webkit.org/show_bug.cgi?id=316184
rdar://175469152
Reviewed by Jer Noble.
When WebKit's fullscreen video layer is hosted in another process, the UI
process and
auxiliary processes should be considered visible for the duration of the
fullscreen
presentation. The existing mechanism for visibility propagation
(WKVisibilityPropagationView)
relies on the web view being in a visible scene, and while the app hosting the
video layer does
propagate a visibility endowment to the UI process, WKVisibilityPropagationView
does not further
propagate visibility to the auxiliary processes if the web view itself is not
visible.
To address this, introduced LayerHostingVisibilityPropagator. It propagates a
hereditary visibility
endowment grant to each auxiliary process for every visibility endowment
granted to the UI process.
It also takes a MediaPlayback process assertion on the UI process for the
duration of the fullscreen
layer presentation (to account for the lack of a visible scene assertion).
To detect which source environments currently hold the endowment,
EndowmentStateTracker now
requests RBSProcessStateValueEndowmentInfos and walks RBSProcessEndowmentInfo
entries instead of
just namespaces, allowing it to record the source environment per visibility
grant and notify
clients via a new visibilityEndowmentEnvironmentsChanged() callback.
VideoPresentationManagerProxy creates a propagator during fullscreen setup,
attaches it to the
VideoPresentationModel, and removes it during cleanup. WKContentView keeps a
WeakHashSet of active
propagators and updates them alongside the existing
WKVisibilityPropagationViews as auxiliary
processes launch and exit.
* Source/WebKit/Platform/spi/ios/BaseBoardSPI.h:
* Source/WebKit/Platform/spi/ios/RunningBoardServicesSPI.h:
(+[RBSProcessPredicate predicateMatchingHandle:]):
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.h:
* Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.mm:
(WebKit::VideoPresentationModelContext::setLayerHostingVisibilityPropagator):
(WebKit::VideoPresentationManagerProxy::setupFullscreenWithID):
(WebKit::VideoPresentationManagerProxy::didCleanupFullscreen):
* Source/WebKit/UIProcess/EndowmentStateTracker.h:
(WebKit::EndowmentStateTrackerClient::visibilityEndowmentEnvironmentsChanged):
(WebKit::EndowmentStateTracker::visibilityEndowmentEnvironments const):
* Source/WebKit/UIProcess/EndowmentStateTracker.mm:
(WebKit::handleForPID):
(WebKit::EndowmentStateTracker::stateFromProcessState):
(WebKit::EndowmentStateTracker::isApplicationForeground):
(WebKit::EndowmentStateTracker::stateForHandle):
(WebKit::EndowmentStateTracker::registerMonitorIfNecessary):
(WebKit::EndowmentStateTracker::ensureState const const):
(WebKit::EndowmentStateTracker::setState):
(): Deleted.
(WebKit::EndowmentStateTracker::stateFromEndowments): Deleted.
* Source/WebKit/UIProcess/PageClient.h:
(WebKit::PageClient::createLayerHostingVisibilityPropagator):
* Source/WebKit/UIProcess/ios/LayerHostingVisibilityPropagator.h: Added.
* Source/WebKit/UIProcess/ios/LayerHostingVisibilityPropagator.mm: Added.
(WebKit::invalidateInjectors):
(WebKit::LayerHostingVisibilityPropagator::create):
(WebKit::LayerHostingVisibilityPropagator::LayerHostingVisibilityPropagator):
(WebKit::LayerHostingVisibilityPropagator::~LayerHostingVisibilityPropagator):
(WebKit::LayerHostingVisibilityPropagator::propagateVisibilityToProcess):
(WebKit::LayerHostingVisibilityPropagator::stopPropagatingVisibilityToProcess):
(WebKit::LayerHostingVisibilityPropagator::clear):
(WebKit::LayerHostingVisibilityPropagator::visibilityEndowmentEnvironmentsChanged):
(WebKit::LayerHostingVisibilityPropagator::refreshInjectorsAtIndex):
* Source/WebKit/UIProcess/ios/PageClientImplIOS.h:
* Source/WebKit/UIProcess/ios/PageClientImplIOS.mm:
(WebKit::PageClientImpl::createLayerHostingVisibilityPropagator):
* Source/WebKit/UIProcess/ios/WKContentView.h:
* Source/WebKit/UIProcess/ios/WKContentView.mm:
(-[WKContentView _setupVisibilityPropagationForWebProcess:contextID:]):
(-[WKContentView _removeVisibilityPropagationForWebProcess:]):
(-[WKContentView _setupVisibilityPropagationForGPUProcess]):
(-[WKContentView _setupVisibilityPropagationForModelProcess]):
(-[WKContentView _removeVisibilityPropagationViewForGPUProcess]):
(-[WKContentView _removeVisibilityPropagationViewForModelProcess]):
(-[WKContentView _resetVisibilityPropagation]):
(-[WKContentView _createLayerHostingVisibilityPropagator]):
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
Canonical link: https://commits.webkit.org/314516@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications