Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: d1179a99deab321f7ebeab242bbbaf36a7744c2b
https://github.com/WebKit/WebKit/commit/d1179a99deab321f7ebeab242bbbaf36a7744c2b
Author: Matt Woodrow <[email protected]>
Date: 2026-10-06 (Tue, 06 Oct 2026)
Changed paths:
M Source/WebCore/page/Chrome.cpp
M Source/WebCore/page/Chrome.h
M Source/WebCore/page/ChromeClient.cpp
M Source/WebCore/page/ChromeClient.h
M Source/WebCore/platform/graphics/ImageBuffer.h
M Source/WebCore/platform/graphics/NativeImage.h
M Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
M Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h
M Source/WebKit/GPUProcess/GPUProcess.cpp
M Source/WebKit/GPUProcess/GPUProcess.h
M Source/WebKit/GPUProcess/GPUProcess.messages.in
M Source/WebKit/GPUProcess/graphics/RemoteSnapshot.cpp
M Source/WebKit/GPUProcess/graphics/RemoteSnapshot.h
M Source/WebKit/GPUProcess/graphics/RemoteSnapshotIdentifier.h
M Source/WebKit/Scripts/webkit/opaque_ipc_types.tracking.in
M Source/WebKit/Shared/ProcessQualified.serialization.in
M Source/WebKit/Shared/RemoteLayerTree/LayerProperties.h
M Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTree.serialization.in
M Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm
M Source/WebKit/Shared/WTFArgumentCoders.serialization.in
M Source/WebKit/Sources.txt
M Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp
M Source/WebKit/UIProcess/GPU/GPUProcessProxy.h
M Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h
M Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm
M Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h
M Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/UIProcess/WebProcessProxy.cpp
M Source/WebKit/UIProcess/WebProcessProxy.h
M Source/WebKit/UIProcess/WebProcessProxy.messages.in
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
A Source/WebKit/WebProcess/GPU/graphics/DisplayOnlyImageProxy.cpp
A Source/WebKit/WebProcess/GPU/graphics/DisplayOnlyImageProxy.h
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h
M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h
M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.mm
M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h
M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm
Log Message:
-----------
[Site-isolation] Add display-only NativeImages recorded across processes
https://bugs.webkit.org/show_bug.cgi?id=326296
<rdar://problem/189145600>
Reviewed by Kimmo Kinnunen.
Add Chrome::createDisplayOnlyImage(), which records a rendering in the GPU
process so that frames hosted in other processes can contribute. It returns a
promise that resolves, once every frame has recorded, to a NativeImage that the
web process can display but not read.
The GPU process draws into an IOSurface that it hands to the UI process, which
holds the image. The web process gets a DisplayOnlyImageProxy, a NativeImage
with
no platform image, which releases the image when destroyed.
GraphicsLayerCARemote
sends its identifier as layer contents.
No new tests: nothing calls this yet. A view transitions caller is next.
* Source/WebCore/page/Chrome.cpp:
(WebCore::Chrome::createDisplayOnlyImage):
* Source/WebCore/page/Chrome.h:
* Source/WebCore/page/ChromeClient.cpp:
(WebCore::ChromeClient::createDisplayOnlyImage):
* Source/WebCore/page/ChromeClient.h:
* Source/WebCore/platform/graphics/ImageBuffer.h: Exported surface(), for the
GPU process to send it.
* Source/WebCore/platform/graphics/NativeImage.h:
(WebCore::NativeImage::isDisplayOnly const):
* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::updateContentsImage):
(WebCore::GraphicsLayerCA::setLayerContentsToNativeImage):
* Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h:
* Source/WebKit/GPUProcess/GPUProcess.cpp:
(WebKit::GPUProcess::removeGPUConnectionToWebProcess):
(WebKit::GPUProcess::sinkCompletedSnapshotToIOSurface):
(WebKit::GPUProcess::removeSnapshotsForProcess):
* Source/WebKit/GPUProcess/GPUProcess.h:
* Source/WebKit/GPUProcess/GPUProcess.messages.in:
* Source/WebKit/GPUProcess/graphics/RemoteSnapshot.cpp:
(WebKit::RemoteSnapshot::drawToIOSurface):
* Source/WebKit/GPUProcess/graphics/RemoteSnapshot.h:
* Source/WebKit/GPUProcess/graphics/RemoteSnapshotIdentifier.h: Made process
qualified.
(WebKit::generateRemoteSnapshotIdentifier):
* Source/WebKit/Scripts/webkit/opaque_ipc_types.tracking.in: The rasterized
handle on the new
message is marked NeedsReview.
* Source/WebKit/Shared/ProcessQualified.serialization.in:
* Source/WebKit/Shared/RemoteLayerTree/LayerProperties.h:
* Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTree.serialization.in:
* Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm:
(WebKit::dumpChangedLayers):
* Source/WebKit/Shared/WTFArgumentCoders.serialization.in:
* Source/WebKit/Sources.txt:
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::sinkCompletedSnapshotToIOSurface):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.h:
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h:
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
(WebKit::RemoteLayerTreeDrawingAreaProxy::removeRemotePageDrawingAreaProxy):
(WebKit::RemoteLayerTreeDrawingAreaProxy::remotePageProcessDidTerminate):
(WebKit::RemoteLayerTreeDrawingAreaProxy::startDisplayOnlyImage):
(WebKit::RemoteLayerTreeDrawingAreaProxy::completeDisplayOnlyImage):
(WebKit::RemoteLayerTreeDrawingAreaProxy::releaseDisplayOnlyImage):
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.h:
* Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm:
(WebKit::RemoteLayerTreeHost::updateLayerTree):
(WebKit::RemoteLayerTreeHost::startDisplayOnlyImage):
(WebKit::RemoteLayerTreeHost::completeDisplayOnlyImage):
(WebKit::RemoteLayerTreeHost::releaseDisplayOnlyImage):
(WebKit::RemoteLayerTreeHost::removeDisplayOnlyImagesForProcess):
(WebKit::RemoteLayerTreeHost::applyDisplayOnlyImage):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::completeDisplayOnlyImage):
(WebKit::WebPageProxy::releaseDisplayOnlyImage):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::pageHostedAs):
(WebKit::WebProcessProxy::completeDisplayOnlyImage):
(WebKit::WebProcessProxy::releaseDisplayOnlyImage):
* Source/WebKit/UIProcess/WebProcessProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.messages.in:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/GPU/graphics/DisplayOnlyImageProxy.cpp: Added.
(WebKit::DisplayOnlyImageProxy::create):
(WebKit::DisplayOnlyImageProxy::DisplayOnlyImageProxy):
(WebKit::DisplayOnlyImageProxy::~DisplayOnlyImageProxy):
* Source/WebKit/WebProcess/GPU/graphics/DisplayOnlyImageProxy.h: Added.
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::createDisplayOnlyImage):
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.mm:
(WebKit::GraphicsLayerCARemote::setLayerContentsToNativeImage):
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h:
* Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.mm:
(WebKit::PlatformCALayerRemote::setContents):
(WebKit::PlatformCALayerRemote::setRemoteDelegatedContents):
(WebKit::PlatformCALayerRemote::setDisplayOnlyImage):
Canonical link: https://commits.webkit.org/322898@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications