Title: [273288] trunk/Source
Revision
273288
Author
[email protected]
Date
2021-02-22 16:31:56 -0800 (Mon, 22 Feb 2021)

Log Message

Prepare for memory ownership transfer in the GPUProcess
https://bugs.webkit.org/show_bug.cgi?id=222122

Reviewed by Simon Fraser.

Source/WebKit:

Prepare for memory ownership transfer in the GPUProcess:
1. Have the WebProcess create a task identity token and pass it to the GPUProcess
   when connecting to it. The WebProcess' task identity token is then stored on
   the GPUConnectionToWebProcess object.
2. Add the entitlement to the GPUProcess that is needed to transfer memory ownership
   to another process.

This is a first step towards having the GPUProcess transfer memory ownership of its
IOSurfaces and Metal textures to the WebProcesses it is serving.

* GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::GPUConnectionToWebProcess::create):
(WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
* GPUProcess/GPUConnectionToWebProcess.h:
(WebKit::GPUConnectionToWebProcess::webProcessIdentityToken const):
* GPUProcess/GPUProcess.cpp:
(WebKit::GPUProcess::createGPUConnectionToWebProcess):
* GPUProcess/GPUProcess.h:
* GPUProcess/GPUProcess.messages.in:
* Scripts/process-entitlements.sh:
* Shared/GPUProcessConnectionParameters.h: Copied from Source/WTF/wtf/MachSendRight.h.
(WebKit::GPUProcessConnectionParameters::encode const):
(WebKit::GPUProcessConnectionParameters::decode):
* UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::getGPUProcessConnection):
* UIProcess/GPU/GPUProcessProxy.h:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::getGPUProcessConnection):
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::getGPUProcessConnection):
* UIProcess/WebProcessProxy.h:
* UIProcess/WebProcessProxy.messages.in:
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::platformInitializeGPUProcessConnectionParameters):
(WebKit::WebProcess::getGPUProcessConnection):
* WebProcess/WebProcess.h:
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::platformInitializeGPUProcessConnectionParameters):

Source/WTF:

* wtf/PlatformHave.h:
Add feature flag for TASK_IDENTITY_TOKEN as this API was only
introduced very recently.

* wtf/MachSendRight.h:
* wtf/cocoa/MachSendRight.cpp:
(WTF::MachSendRight::MachSendRight):
(WTF::MachSendRight::operator=):
Add a copy constructor to MachSendRight for convenience.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (273287 => 273288)


--- trunk/Source/WTF/ChangeLog	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WTF/ChangeLog	2021-02-23 00:31:56 UTC (rev 273288)
@@ -1,3 +1,20 @@
+2021-02-22  Chris Dumez  <[email protected]>
+
+        Prepare for memory ownership transfer in the GPUProcess
+        https://bugs.webkit.org/show_bug.cgi?id=222122
+
+        Reviewed by Simon Fraser.
+
+        * wtf/PlatformHave.h:
+        Add feature flag for TASK_IDENTITY_TOKEN as this API was only
+        introduced very recently.
+
+        * wtf/MachSendRight.h:
+        * wtf/cocoa/MachSendRight.cpp:
+        (WTF::MachSendRight::MachSendRight):
+        (WTF::MachSendRight::operator=):
+        Add a copy constructor to MachSendRight for convenience.
+
 2021-02-22  Sam Weinig  <[email protected]>
 
         Add experimental support for CSS Color 5 color-mix()

Modified: trunk/Source/WTF/wtf/MachSendRight.h (273287 => 273288)


--- trunk/Source/WTF/wtf/MachSendRight.h	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WTF/wtf/MachSendRight.h	2021-02-23 00:31:56 UTC (rev 273288)
@@ -38,9 +38,11 @@
     WTF_EXPORT_PRIVATE static MachSendRight create(mach_port_t);
 
     MachSendRight() = default;
+    WTF_EXPORT_PRIVATE MachSendRight(const MachSendRight&);
     WTF_EXPORT_PRIVATE MachSendRight(MachSendRight&&);
     WTF_EXPORT_PRIVATE ~MachSendRight();
 
+    WTF_EXPORT_PRIVATE MachSendRight& operator=(const MachSendRight&);
     WTF_EXPORT_PRIVATE MachSendRight& operator=(MachSendRight&&);
 
     explicit operator bool() const { return m_port != MACH_PORT_NULL; }

Modified: trunk/Source/WTF/wtf/PlatformHave.h (273287 => 273288)


