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

Reply via email to