--- trunk/Source/WTF/wtf/PlatformHave.h	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WTF/wtf/PlatformHave.h	2021-02-23 00:31:56 UTC (rev 273288)
@@ -301,6 +301,13 @@
 #define HAVE_IOSURFACE_SET_OWNERSHIP 1
 #endif
 
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 110300) \
+    || (((PLATFORM(IOS) && !PLATFORM(IOS_FAMILY_SIMULATOR)) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 140500) \
+    || (PLATFORM(WATCHOS) && !PLATFORM(IOS_FAMILY_SIMULATOR) && __WATCH_OS_VERSION_MAX_ALLOWED >= 70500) \
+    || (PLATFORM(APPLETV) && !PLATFORM(IOS_FAMILY_SIMULATOR) && __TV_OS_VERSION_MAX_ALLOWED >= 140500)
+#define HAVE_TASK_IDENTITY_TOKEN 1
+#endif
+
 #if PLATFORM(MAC)
 #define HAVE_NS_ACTIVITY 1
 #endif

Modified: trunk/Source/WTF/wtf/cocoa/MachSendRight.cpp (273287 => 273288)


--- trunk/Source/WTF/wtf/cocoa/MachSendRight.cpp	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WTF/wtf/cocoa/MachSendRight.cpp	2021-02-23 00:31:56 UTC (rev 273288)
@@ -100,6 +100,12 @@
 {
 }
 
+MachSendRight::MachSendRight(const MachSendRight& other)
+    : m_port(other.m_port)
+{
+    retainSendRight(m_port);
+}
+
 MachSendRight::~MachSendRight()
 {
     releaseSendRight(m_port);
@@ -115,6 +121,16 @@
     return *this;
 }
 
+MachSendRight& MachSendRight::operator=(const MachSendRight& other)
+{
+    if (this != &other) {
+        m_port = other.sendRight();
+        retainSendRight(m_port);
+    }
+
+    return *this;
+}
+
 MachSendRight MachSendRight::copySendRight() const
 {
     return create(m_port);

Modified: trunk/Source/WebKit/ChangeLog (273287 => 273288)


--- trunk/Source/WebKit/ChangeLog	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/ChangeLog	2021-02-23 00:31:56 UTC (rev 273288)
@@ -1,3 +1,51 @@
+2021-02-22  Chris Dumez  <[email protected]>
+
+        Prepare for memory ownership transfer in the GPUProcess
+        https://bugs.webkit.org/show_bug.cgi?id=222122
+
+        Reviewed by Simon Fraser.
+
+        Prepare for memory ownership transfer in the GPUProcess:
+        1. Have the WebProcess create a task identity token and pass it to the GPUProcess
+           when connecting to it. The WebProcess' task identity token is then stored on
+           the GPUConnectionToWebProcess object.
+        2. Add the entitlement to the GPUProcess that is needed to transfer memory ownership
+           to another process.
+
+        This is a first step towards having the GPUProcess transfer memory ownership of its
+        IOSurfaces and Metal textures to the WebProcesses it is serving.
+
+        * GPUProcess/GPUConnectionToWebProcess.cpp:
+        (WebKit::GPUConnectionToWebProcess::create):
+        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
+        * GPUProcess/GPUConnectionToWebProcess.h:
+        (WebKit::GPUConnectionToWebProcess::webProcessIdentityToken const):
+        * GPUProcess/GPUProcess.cpp:
+        (WebKit::GPUProcess::createGPUConnectionToWebProcess):
+        * GPUProcess/GPUProcess.h:
+        * GPUProcess/GPUProcess.messages.in:
+        * Scripts/process-entitlements.sh:
+        * Shared/GPUProcessConnectionParameters.h: Copied from Source/WTF/wtf/MachSendRight.h.
+        (WebKit::GPUProcessConnectionParameters::encode const):
+        (WebKit::GPUProcessConnectionParameters::decode):
+        * UIProcess/GPU/GPUProcessProxy.cpp:
+        (WebKit::GPUProcessProxy::getGPUProcessConnection):
+        * UIProcess/GPU/GPUProcessProxy.h:
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::getGPUProcessConnection):
+        * UIProcess/WebProcessPool.h:
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::getGPUProcessConnection):
+        * UIProcess/WebProcessProxy.h:
+        * UIProcess/WebProcessProxy.messages.in:
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::platformInitializeGPUProcessConnectionParameters):
+        (WebKit::WebProcess::getGPUProcessConnection):
+        * WebProcess/WebProcess.h:
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::platformInitializeGPUProcessConnectionParameters):
+
 2021-02-22  Per Arne Vollan  <[email protected]>
 
         [Cocoa] Send sandbox extensions for Network Extension services in load parameters

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp (273287 => 273288)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp	2021-02-23 00:31:56 UTC (rev 273288)
@@ -32,6 +32,7 @@
 #include "GPUConnectionToWebProcessMessages.h"
 #include "GPUProcess.h"
 #include "GPUProcessConnectionMessages.h"
+#include "GPUProcessConnectionParameters.h"
 #include "GPUProcessMessages.h"
 #include "GPUProcessProxyMessages.h"
 #include "LibWebRTCCodecsProxy.h"
@@ -162,15 +163,18 @@
 };
 #endif
 
-Ref<GPUConnectionToWebProcess> GPUConnectionToWebProcess::create(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID)
+Ref<GPUConnectionToWebProcess> GPUConnectionToWebProcess::create(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters)
 {
-    return adoptRef(*new GPUConnectionToWebProcess(gpuProcess, webProcessIdentifier, connectionIdentifier, sessionID));
+    return adoptRef(*new GPUConnectionToWebProcess(gpuProcess, webProcessIdentifier, connectionIdentifier, sessionID, WTFMove(parameters)));
 }
 
-GPUConnectionToWebProcess::GPUConnectionToWebProcess(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID)
+GPUConnectionToWebProcess::GPUConnectionToWebProcess(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters)
     : m_connection(IPC::Connection::createServerConnection(connectionIdentifier, *this))
     , m_gpuProcess(gpuProcess)
     , m_webProcessIdentifier(webProcessIdentifier)
+#if HAVE(TASK_IDENTITY_TOKEN)
+    , m_webProcessIdentityToken(WTFMove(parameters.webProcessIdentityToken))
+#endif
     , m_remoteMediaPlayerManagerProxy(makeUnique<RemoteMediaPlayerManagerProxy>(*this))
     , m_sessionID(sessionID)
 #if PLATFORM(COCOA) && USE(LIBWEBRTC)

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h (273287 => 273288)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h	2021-02-23 00:31:56 UTC (rev 273288)
@@ -41,6 +41,7 @@
 #include <WebCore/ProcessIdentifier.h>
 #include <pal/SessionID.h>
 #include <wtf/Logger.h>
+#include <wtf/MachSendRight.h>
 #include <wtf/ThreadSafeRefCounted.h>
 
 #if ENABLE(WEBGL)
@@ -70,6 +71,7 @@
 class RemoteGraphicsContextGL;
 class RemoteSampleBufferDisplayLayerManager;
 class UserMediaCaptureManagerProxy;
+struct GPUProcessConnectionParameters;
 struct RemoteAudioSessionConfiguration;
 
 class GPUConnectionToWebProcess
@@ -77,7 +79,7 @@
     , public WebCore::NowPlayingManager::Client
     , IPC::Connection::Client {
 public:
-    static Ref<GPUConnectionToWebProcess> create(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID);
+    static Ref<GPUConnectionToWebProcess> create(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID, GPUProcessConnectionParameters&&);
     virtual ~GPUConnectionToWebProcess();
 
     IPC::Connection& connection() { return m_connection.get(); }
@@ -102,6 +104,10 @@
     bool allowsDisplayCapture() const { return m_allowsDisplayCapture; }
 #endif
 
+#if HAVE(TASK_IDENTITY_TOKEN)
+    task_id_token_t webProcessIdentityToken() const { return static_cast<task_id_token_t>(m_webProcessIdentityToken.sendRight()); }
+#endif
+
 #if ENABLE(ENCRYPTED_MEDIA)
     RemoteCDMFactoryProxy& cdmFactoryProxy();
 #endif
@@ -123,7 +129,7 @@
     void terminateWebProcess();
 
 private:
-    GPUConnectionToWebProcess(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID);
+    GPUConnectionToWebProcess(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID, GPUProcessConnectionParameters&&);
 
 #if ENABLE(WEB_AUDIO)
     RemoteAudioDestinationManager& remoteAudioDestinationManager();
@@ -184,6 +190,9 @@
     IPC::MessageReceiverMap m_messageReceiverMap;
     Ref<GPUProcess> m_gpuProcess;
     const WebCore::ProcessIdentifier m_webProcessIdentifier;
+#if HAVE(TASK_IDENTITY_TOKEN)
+    MachSendRight m_webProcessIdentityToken;
+#endif
 #if ENABLE(WEB_AUDIO)
     std::unique_ptr<RemoteAudioDestinationManager> m_remoteAudioDestinationManager;
 #endif

Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.cpp (273287 => 273288)


--- trunk/Source/WebKit/GPUProcess/GPUProcess.cpp	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.cpp	2021-02-23 00:31:56 UTC (rev 273288)
@@ -33,6 +33,7 @@
 #include "AuxiliaryProcessMessages.h"
 #include "DataReference.h"
 #include "GPUConnectionToWebProcess.h"
+#include "GPUProcessConnectionParameters.h"
 #include "GPUProcessCreationParameters.h"
 #include "GPUProcessSessionParameters.h"
 #include "Logging.h"
@@ -82,7 +83,7 @@
 {
 }
 
-void GPUProcess::createGPUConnectionToWebProcess(ProcessIdentifier identifier, PAL::SessionID sessionID, CompletionHandler<void(Optional<IPC::Attachment>&&)>&& completionHandler)
+void GPUProcess::createGPUConnectionToWebProcess(ProcessIdentifier identifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters, CompletionHandler<void(Optional<IPC::Attachment>&&)>&& completionHandler)
 {
     auto ipcConnection = createIPCConnectionPair();
     if (!ipcConnection) {
@@ -90,7 +91,7 @@
         return;
     }
 
-    auto newConnection = GPUConnectionToWebProcess::create(*this, identifier, ipcConnection->first, sessionID);
+    auto newConnection = GPUConnectionToWebProcess::create(*this, identifier, ipcConnection->first, sessionID, WTFMove(parameters));
 
 #if ENABLE(MEDIA_STREAM)
     // FIXME: We should refactor code to go from WebProcess -> GPUProcess -> UIProcess when getUserMedia is called instead of going from WebProcess -> UIProcess directly.

Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.h (273287 => 273288)


--- trunk/Source/WebKit/GPUProcess/GPUProcess.h	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.h	2021-02-23 00:31:56 UTC (rev 273288)
@@ -43,6 +43,7 @@
 namespace WebKit {
 
 class GPUConnectionToWebProcess;
+struct GPUProcessConnectionParameters;
 struct GPUProcessCreationParameters;
 struct GPUProcessSessionParameters;
 class LayerHostingContext;
@@ -102,7 +103,7 @@
 
     // Message Handlers
     void initializeGPUProcess(GPUProcessCreationParameters&&);
-    void createGPUConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, CompletionHandler<void(Optional<IPC::Attachment>&&)>&&);
+    void createGPUConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, GPUProcessConnectionParameters&&, CompletionHandler<void(Optional<IPC::Attachment>&&)>&&);
     void addSession(PAL::SessionID, GPUProcessSessionParameters&&);
     void removeSession(PAL::SessionID);
 

Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in (273287 => 273288)


--- trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in	2021-02-23 00:31:56 UTC (rev 273288)
@@ -25,7 +25,7 @@
 messages -> GPUProcess {
     InitializeGPUProcess(struct WebKit::GPUProcessCreationParameters processCreationParameters)
 
-    CreateGPUConnectionToWebProcess(WebCore::ProcessIdentifier processIdentifier, PAL::SessionID sessionID) -> (Optional<IPC::Attachment> connectionIdentifier) Async
+    CreateGPUConnectionToWebProcess(WebCore::ProcessIdentifier processIdentifier, PAL::SessionID sessionID, struct WebKit::GPUProcessConnectionParameters parameters) -> (Optional<IPC::Attachment> connectionIdentifier) Async
 
     ProcessDidTransitionToForeground()
     ProcessDidTransitionToBackground()

Modified: trunk/Source/WebKit/Scripts/process-entitlements.sh (273287 => 273288)


--- trunk/Source/WebKit/Scripts/process-entitlements.sh	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/Scripts/process-entitlements.sh	2021-02-23 00:31:56 UTC (rev 273288)
@@ -51,6 +51,7 @@
             plistbuddy Add :com.apple.avfoundation.allow-system-wide-context bool YES
         fi
 
+        plistbuddy Add :com.apple.private.memory.ownership_transfer bool YES
         plistbuddy Add :com.apple.rootless.storage.WebKitGPUSandbox bool YES
         plistbuddy Add :com.apple.QuartzCore.webkit-end-points bool YES
     fi
@@ -170,6 +171,7 @@
     plistbuddy Add :com.apple.security.network.client bool YES
     plistbuddy Add :com.apple.runningboard.assertions.webkit bool YES
     plistbuddy Add :com.apple.QuartzCore.webkit-end-points bool YES
+    plistbuddy Add :com.apple.private.memory.ownership_transfer bool YES
 }
 
 function maccatalyst_process_network_entitlements()
@@ -241,6 +243,7 @@
     plistbuddy Add :com.apple.private.mediaexperience.startrecordinginthebackground.allow bool YES
     plistbuddy Add :com.apple.private.coremedia.pidinheritance.allow bool YES
     plistbuddy Add :com.apple.private.memorystatus bool YES
+    plistbuddy Add :com.apple.private.memory.ownership_transfer bool YES
     plistbuddy Add :com.apple.private.network.socket-delegate bool YES
     plistbuddy Add :com.apple.runningboard.assertions.webkit bool YES
 

Copied: trunk/Source/WebKit/Shared/GPUProcessConnectionParameters.h (from rev 273287, trunk/Source/WTF/wtf/MachSendRight.h) (0 => 273288)


--- trunk/Source/WebKit/Shared/GPUProcessConnectionParameters.h	                        (rev 0)
+++ trunk/Source/WebKit/Shared/GPUProcessConnectionParameters.h	2021-02-23 00:31:56 UTC (rev 273288)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include <wtf/MachSendRight.h>
+
+namespace WebKit {
+
+struct GPUProcessConnectionParameters {
+#if HAVE(TASK_IDENTITY_TOKEN)
+    MachSendRight webProcessIdentityToken;
+#endif
+
+    void encode(IPC::Encoder& encoder) const
+    {
+#if HAVE(TASK_IDENTITY_TOKEN)
+        encoder << webProcessIdentityToken;
+#else
+        UNUSED_PARAM(encoder);
+#endif
+    }
+
+    static Optional<GPUProcessConnectionParameters> decode(IPC::Decoder& decoder)
+    {
+#if HAVE(TASK_IDENTITY_TOKEN)
+        Optional<MachSendRight> webProcessIdentityToken;
+        decoder >> webProcessIdentityToken;
+        if (!webProcessIdentityToken)
+            return WTF::nullopt;
+#else
+        UNUSED_PARAM(decoder);
+#endif
+
+        return GPUProcessConnectionParameters {
+#if HAVE(TASK_IDENTITY_TOKEN)
+            WTFMove(*webProcessIdentityToken),
+#endif
+        };
+    }
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (273287 => 273288)


--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp	2021-02-23 00:31:56 UTC (rev 273288)
@@ -30,6 +30,7 @@
 
 #include "DrawingAreaProxy.h"
 #include "GPUProcessConnectionInfo.h"
+#include "GPUProcessConnectionParameters.h"
 #include "GPUProcessCreationParameters.h"
 #include "GPUProcessMessages.h"
 #include "GPUProcessProxyMessages.h"
@@ -228,7 +229,7 @@
         singleton() = nullptr;
 }
 
-void GPUProcessProxy::getGPUProcessConnection(WebProcessProxy& webProcessProxy, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
+void GPUProcessProxy::getGPUProcessConnection(WebProcessProxy& webProcessProxy, const GPUProcessConnectionParameters& parameters, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
 {
     addSession(webProcessProxy.websiteDataStore());
 #if HAVE(VISIBILITY_PROPAGATION_VIEW)
@@ -239,7 +240,7 @@
 #endif
 
     RELEASE_LOG(ProcessSuspension, "%p - GPUProcessProxy is taking a background assertion because a web process is requesting a connection", this);
-    sendWithAsyncReply(Messages::GPUProcess::CreateGPUConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID() }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply)](auto&& identifier) mutable {
+    sendWithAsyncReply(Messages::GPUProcess::CreateGPUConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID(), parameters }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply)](auto&& identifier) mutable {
         if (!weakThis) {
             RELEASE_LOG_ERROR(Process, "GPUProcessProxy::getGPUProcessConnection: GPUProcessProxy deallocated during connection establishment");
             return reply({ });

Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h (273287 => 273288)


--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h	2021-02-23 00:31:56 UTC (rev 273288)
@@ -49,6 +49,7 @@
 
 class WebProcessProxy;
 class WebsiteDataStore;
+struct GPUProcessConnectionParameters;
 struct GPUProcessCreationParameters;
 
 class GPUProcessProxy final : public AuxiliaryProcessProxy, private ProcessThrottlerClient, public CanMakeWeakPtr<GPUProcessProxy>, public RefCounted<GPUProcessProxy> {
@@ -60,7 +61,7 @@
     static GPUProcessProxy* singletonIfCreated();
     ~GPUProcessProxy();
 
-    void getGPUProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
+    void getGPUProcessConnection(WebProcessProxy&, const GPUProcessConnectionParameters&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
 
     ProcessThrottler& throttler() final { return m_throttler; }
     void updateProcessAssertion();

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (273287 => 273288)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2021-02-23 00:31:56 UTC (rev 273288)
@@ -40,6 +40,7 @@
 #include "DownloadProxy.h"
 #include "DownloadProxyMessages.h"
 #include "GPUProcessConnectionInfo.h"
+#include "GPUProcessConnectionParameters.h"
 #include "GamepadData.h"
 #include "HighPerformanceGraphicsUsageSampler.h"
 #include "LegacyGlobalSettings.h"
@@ -511,12 +512,12 @@
         m_resetGPUProcessCrashCountTimer.startOneShot(resetGPUProcessCrashCountDelay);
 }
 
-void WebProcessPool::getGPUProcessConnection(WebProcessProxy& webProcessProxy, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
+void WebProcessPool::getGPUProcessConnection(WebProcessProxy& webProcessProxy, GPUProcessConnectionParameters&& parameters, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
 {
-    ensureGPUProcess().getGPUProcessConnection(webProcessProxy, [this, weakThis = makeWeakPtr(*this), webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {
+    ensureGPUProcess().getGPUProcessConnection(webProcessProxy, parameters, [this, weakThis = makeWeakPtr(*this), parameters, webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {
         if (UNLIKELY(!IPC::Connection::identifierIsValid(connectionInfo.identifier()) && webProcessProxy && weakThis)) {
             WEBPROCESSPOOL_RELEASE_LOG_ERROR(Process, "getGPUProcessConnection: Failed first attempt, retrying");
-            ensureGPUProcess().getGPUProcessConnection(*webProcessProxy, WTFMove(reply));
+            ensureGPUProcess().getGPUProcessConnection(*webProcessProxy, parameters, WTFMove(reply));
             return;
         }
         reply(connectionInfo);

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (273287 => 273288)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2021-02-23 00:31:56 UTC (rev 273288)
@@ -109,6 +109,7 @@
 class WebPageGroup;
 class WebPageProxy;
 class WebProcessCache;
+struct GPUProcessConnectionParameters;
 struct GPUProcessCreationParameters;
 struct NetworkProcessCreationParameters;
 struct WebProcessCreationParameters;
@@ -358,7 +359,7 @@
 #if ENABLE(GPU_PROCESS)
     void gpuProcessCrashed(ProcessID);
 
-    void getGPUProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
+    void getGPUProcessConnection(WebProcessProxy&, GPUProcessConnectionParameters&&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
 
     GPUProcessProxy& ensureGPUProcess();
     GPUProcessProxy* gpuProcess() const { return m_gpuProcess.get(); }

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (273287 => 273288)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2021-02-23 00:31:56 UTC (rev 273288)
@@ -774,9 +774,9 @@
 }
 
 #if ENABLE(GPU_PROCESS)
-void WebProcessProxy::getGPUProcessConnection(Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
+void WebProcessProxy::getGPUProcessConnection(GPUProcessConnectionParameters&& parameters, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
 {
-    m_processPool->getGPUProcessConnection(*this, WTFMove(reply));
+    m_processPool->getGPUProcessConnection(*this, WTFMove(parameters), WTFMove(reply));
 }
 
 void WebProcessProxy::gpuProcessCrashed()

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (273287 => 273288)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2021-02-23 00:31:56 UTC (rev 273288)
@@ -98,6 +98,7 @@
 class WebsiteDataStore;
 enum class WebsiteDataType : uint32_t;
 struct BackForwardListItemState;
+struct GPUProcessConnectionParameters;
 struct UserMessage;
 struct WebNavigationDataStore;
 struct WebPageCreationParameters;
@@ -463,7 +464,7 @@
     void getNetworkProcessConnection(Messages::WebProcessProxy::GetNetworkProcessConnectionDelayedReply&&);
 
 #if ENABLE(GPU_PROCESS)
-    void getGPUProcessConnection(Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
+    void getGPUProcessConnection(GPUProcessConnectionParameters&&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
 #endif
 
 #if ENABLE(WEB_AUTHN)

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in (273287 => 273288)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in	2021-02-23 00:31:56 UTC (rev 273288)
@@ -39,7 +39,7 @@
     GetNetworkProcessConnection() -> (struct WebKit::NetworkProcessConnectionInfo connectionInfo) Synchronous
 
 #if ENABLE(GPU_PROCESS)
-    GetGPUProcessConnection() -> (struct WebKit::GPUProcessConnectionInfo connectionInfo) Synchronous
+    GetGPUProcessConnection(struct WebKit::GPUProcessConnectionParameters parameters) -> (struct WebKit::GPUProcessConnectionInfo connectionInfo) Synchronous
 #endif
 
 #if ENABLE(WEB_AUTHN)

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (273287 => 273288)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-02-23 00:31:56 UTC (rev 273288)
@@ -426,12 +426,6 @@
 		1CA8B946127C882A00576C2B /* WebInspectorProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CA8B944127C882A00576C2B /* WebInspectorProxyMessages.h */; };
 		1CBBE4A019B66C53006B7D81 /* WebInspectorUIMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CBBE49E19B66C53006B7D81 /* WebInspectorUIMessageReceiver.cpp */; };
 		1CBBE4A119B66C53006B7D81 /* WebInspectorUIMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CBBE49F19B66C53006B7D81 /* WebInspectorUIMessages.h */; };
-		1D47658625CCA416007AF312 /* RemoteImageDecoderAVFProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47658425CCA416007AF312 /* RemoteImageDecoderAVFProxy.h */; };
-		1D47659325CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659025CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessages.h */; };
-		1D47659425CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659125CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessagesReplies.h */; };
-		1D47659C25CE74AD007AF312 /* RemoteImageDecoderAVFManagerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659925CE74AC007AF312 /* RemoteImageDecoderAVFManagerMessages.h */; };
-		1D47659D25CE74AD007AF312 /* RemoteImageDecoderAVFManagerMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659A25CE74AC007AF312 /* RemoteImageDecoderAVFManagerMessagesReplies.h */; };
-		1D4765A125CF5740007AF312 /* RemoteImageDecoderAVFManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659F25CF5740007AF312 /* RemoteImageDecoderAVFManager.h */; };
 		1D4D737023A9E54700717A25 /* RemoteMediaResourceManagerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D4D736B23A9DF5500717A25 /* RemoteMediaResourceManagerMessageReceiver.cpp */; };
 		1D4D737123A9E56200717A25 /* RemoteMediaResourceManagerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D4D736C23A9DF6000717A25 /* RemoteMediaResourceManagerMessages.h */; };
 		1D4D737623A9ED1800717A25 /* RemoteMediaResourceManagerMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D4D737523A9EB6800717A25 /* RemoteMediaResourceManagerMessagesReplies.h */; };
@@ -956,6 +950,7 @@
 		460F488F1F996F7100CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */; };
 		460F48901F996F7100CF4B87 /* WebSWContextManagerConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 460F488E1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessages.h */; };
 		4613A74425D32CCF00A5033A /* WKBlankOverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4613A74225D32CB800A5033A /* WKBlankOverlayView.h */; };
+		4614F13225DED875007006E7 /* GPUProcessConnectionParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 46AC532425DED81E003B57EC /* GPUProcessConnectionParameters.h */; };
 		461CCCA5231485A700B659B9 /* UIRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 463236852314833F00A48FA7 /* UIRemoteObjectRegistry.h */; };
 		461CCCA6231485AA00B659B9 /* WebRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 46323683231481EF00A48FA7 /* WebRemoteObjectRegistry.h */; };
 		463FD4801EB9459600A2982C /* WKProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD47F1EB9458400A2982C /* WKProcessTerminationReason.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3849,6 +3844,7 @@
 		4683569B21E81CC7006E27A3 /* ProvisionalPageProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProvisionalPageProxy.cpp; sourceTree = "<group>"; };
 		46A2B6061E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackgroundProcessResponsivenessTimer.cpp; sourceTree = "<group>"; };
 		46A2B6071E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackgroundProcessResponsivenessTimer.h; sourceTree = "<group>"; };
+		46AC532425DED81E003B57EC /* GPUProcessConnectionParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPUProcessConnectionParameters.h; sourceTree = "<group>"; };
 		46B0524422668D2300265B97 /* WebDeviceOrientationAndMotionAccessController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebDeviceOrientationAndMotionAccessController.h; sourceTree = "<group>"; };
 		46B0524522668D2400265B97 /* WebDeviceOrientationAndMotionAccessController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebDeviceOrientationAndMotionAccessController.cpp; sourceTree = "<group>"; };
 		46BEB6D522FB9BD600269867 /* StorageArea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StorageArea.h; sourceTree = "<group>"; };
@@ -6593,6 +6589,7 @@
 				1A14F8DF1D74C834006CBEC6 /* FrameInfoData.cpp */,
 				1A14F8E01D74C834006CBEC6 /* FrameInfoData.h */,
 				5C121E8324101F7000486F9B /* FrameTreeNodeData.h */,
+				46AC532425DED81E003B57EC /* GPUProcessConnectionParameters.h */,
 				F40BBB40257FF46E0067463A /* GPUProcessWakeupMessageArguments.h */,
 				1AC75A1A1B3368270056745B /* HangDetectionDisabler.h */,
 				BCCF6B2312C93E7A008F9C35 /* ImageOptions.h */,
@@ -11748,6 +11745,7 @@
 				BC06F44A12DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.h in Headers */,
 				BC06F43A12DBCCFB002D78DE /* GeolocationPermissionRequestProxy.h in Headers */,
 				2DA944A41884E4F000ED86DB /* GestureTypes.h in Headers */,
+				4614F13225DED875007006E7 /* GPUProcessConnectionParameters.h in Headers */,
 				F40BBB41257FF46E0067463A /* GPUProcessWakeupMessageArguments.h in Headers */,
 				2DA049B8180CCD0A00AAFA9E /* GraphicsLayerCARemote.h in Headers */,
 				C0CE72AD1247E78D00BC0EC4 /* HandleMessage.h in Headers */,

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (273287 => 273288)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2021-02-23 00:31:56 UTC (rev 273288)
@@ -33,6 +33,7 @@
 #include "AuxiliaryProcessMessages.h"
 #include "DrawingArea.h"
 #include "EventDispatcher.h"
+#include "GPUProcessConnectionParameters.h"
 #include "InjectedBundle.h"
 #include "LibWebRTCNetwork.h"
 #include "Logging.h"
@@ -1142,13 +1143,22 @@
 
 #if ENABLE(GPU_PROCESS)
 
-static GPUProcessConnectionInfo getGPUProcessConnection(IPC::Connection& connection)
+#if !PLATFORM(COCOA)
+void WebProcess::platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters&)
 {
+}
+#endif
+
+GPUProcessConnectionInfo WebProcess::getGPUProcessConnection(IPC::Connection& connection)
+{
+    GPUProcessConnectionParameters parameters;
+    platformInitializeGPUProcessConnectionParameters(parameters);
+
     GPUProcessConnectionInfo connectionInfo;
-    if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0)) {
+    if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(parameters), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0)) {
         // If we failed the first time, retry once. The attachment may have become invalid
         // before it was received by the web process if the network process crashed.
-        if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0))
+        if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(parameters), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0))
             CRASH();
     }
 

Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (273287 => 273288)


--- trunk/Source/WebKit/WebProcess/WebProcess.h	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h	2021-02-23 00:31:56 UTC (rev 273288)
@@ -127,6 +127,8 @@
 class WebLoaderStrategy;
 class WebPage;
 class WebPageGroupProxy;
+struct GPUProcessConnectionInfo;
+struct GPUProcessConnectionParameters;
 struct UserMessage;
 struct WebProcessCreationParameters;
 struct WebProcessDataStoreParameters;
@@ -554,6 +556,11 @@
     void updateFreezerStatus();
 #endif
 
+#if ENABLE(GPU_PROCESS)
+    static GPUProcessConnectionInfo getGPUProcessConnection(IPC::Connection&);
+    static void platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters&);
+#endif
+
 #if ENABLE(VIDEO)
     void suspendAllMediaBuffering();
     void resumeAllMediaBuffering();

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (273287 => 273288)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2021-02-23 00:31:56 UTC (rev 273288)
@@ -26,6 +26,7 @@
 #import "config.h"
 #import "WebProcess.h"
 
+#import "GPUProcessConnectionParameters.h"
 #import "LegacyCustomProtocolManager.h"
 #import "LogInitialization.h"
 #import "Logging.h"
@@ -1216,6 +1217,22 @@
     }
 }
 
+#if ENABLE(GPU_PROCESS)
+void WebProcess::platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters& parameters)
+{
+#if HAVE(TASK_IDENTITY_TOKEN)
+    task_id_token_t identityToken;
+    kern_return_t kr = task_create_identity_token(mach_task_self(), &identityToken);
+    if (kr == KERN_SUCCESS)
+        parameters.webProcessIdentityToken = MachSendRight::adopt(identityToken);
+    else
+        RELEASE_LOG_ERROR(Process, "Call to task_create_identity_token() failed: %{private}s (%x)", mach_error_string(kr), kr);
+#else
+    UNUSED_PARAM(parameters);
+#endif
+}
+#endif
+
 #if PLATFORM(MAC)
 void WebProcess::systemWillPowerOn()
 {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to