Title: [273473] trunk/Source/WebKit
Revision
273473
Author
peng.l...@apple.com
Date
2021-02-24 22:45:27 -0800 (Wed, 24 Feb 2021)

Log Message

[GPUP] Use a WeakPtr of GPUConnectionToWebProcess instead of a reference in some media related objects
https://bugs.webkit.org/show_bug.cgi?id=222293

Reviewed by Eric Carlson.

A GPUConnectionToWebProcess object may be destroyed when we close a page, then crash will happen
in callbacks accessing the GPUConnectionToWebProcess object. For example, in
`RemoteSourceBufferProxy::sourceBufferPrivateBufferedRangesChanged()`. This patch
replaces the references to a GPUConnectionToWebProcess with WeakPtr(s) in places where the
issue may happen.

No new tests. Fix some test crashes.

* GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::GPUConnectionToWebProcess::isAlwaysOnLoggingAllowed const):
(WebKit::GPUConnectionToWebProcess::mediaEngineConfigurationFactoryProxy):
* GPUProcess/GPUConnectionToWebProcess.h:
* GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp:
(WebKit::RemoteAudioHardwareListenerProxy::RemoteAudioHardwareListenerProxy):
(WebKit::RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeActive):
(WebKit::RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeInactive):
(WebKit::RemoteAudioHardwareListenerProxy::audioOutputDeviceChanged):
* GPUProcess/media/RemoteAudioHardwareListenerProxy.h:
* GPUProcess/media/RemoteAudioTrackProxy.cpp:
(WebKit::RemoteAudioTrackProxy::RemoteAudioTrackProxy):
(WebKit::RemoteAudioTrackProxy::configurationChanged):
* GPUProcess/media/RemoteAudioTrackProxy.h:
* GPUProcess/media/RemoteCDMFactoryProxy.cpp:
(WebKit::RemoteCDMFactoryProxy::RemoteCDMFactoryProxy):
* GPUProcess/media/RemoteCDMFactoryProxy.h:
* GPUProcess/media/RemoteCDMInstanceProxy.cpp:
(WebKit::RemoteCDMInstanceProxy::unrequestedInitializationDataReceived):
* GPUProcess/media/RemoteCDMInstanceSessionProxy.cpp:
(WebKit::RemoteCDMInstanceSessionProxy::updateKeyStatuses):
(WebKit::RemoteCDMInstanceSessionProxy::sendMessage):
(WebKit::RemoteCDMInstanceSessionProxy::sessionIdChanged):
* GPUProcess/media/RemoteImageDecoderAVFProxy.cpp:
(WebKit::RemoteImageDecoderAVFProxy::RemoteImageDecoderAVFProxy):
(WebKit::RemoteImageDecoderAVFProxy::encodedDataStatusChanged):
* GPUProcess/media/RemoteImageDecoderAVFProxy.h:
* GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp:
(WebKit::RemoteLegacyCDMFactoryProxy::RemoteLegacyCDMFactoryProxy):
(WebKit::RemoteLegacyCDMFactoryProxy::~RemoteLegacyCDMFactoryProxy):
(WebKit::RemoteLegacyCDMFactoryProxy::addProxy):
(WebKit::RemoteLegacyCDMFactoryProxy::removeProxy):
(WebKit::RemoteLegacyCDMFactoryProxy::addSession):
(WebKit::RemoteLegacyCDMFactoryProxy::removeSession):
* GPUProcess/media/RemoteLegacyCDMFactoryProxy.h:
* GPUProcess/media/RemoteLegacyCDMProxy.cpp:
(WebKit::RemoteLegacyCDMProxy::cdmMediaPlayer const):
* GPUProcess/media/RemoteLegacyCDMSessionProxy.cpp:
(WebKit::RemoteLegacyCDMSessionProxy::sendMessage):
(WebKit::RemoteLegacyCDMSessionProxy::sendError):
(WebKit::RemoteLegacyCDMSessionProxy::mediaKeysStorageDirectory const):
* GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.cpp:
(WebKit::RemoteMediaEngineConfigurationFactoryProxy::RemoteMediaEngineConfigurationFactoryProxy):
* GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.h:
* GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
(WebKit::RemoteMediaPlayerManagerProxy::RemoteMediaPlayerManagerProxy):
(WebKit::RemoteMediaPlayerManagerProxy::createMediaPlayer):
(WebKit::RemoteMediaPlayerManagerProxy::logger):
(WebKit::RemoteMediaPlayerManagerProxy::logger const): Deleted.
(WebKit::RemoteMediaPlayerManagerProxy::logChannel const): Deleted.
* GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
(WebKit::RemoteMediaPlayerManagerProxy::gpuConnectionToWebProcess):
(WebKit::RemoteMediaPlayerManagerProxy::gpuConnectionToWebProcess const): Deleted.
(): Deleted.
* GPUProcess/media/RemoteMediaPlayerProxy.cpp:
(WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy):
(WebKit::RemoteMediaPlayerProxy::loadMediaSource):
(WebKit::RemoteMediaPlayerProxy::requestResource):
(WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaKeysStorageDirectory const):
(WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaCacheDirectory const):
(WebKit::RemoteMediaPlayerProxy::addRemoteAudioTrackProxy):
(WebKit::RemoteMediaPlayerProxy::addRemoteVideoTrackProxy):
(WebKit::RemoteMediaPlayerProxy::addRemoteTextTrackProxy):
(WebKit::RemoteMediaPlayerProxy::mediaPlayerCachedKeyForKeyId const):
(WebKit::RemoteMediaPlayerProxy::setLegacyCDMSession):
(WebKit::RemoteMediaPlayerProxy::cdmInstanceAttached):
(WebKit::RemoteMediaPlayerProxy::cdmInstanceDetached):
(WebKit::RemoteMediaPlayerProxy::attemptToDecryptWithInstance):
* GPUProcess/media/RemoteMediaPlayerProxy.h:
* GPUProcess/media/RemoteMediaSourceProxy.cpp:
(WebKit::RemoteMediaSourceProxy::RemoteMediaSourceProxy):
(WebKit::RemoteMediaSourceProxy::~RemoteMediaSourceProxy):
(WebKit::RemoteMediaSourceProxy::seekToTime):
(WebKit::RemoteMediaSourceProxy::addSourceBuffer):
* GPUProcess/media/RemoteMediaSourceProxy.h:
* GPUProcess/media/RemoteRemoteCommandListenerProxy.cpp:
(WebKit::RemoteRemoteCommandListenerProxy::RemoteRemoteCommandListenerProxy):
(WebKit::RemoteRemoteCommandListenerProxy::didReceiveRemoteControlCommand):
* GPUProcess/media/RemoteRemoteCommandListenerProxy.h:
* GPUProcess/media/RemoteSourceBufferProxy.cpp:
(WebKit::RemoteSourceBufferProxy::RemoteSourceBufferProxy):
(WebKit::RemoteSourceBufferProxy::~RemoteSourceBufferProxy):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidReceiveInitializationSegment):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateStreamEndedWithDecodeError):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateAppendError):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateHighestPresentationTimestampChanged):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDurationChanged):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidParseSample):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidDropSample):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateAppendComplete):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidReceiveRenderingError):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateReportExtraMemoryCost):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateBufferedDirtyChanged):
(WebKit::RemoteSourceBufferProxy::sourceBufferPrivateBufferedRangesChanged):
* GPUProcess/media/RemoteSourceBufferProxy.h:
* GPUProcess/media/RemoteTextTrackProxy.cpp:
(WebKit::RemoteTextTrackProxy::RemoteTextTrackProxy):
(WebKit::RemoteTextTrackProxy::configurationChanged):
(WebKit::RemoteTextTrackProxy::addDataCue):
(WebKit::RemoteTextTrackProxy::updateDataCue):
(WebKit::RemoteTextTrackProxy::removeDataCue):
(WebKit::RemoteTextTrackProxy::addGenericCue):
(WebKit::RemoteTextTrackProxy::updateGenericCue):
(WebKit::RemoteTextTrackProxy::removeGenericCue):
(WebKit::RemoteTextTrackProxy::parseWebVTTFileHeader):
(WebKit::RemoteTextTrackProxy::parseWebVTTCueData):
* GPUProcess/media/RemoteTextTrackProxy.h:
* GPUProcess/media/RemoteVideoTrackProxy.cpp:
(WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
(WebKit::RemoteVideoTrackProxy::configurationChanged):
* GPUProcess/media/RemoteVideoTrackProxy.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (273472 => 273473)


--- trunk/Source/WebKit/ChangeLog	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/ChangeLog	2021-02-25 06:45:27 UTC (rev 273473)
@@ -1,3 +1,130 @@
+2021-02-24  Peng Liu  <peng.l...@apple.com>
+
+        [GPUP] Use a WeakPtr of GPUConnectionToWebProcess instead of a reference in some media related objects
+        https://bugs.webkit.org/show_bug.cgi?id=222293
+
+        Reviewed by Eric Carlson.
+
+        A GPUConnectionToWebProcess object may be destroyed when we close a page, then crash will happen
+        in callbacks accessing the GPUConnectionToWebProcess object. For example, in
+        `RemoteSourceBufferProxy::sourceBufferPrivateBufferedRangesChanged()`. This patch
+        replaces the references to a GPUConnectionToWebProcess with WeakPtr(s) in places where the
+        issue may happen.
+
+        No new tests. Fix some test crashes.
+
+        * GPUProcess/GPUConnectionToWebProcess.cpp:
+        (WebKit::GPUConnectionToWebProcess::isAlwaysOnLoggingAllowed const):
+        (WebKit::GPUConnectionToWebProcess::mediaEngineConfigurationFactoryProxy):
+        * GPUProcess/GPUConnectionToWebProcess.h:
+        * GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp:
+        (WebKit::RemoteAudioHardwareListenerProxy::RemoteAudioHardwareListenerProxy):
+        (WebKit::RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeActive):
+        (WebKit::RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeInactive):
+        (WebKit::RemoteAudioHardwareListenerProxy::audioOutputDeviceChanged):
+        * GPUProcess/media/RemoteAudioHardwareListenerProxy.h:
+        * GPUProcess/media/RemoteAudioTrackProxy.cpp:
+        (WebKit::RemoteAudioTrackProxy::RemoteAudioTrackProxy):
+        (WebKit::RemoteAudioTrackProxy::configurationChanged):
+        * GPUProcess/media/RemoteAudioTrackProxy.h:
+        * GPUProcess/media/RemoteCDMFactoryProxy.cpp:
+        (WebKit::RemoteCDMFactoryProxy::RemoteCDMFactoryProxy):
+        * GPUProcess/media/RemoteCDMFactoryProxy.h:
+        * GPUProcess/media/RemoteCDMInstanceProxy.cpp:
+        (WebKit::RemoteCDMInstanceProxy::unrequestedInitializationDataReceived):
+        * GPUProcess/media/RemoteCDMInstanceSessionProxy.cpp:
+        (WebKit::RemoteCDMInstanceSessionProxy::updateKeyStatuses):
+        (WebKit::RemoteCDMInstanceSessionProxy::sendMessage):
+        (WebKit::RemoteCDMInstanceSessionProxy::sessionIdChanged):
+        * GPUProcess/media/RemoteImageDecoderAVFProxy.cpp:
+        (WebKit::RemoteImageDecoderAVFProxy::RemoteImageDecoderAVFProxy):
+        (WebKit::RemoteImageDecoderAVFProxy::encodedDataStatusChanged):
+        * GPUProcess/media/RemoteImageDecoderAVFProxy.h:
+        * GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp:
+        (WebKit::RemoteLegacyCDMFactoryProxy::RemoteLegacyCDMFactoryProxy):
+        (WebKit::RemoteLegacyCDMFactoryProxy::~RemoteLegacyCDMFactoryProxy):
+        (WebKit::RemoteLegacyCDMFactoryProxy::addProxy):
+        (WebKit::RemoteLegacyCDMFactoryProxy::removeProxy):
+        (WebKit::RemoteLegacyCDMFactoryProxy::addSession):
+        (WebKit::RemoteLegacyCDMFactoryProxy::removeSession):
+        * GPUProcess/media/RemoteLegacyCDMFactoryProxy.h:
+        * GPUProcess/media/RemoteLegacyCDMProxy.cpp:
+        (WebKit::RemoteLegacyCDMProxy::cdmMediaPlayer const):
+        * GPUProcess/media/RemoteLegacyCDMSessionProxy.cpp:
+        (WebKit::RemoteLegacyCDMSessionProxy::sendMessage):
+        (WebKit::RemoteLegacyCDMSessionProxy::sendError):
+        (WebKit::RemoteLegacyCDMSessionProxy::mediaKeysStorageDirectory const):
+        * GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.cpp:
+        (WebKit::RemoteMediaEngineConfigurationFactoryProxy::RemoteMediaEngineConfigurationFactoryProxy):
+        * GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.h:
+        * GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp:
+        (WebKit::RemoteMediaPlayerManagerProxy::RemoteMediaPlayerManagerProxy):
+        (WebKit::RemoteMediaPlayerManagerProxy::createMediaPlayer):
+        (WebKit::RemoteMediaPlayerManagerProxy::logger):
+        (WebKit::RemoteMediaPlayerManagerProxy::logger const): Deleted.
+        (WebKit::RemoteMediaPlayerManagerProxy::logChannel const): Deleted.
+        * GPUProcess/media/RemoteMediaPlayerManagerProxy.h:
+        (WebKit::RemoteMediaPlayerManagerProxy::gpuConnectionToWebProcess):
+        (WebKit::RemoteMediaPlayerManagerProxy::gpuConnectionToWebProcess const): Deleted.
+        (): Deleted.
+        * GPUProcess/media/RemoteMediaPlayerProxy.cpp:
+        (WebKit::RemoteMediaPlayerProxy::RemoteMediaPlayerProxy):
+        (WebKit::RemoteMediaPlayerProxy::loadMediaSource):
+        (WebKit::RemoteMediaPlayerProxy::requestResource):
+        (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaKeysStorageDirectory const):
+        (WebKit::RemoteMediaPlayerProxy::mediaPlayerMediaCacheDirectory const):
+        (WebKit::RemoteMediaPlayerProxy::addRemoteAudioTrackProxy):
+        (WebKit::RemoteMediaPlayerProxy::addRemoteVideoTrackProxy):
+        (WebKit::RemoteMediaPlayerProxy::addRemoteTextTrackProxy):
+        (WebKit::RemoteMediaPlayerProxy::mediaPlayerCachedKeyForKeyId const):
+        (WebKit::RemoteMediaPlayerProxy::setLegacyCDMSession):
+        (WebKit::RemoteMediaPlayerProxy::cdmInstanceAttached):
+        (WebKit::RemoteMediaPlayerProxy::cdmInstanceDetached):
+        (WebKit::RemoteMediaPlayerProxy::attemptToDecryptWithInstance):
+        * GPUProcess/media/RemoteMediaPlayerProxy.h:
+        * GPUProcess/media/RemoteMediaSourceProxy.cpp:
+        (WebKit::RemoteMediaSourceProxy::RemoteMediaSourceProxy):
+        (WebKit::RemoteMediaSourceProxy::~RemoteMediaSourceProxy):
+        (WebKit::RemoteMediaSourceProxy::seekToTime):
+        (WebKit::RemoteMediaSourceProxy::addSourceBuffer):
+        * GPUProcess/media/RemoteMediaSourceProxy.h:
+        * GPUProcess/media/RemoteRemoteCommandListenerProxy.cpp:
+        (WebKit::RemoteRemoteCommandListenerProxy::RemoteRemoteCommandListenerProxy):
+        (WebKit::RemoteRemoteCommandListenerProxy::didReceiveRemoteControlCommand):
+        * GPUProcess/media/RemoteRemoteCommandListenerProxy.h:
+        * GPUProcess/media/RemoteSourceBufferProxy.cpp:
+        (WebKit::RemoteSourceBufferProxy::RemoteSourceBufferProxy):
+        (WebKit::RemoteSourceBufferProxy::~RemoteSourceBufferProxy):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidReceiveInitializationSegment):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateStreamEndedWithDecodeError):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateAppendError):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateHighestPresentationTimestampChanged):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDurationChanged):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidParseSample):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidDropSample):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateAppendComplete):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateDidReceiveRenderingError):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateReportExtraMemoryCost):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateBufferedDirtyChanged):
+        (WebKit::RemoteSourceBufferProxy::sourceBufferPrivateBufferedRangesChanged):
+        * GPUProcess/media/RemoteSourceBufferProxy.h:
+        * GPUProcess/media/RemoteTextTrackProxy.cpp:
+        (WebKit::RemoteTextTrackProxy::RemoteTextTrackProxy):
+        (WebKit::RemoteTextTrackProxy::configurationChanged):
+        (WebKit::RemoteTextTrackProxy::addDataCue):
+        (WebKit::RemoteTextTrackProxy::updateDataCue):
+        (WebKit::RemoteTextTrackProxy::removeDataCue):
+        (WebKit::RemoteTextTrackProxy::addGenericCue):
+        (WebKit::RemoteTextTrackProxy::updateGenericCue):
+        (WebKit::RemoteTextTrackProxy::removeGenericCue):
+        (WebKit::RemoteTextTrackProxy::parseWebVTTFileHeader):
+        (WebKit::RemoteTextTrackProxy::parseWebVTTCueData):
+        * GPUProcess/media/RemoteTextTrackProxy.h:
+        * GPUProcess/media/RemoteVideoTrackProxy.cpp:
+        (WebKit::RemoteVideoTrackProxy::RemoteVideoTrackProxy):
+        (WebKit::RemoteVideoTrackProxy::configurationChanged):
+        * GPUProcess/media/RemoteVideoTrackProxy.h:
+
 2021-02-24  BJ Burg  <bb...@apple.com>
 
         [Cocoa] Web Inspector: expose the extension host that is used to load _WKInspectorExtension tabs

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -236,6 +236,11 @@
     return *m_logger;
 }
 
+bool GPUConnectionToWebProcess::isAlwaysOnLoggingAllowed() const
+{
+    return m_sessionID.isAlwaysOnLoggingAllowed();
+}
+
 void GPUConnectionToWebProcess::didReceiveInvalidMessage(IPC::Connection& connection, IPC::MessageName messageName)
 {
     RELEASE_LOG_FAULT(IPC, "Received an invalid message '%" PUBLIC_LOG_STRING "' from WebContent process %" PRIu64 ", requesting for it to be terminated.", description(messageName), m_webProcessIdentifier.toUInt64());
@@ -400,7 +405,7 @@
 RemoteMediaEngineConfigurationFactoryProxy& GPUConnectionToWebProcess::mediaEngineConfigurationFactoryProxy()
 {
     if (!m_mediaEngineConfigurationFactoryProxy)
-        m_mediaEngineConfigurationFactoryProxy = makeUnique<RemoteMediaEngineConfigurationFactoryProxy>(*this);
+        m_mediaEngineConfigurationFactoryProxy = makeUnique<RemoteMediaEngineConfigurationFactoryProxy>();
     return *m_mediaEngineConfigurationFactoryProxy;
 }
 #endif

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -35,7 +35,6 @@
 #include "RemoteRemoteCommandListenerIdentifier.h"
 #include "RenderingBackendIdentifier.h"
 #include "ScopedActiveMessageReceiveQueue.h"
-
 #include <WebCore/LibWebRTCEnumTraits.h>
 #include <WebCore/NowPlayingManager.h>
 #include <WebCore/ProcessIdentifier.h>
@@ -90,6 +89,7 @@
     RemoteMediaResourceManager& remoteMediaResourceManager();
 
     Logger& logger();
+    bool isAlwaysOnLoggingAllowed() const;
 
     const String& mediaCacheDirectory() const;
 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -34,7 +34,7 @@
 namespace WebKit {
 
 RemoteAudioHardwareListenerProxy::RemoteAudioHardwareListenerProxy(GPUConnectionToWebProcess& gpuConnection, RemoteAudioHardwareListenerIdentifier&& identifier)
-    : m_gpuConnection(gpuConnection)
+    : m_gpuConnection(makeWeakPtr(gpuConnection))
     , m_identifier(WTFMove(identifier))
     , m_listener(WebCore::AudioHardwareListener::create(*this))
 {
@@ -44,18 +44,27 @@
 
 void RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeActive()
 {
-    m_gpuConnection.connection().send(Messages::RemoteAudioHardwareListener::AudioHardwareDidBecomeActive(), m_identifier);
+    if (!m_gpuConnection)
+        return;
+
+    m_gpuConnection->connection().send(Messages::RemoteAudioHardwareListener::AudioHardwareDidBecomeActive(), m_identifier);
 }
 
 void RemoteAudioHardwareListenerProxy::audioHardwareDidBecomeInactive()
 {
-    m_gpuConnection.connection().send(Messages::RemoteAudioHardwareListener::AudioHardwareDidBecomeInactive(), m_identifier);
+    if (!m_gpuConnection)
+        return;
+
+    m_gpuConnection->connection().send(Messages::RemoteAudioHardwareListener::AudioHardwareDidBecomeInactive(), m_identifier);
 }
 
 void RemoteAudioHardwareListenerProxy::audioOutputDeviceChanged()
 {
+    if (!m_gpuConnection)
+        return;
+
     auto supportedBufferSizes = m_listener->supportedBufferSizes();
-    m_gpuConnection.connection().send(Messages::RemoteAudioHardwareListener::AudioOutputDeviceChanged(supportedBufferSizes.minimum, supportedBufferSizes.maximum), m_identifier);
+    m_gpuConnection->connection().send(Messages::RemoteAudioHardwareListener::AudioOutputDeviceChanged(supportedBufferSizes.minimum, supportedBufferSizes.maximum), m_identifier);
 }
 
 }

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteAudioHardwareListenerProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -31,6 +31,7 @@
 #include "RemoteAudioHardwareListenerIdentifier.h"
 #include <WebCore/AudioHardwareListener.h>
 #include <wtf/UniqueRef.h>
+#include <wtf/WeakPtr.h>
 
 namespace IPC {
 class Connection;
@@ -52,7 +53,7 @@
     void audioHardwareDidBecomeInactive() final;
     void audioOutputDeviceChanged() final;
 
-    GPUConnectionToWebProcess& m_gpuConnection;
+    WeakPtr<GPUConnectionToWebProcess> m_gpuConnection;
     RemoteAudioHardwareListenerIdentifier m_identifier;
     Ref<WebCore::AudioHardwareListener> m_listener;
 };

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -40,13 +40,13 @@
 using namespace WebCore;
 
 RemoteAudioTrackProxy::RemoteAudioTrackProxy(GPUConnectionToWebProcess& connectionToWebProcess, TrackPrivateRemoteIdentifier identifier, AudioTrackPrivate& trackPrivate, MediaPlayerIdentifier mediaPlayerIdentifier)
-    : m_connectionToWebProcess(connectionToWebProcess)
+    : m_connectionToWebProcess(makeWeakPtr(connectionToWebProcess))
     , m_identifier(identifier)
     , m_trackPrivate(trackPrivate)
     , m_mediaPlayerIdentifier(mediaPlayerIdentifier)
 {
     m_trackPrivate->setClient(this);
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::AddRemoteAudioTrack(m_identifier, configuration()), m_mediaPlayerIdentifier);
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::AddRemoteAudioTrack(m_identifier, configuration()), m_mediaPlayerIdentifier);
 }
 
 RemoteAudioTrackProxy::~RemoteAudioTrackProxy()
@@ -70,7 +70,10 @@
 
 void RemoteAudioTrackProxy::configurationChanged()
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::RemoteAudioTrackConfigurationChanged(m_identifier, configuration()), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::RemoteAudioTrackConfigurationChanged(m_identifier, configuration()), m_mediaPlayerIdentifier);
 }
 
 void RemoteAudioTrackProxy::willRemove()

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -34,6 +34,7 @@
 #include <WebCore/MediaPlayerIdentifier.h>
 #include <WebCore/TrackBase.h>
 #include <wtf/Ref.h>
+#include <wtf/WeakPtr.h>
 
 namespace IPC {
 class Connection;
@@ -74,7 +75,7 @@
     TrackPrivateRemoteConfiguration& configuration();
     void configurationChanged();
 
-    GPUConnectionToWebProcess& m_connectionToWebProcess;
+    WeakPtr<GPUConnectionToWebProcess> m_connectionToWebProcess;
     TrackPrivateRemoteIdentifier m_identifier;
     Ref<WebCore::AudioTrackPrivate> m_trackPrivate;
     WebCore::MediaPlayerIdentifier m_mediaPlayerIdentifier;

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteCDMFactoryProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteCDMFactoryProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteCDMFactoryProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -40,7 +40,7 @@
 using namespace WebCore;
 
 RemoteCDMFactoryProxy::RemoteCDMFactoryProxy(GPUConnectionToWebProcess& connection)
-    : m_gpuConnectionToWebProcess(connection)
+    : m_gpuConnectionToWebProcess(makeWeakPtr(connection))
 {
 }
 

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteCDMFactoryProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteCDMFactoryProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteCDMFactoryProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -28,6 +28,7 @@
 #if ENABLE(GPU_PROCESS) && ENABLE(ENCRYPTED_MEDIA)
 
 #include "Connection.h"
+#include "GPUConnectionToWebProcess.h"
 #include "MessageReceiver.h"
 #include "RemoteCDMIdentifier.h"
 #include "RemoteCDMInstanceIdentifier.h"
@@ -37,7 +38,6 @@
 
 namespace WebKit {
 
-class GPUConnectionToWebProcess;
 class RemoteCDMInstanceProxy;
 class RemoteCDMInstanceSessionProxy;
 class RemoteCDMProxy;
@@ -68,7 +68,7 @@
     void addSession(const RemoteCDMInstanceSessionIdentifier&, std::unique_ptr<RemoteCDMInstanceSessionProxy>&&);
     void removeSession(const RemoteCDMInstanceSessionIdentifier&);
 
-    GPUConnectionToWebProcess& gpuConnectionToWebProcess() const { return m_gpuConnectionToWebProcess; }
+    GPUConnectionToWebProcess* gpuConnectionToWebProcess() { return m_gpuConnectionToWebProcess.get(); }
 
 private:
     friend class GPUProcessConnection;
@@ -80,7 +80,7 @@
     void createCDM(const String& keySystem, CompletionHandler<void(RemoteCDMIdentifier&&, RemoteCDMConfiguration&&)>&&);
     void supportsKeySystem(const String& keySystem, CompletionHandler<void(bool)>&&);
 
-    GPUConnectionToWebProcess& m_gpuConnectionToWebProcess;
+    WeakPtr<GPUConnectionToWebProcess> m_gpuConnectionToWebProcess;
     HashMap<RemoteCDMIdentifier, std::unique_ptr<RemoteCDMProxy>> m_proxies;
     HashMap<RemoteCDMInstanceIdentifier, std::unique_ptr<RemoteCDMInstanceProxy>> m_instances;
     HashMap<RemoteCDMInstanceSessionIdentifier, std::unique_ptr<RemoteCDMInstanceSessionProxy>> m_sessions;

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteCDMInstanceProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteCDMInstanceProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteCDMInstanceProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -66,8 +66,15 @@
     if (!m_cdm)
         return;
 
-    if (auto* factory = m_cdm->factory())
-        factory->gpuConnectionToWebProcess().connection().send(Messages::RemoteCDMInstance::UnrequestedInitializationDataReceived(type, WTFMove(initData)), m_identifier);
+    auto* factory = m_cdm->factory();
+    if (!factory)
+        return;
+
+    auto* gpuConnectionToWebProcess = factory->gpuConnectionToWebProcess();
+    if (!gpuConnectionToWebProcess)
+        return;
+
+    gpuConnectionToWebProcess->connection().send(Messages::RemoteCDMInstance::UnrequestedInitializationDataReceived(type, WTFMove(initData)), m_identifier);
 }
 
 void RemoteCDMInstanceProxy::initializeWithConfiguration(const WebCore::CDMKeySystemConfiguration& configuration, AllowDistinctiveIdentifiers allowDistinctiveIdentifiers, AllowPersistentState allowPersistentState, CompletionHandler<void(SuccessValue)>&& completion)

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteCDMInstanceSessionProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteCDMInstanceSessionProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteCDMInstanceSessionProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -138,8 +138,15 @@
     if (!m_cdm)
         return;
 
-    if (auto* factory = m_cdm->factory())
-        factory->gpuConnectionToWebProcess().connection().send(Messages::RemoteCDMInstanceSession::UpdateKeyStatuses(WTFMove(keyStatuses)), m_identifier);
+    auto* factory = m_cdm->factory();
+    if (!factory)
+        return;
+
+    auto* gpuConnectionToWebProcess = factory->gpuConnectionToWebProcess();
+    if (!gpuConnectionToWebProcess)
+        return;
+
+    gpuConnectionToWebProcess->connection().send(Messages::RemoteCDMInstanceSession::UpdateKeyStatuses(WTFMove(keyStatuses)), m_identifier);
 }
 
 void RemoteCDMInstanceSessionProxy::sendMessage(CDMMessageType type, Ref<SharedBuffer>&& message)
@@ -146,9 +153,15 @@
 {
     if (!m_cdm)
         return;
+    auto* factory = m_cdm->factory();
+    if (!factory)
+        return;
 
-    if (auto* factory = m_cdm->factory())
-        factory->gpuConnectionToWebProcess().connection().send(Messages::RemoteCDMInstanceSession::SendMessage(type, WTFMove(message)), m_identifier);
+    auto* gpuConnectionToWebProcess = factory->gpuConnectionToWebProcess();
+    if (!gpuConnectionToWebProcess)
+        return;
+
+    gpuConnectionToWebProcess->connection().send(Messages::RemoteCDMInstanceSession::SendMessage(type, WTFMove(message)), m_identifier);
 }
 
 void RemoteCDMInstanceSessionProxy::sessionIdChanged(const String& sessionId)
@@ -156,8 +169,15 @@
     if (!m_cdm)
         return;
 
-    if (auto* factory = m_cdm->factory())
-        factory->gpuConnectionToWebProcess().connection().send(Messages::RemoteCDMInstanceSession::SessionIdChanged(sessionId), m_identifier);
+    auto* factory = m_cdm->factory();
+    if (!factory)
+        return;
+
+    auto* gpuConnectionToWebProcess = factory->gpuConnectionToWebProcess();
+    if (!gpuConnectionToWebProcess)
+        return;
+
+    gpuConnectionToWebProcess->connection().send(Messages::RemoteCDMInstanceSession::SessionIdChanged(sessionId), m_identifier);
 }
 
 }

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteImageDecoderAVFProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteImageDecoderAVFProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteImageDecoderAVFProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -40,7 +40,7 @@
 using namespace WebCore;
 
 RemoteImageDecoderAVFProxy::RemoteImageDecoderAVFProxy(GPUConnectionToWebProcess& connectionToWebProcess)
-    : m_connectionToWebProcess(connectionToWebProcess)
+    : m_connectionToWebProcess(makeWeakPtr(connectionToWebProcess))
 {
 }
 
@@ -74,11 +74,11 @@
 
 void RemoteImageDecoderAVFProxy::encodedDataStatusChanged(const ImageDecoderIdentifier& identifier)
 {
-    if (!m_imageDecoders.contains(identifier))
+    if (!m_connectionToWebProcess || !m_imageDecoders.contains(identifier))
         return;
 
     auto imageDecoder = m_imageDecoders.get(identifier);
-    m_connectionToWebProcess.connection().send(Messages::RemoteImageDecoderAVFManager::EncodedDataStatusChanged(identifier, imageDecoder->frameCount(), imageDecoder->size(), imageDecoder->hasTrack()), 0);
+    m_connectionToWebProcess->connection().send(Messages::RemoteImageDecoderAVFManager::EncodedDataStatusChanged(identifier, imageDecoder->frameCount(), imageDecoder->size(), imageDecoder->hasTrack()), 0);
 }
 
 void RemoteImageDecoderAVFProxy::setExpectedContentSize(const ImageDecoderIdentifier& identifier, long long expectedContentSize)

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteImageDecoderAVFProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteImageDecoderAVFProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteImageDecoderAVFProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -34,6 +34,7 @@
 #include <wtf/CompletionHandler.h>
 #include <wtf/HashMap.h>
 #include <wtf/MachSendRight.h>
+#include <wtf/WeakPtr.h>
 
 namespace WebKit {
 class GPUConnectionToWebProcess;
@@ -57,7 +58,7 @@
 
     void encodedDataStatusChanged(const WebCore::ImageDecoderIdentifier&);
 
-    GPUConnectionToWebProcess& m_connectionToWebProcess;
+    WeakPtr<GPUConnectionToWebProcess> m_connectionToWebProcess;
     HashMap<WebCore::ImageDecoderIdentifier, RefPtr<WebCore::ImageDecoderAVFObjC>> m_imageDecoders;
 };
 

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMFactoryProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -41,17 +41,20 @@
 using namespace WebCore;
 
 RemoteLegacyCDMFactoryProxy::RemoteLegacyCDMFactoryProxy(GPUConnectionToWebProcess& connection)
-    : m_gpuConnectionToWebProcess(connection)
+    : m_gpuConnectionToWebProcess(makeWeakPtr(connection))
 {
 }
 
 RemoteLegacyCDMFactoryProxy::~RemoteLegacyCDMFactoryProxy()
 {
+    if (!m_gpuConnectionToWebProcess)
+        return;
+
     for (auto const& session : m_sessions)
-        gpuConnectionToWebProcess().messageReceiverMap().removeMessageReceiver(Messages::RemoteLegacyCDMSessionProxy::messageReceiverName(), session.key.toUInt64());
+        m_gpuConnectionToWebProcess->messageReceiverMap().removeMessageReceiver(Messages::RemoteLegacyCDMSessionProxy::messageReceiverName(), session.key.toUInt64());
 
     for (auto const& proxy : m_proxies)
-        gpuConnectionToWebProcess().messageReceiverMap().removeMessageReceiver(Messages::RemoteLegacyCDMProxy::messageReceiverName(), proxy.key.toUInt64());
+        m_gpuConnectionToWebProcess->messageReceiverMap().removeMessageReceiver(Messages::RemoteLegacyCDMProxy::messageReceiverName(), proxy.key.toUInt64());
 }
 
 void RemoteLegacyCDMFactoryProxy::createCDM(const String& keySystem, Optional<MediaPlayerIdentifier>&& optionalPlayerId, CompletionHandler<void(RemoteLegacyCDMIdentifier&&)>&& completion)
@@ -106,8 +109,11 @@
 
 void RemoteLegacyCDMFactoryProxy::addProxy(RemoteLegacyCDMIdentifier identifier, std::unique_ptr<RemoteLegacyCDMProxy>&& proxy)
 {
-    gpuConnectionToWebProcess().messageReceiverMap().addMessageReceiver(Messages::RemoteLegacyCDMProxy::messageReceiverName(), identifier.toUInt64(), *proxy);
+    if (!m_gpuConnectionToWebProcess)
+        return;
 
+    m_gpuConnectionToWebProcess->messageReceiverMap().addMessageReceiver(Messages::RemoteLegacyCDMProxy::messageReceiverName(), identifier.toUInt64(), *proxy);
+
     ASSERT(!m_proxies.contains(identifier));
     m_proxies.set(identifier, WTFMove(proxy));
 }
@@ -114,8 +120,11 @@
 
 void RemoteLegacyCDMFactoryProxy::removeProxy(RemoteLegacyCDMIdentifier identifier)
 {
-    gpuConnectionToWebProcess().messageReceiverMap().removeMessageReceiver(Messages::RemoteLegacyCDMProxy::messageReceiverName(), identifier.toUInt64());
+    if (!m_gpuConnectionToWebProcess)
+        return;
 
+    m_gpuConnectionToWebProcess->messageReceiverMap().removeMessageReceiver(Messages::RemoteLegacyCDMProxy::messageReceiverName(), identifier.toUInt64());
+
     ASSERT(m_proxies.contains(identifier));
     m_proxies.remove(identifier);
 }
@@ -122,8 +131,11 @@
 
 void RemoteLegacyCDMFactoryProxy::addSession(RemoteLegacyCDMSessionIdentifier identifier, std::unique_ptr<RemoteLegacyCDMSessionProxy>&& session)
 {
-    gpuConnectionToWebProcess().messageReceiverMap().addMessageReceiver(Messages::RemoteLegacyCDMSessionProxy::messageReceiverName(), identifier.toUInt64(), *session);
+    if (!m_gpuConnectionToWebProcess)
+        return;
 
+    m_gpuConnectionToWebProcess->messageReceiverMap().addMessageReceiver(Messages::RemoteLegacyCDMSessionProxy::messageReceiverName(), identifier.toUInt64(), *session);
+
     ASSERT(!m_sessions.contains(identifier));
     m_sessions.set(identifier, WTFMove(session));
 }
@@ -130,8 +142,11 @@
 
 void RemoteLegacyCDMFactoryProxy::removeSession(RemoteLegacyCDMSessionIdentifier identifier)
 {
-    gpuConnectionToWebProcess().messageReceiverMap().removeMessageReceiver(Messages::RemoteLegacyCDMSessionProxy::messageReceiverName(), identifier.toUInt64());
+    if (!m_gpuConnectionToWebProcess)
+        return;
 
+    m_gpuConnectionToWebProcess->messageReceiverMap().removeMessageReceiver(Messages::RemoteLegacyCDMSessionProxy::messageReceiverName(), identifier.toUInt64());
+
     ASSERT(m_sessions.contains(identifier));
     m_sessions.remove(identifier);
 }

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMFactoryProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMFactoryProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMFactoryProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -28,6 +28,7 @@
 #if ENABLE(GPU_PROCESS) && ENABLE(LEGACY_ENCRYPTED_MEDIA)
 
 #include "Connection.h"
+#include "GPUConnectionToWebProcess.h"
 #include "MessageReceiver.h"
 #include "RemoteLegacyCDMIdentifier.h"
 #include "RemoteLegacyCDMSessionIdentifier.h"
@@ -37,7 +38,6 @@
 
 namespace WebKit {
 
-class GPUConnectionToWebProcess;
 class RemoteLegacyCDMSessionProxy;
 class RemoteLegacyCDMProxy;
 struct RemoteLegacyCDMConfiguration;
@@ -62,7 +62,7 @@
     void removeSession(RemoteLegacyCDMSessionIdentifier);
     RemoteLegacyCDMSessionProxy* getSession(const RemoteLegacyCDMSessionIdentifier&) const;
 
-    GPUConnectionToWebProcess& gpuConnectionToWebProcess() const { return m_gpuConnectionToWebProcess; }
+    GPUConnectionToWebProcess* gpuConnectionToWebProcess() { return m_gpuConnectionToWebProcess.get(); }
 
 private:
     friend class GPUProcessConnection;
@@ -74,7 +74,7 @@
     void createCDM(const String& keySystem, Optional<WebCore::MediaPlayerIdentifier>&&, CompletionHandler<void(RemoteLegacyCDMIdentifier&&)>&&);
     void supportsKeySystem(const String& keySystem, Optional<String> mimeType, CompletionHandler<void(bool)>&&);
 
-    GPUConnectionToWebProcess& m_gpuConnectionToWebProcess;
+    WeakPtr<GPUConnectionToWebProcess> m_gpuConnectionToWebProcess;
     HashMap<RemoteLegacyCDMIdentifier, std::unique_ptr<RemoteLegacyCDMProxy>> m_proxies;
     HashMap<RemoteLegacyCDMSessionIdentifier, std::unique_ptr<RemoteLegacyCDMSessionProxy>> m_sessions;
 };

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -28,7 +28,6 @@
 
 #if ENABLE(GPU_PROCESS) && ENABLE(LEGACY_ENCRYPTED_MEDIA)
 
-#include "GPUConnectionToWebProcess.h"
 #include "RemoteLegacyCDMSessionProxy.h"
 #include "RemoteMediaPlayerManagerProxy.h"
 #include "RemoteMediaPlayerProxy.h"
@@ -87,7 +86,11 @@
     if (!m_playerId || !m_factory)
         return nullptr;
 
-    return m_factory->gpuConnectionToWebProcess().remoteMediaPlayerManagerProxy().mediaPlayer(m_playerId);
+    auto* gpuConnectionToWebProcess = m_factory->gpuConnectionToWebProcess();
+    if (!gpuConnectionToWebProcess)
+        return nullptr;
+
+    return gpuConnectionToWebProcess->remoteMediaPlayerManagerProxy().mediaPlayer(m_playerId);
 }
 
 }

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMSessionProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMSessionProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteLegacyCDMSessionProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -128,23 +128,37 @@
     if (!m_factory)
         return;
 
-    m_factory->gpuConnectionToWebProcess().connection().send(Messages::RemoteLegacyCDMSession::SendMessage(convertToOptionalDataReference(message), destinationURL), m_identifier);
+    auto* gpuConnectionToWebProcess = m_factory->gpuConnectionToWebProcess();
+    if (!gpuConnectionToWebProcess)
+        return;
+
+    gpuConnectionToWebProcess->connection().send(Messages::RemoteLegacyCDMSession::SendMessage(convertToOptionalDataReference(message), destinationURL), m_identifier);
 }
 
 void RemoteLegacyCDMSessionProxy::sendError(MediaKeyErrorCode errorCode, uint32_t systemCode)
 {
-    if (m_factory)
-        m_factory->gpuConnectionToWebProcess().connection().send(Messages::RemoteLegacyCDMSession::SendError(errorCode, systemCode), m_identifier);
+    if (!m_factory)
+        return;
+
+    auto* gpuConnectionToWebProcess = m_factory->gpuConnectionToWebProcess();
+    if (!gpuConnectionToWebProcess)
+        return;
+
+    gpuConnectionToWebProcess->connection().send(Messages::RemoteLegacyCDMSession::SendError(errorCode, systemCode), m_identifier);
 }
 
 String RemoteLegacyCDMSessionProxy::mediaKeysStorageDirectory() const
 {
-    if (m_factory)
-        return m_factory->gpuConnectionToWebProcess().mediaKeysStorageDirectory();
-    return emptyString();
-}
+    if (!m_factory)
+        return emptyString();
 
+    auto* gpuConnectionToWebProcess = m_factory->gpuConnectionToWebProcess();
+    if (!gpuConnectionToWebProcess)
+        return emptyString();
 
+    return gpuConnectionToWebProcess->mediaKeysStorageDirectory();
 }
 
+}
+
 #endif

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -39,8 +39,7 @@
 
 using namespace WebCore;
 
-RemoteMediaEngineConfigurationFactoryProxy::RemoteMediaEngineConfigurationFactoryProxy(GPUConnectionToWebProcess& connection)
-    : m_gpuConnectionToWebProcess(connection)
+RemoteMediaEngineConfigurationFactoryProxy::RemoteMediaEngineConfigurationFactoryProxy()
 {
 }
 

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaEngineConfigurationFactoryProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -35,18 +35,14 @@
 
 namespace WebKit {
 
-class GPUConnectionToWebProcess;
-
 class RemoteMediaEngineConfigurationFactoryProxy final : private IPC::MessageReceiver, public CanMakeWeakPtr<RemoteMediaEngineConfigurationFactoryProxy> {
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    RemoteMediaEngineConfigurationFactoryProxy(GPUConnectionToWebProcess&);
+    RemoteMediaEngineConfigurationFactoryProxy();
     virtual ~RemoteMediaEngineConfigurationFactoryProxy();
 
     void didReceiveMessageFromWebProcess(IPC::Connection& connection, IPC::Decoder& decoder) { didReceiveMessage(connection, decoder); }
 
-    GPUConnectionToWebProcess& gpuConnectionToWebProcess() const { return m_gpuConnectionToWebProcess; }
-
 private:
     friend class GPUProcessConnection;
     // IPC::MessageReceiver
@@ -55,8 +51,6 @@
     // Messages
     void createDecodingConfiguration(WebCore::MediaDecodingConfiguration&&, CompletionHandler<void(WebCore::MediaCapabilitiesDecodingInfo&&)>&&);
     void createEncodingConfiguration(WebCore::MediaEncodingConfiguration&&, CompletionHandler<void(WebCore::MediaCapabilitiesEncodingInfo&&)>&&);
-
-    GPUConnectionToWebProcess& m_gpuConnectionToWebProcess;
 };
 
 }

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -37,6 +37,7 @@
 #include "WebCoreArgumentCoders.h"
 #include <WebCore/MediaPlayer.h>
 #include <WebCore/MediaPlayerPrivate.h>
+#include <wtf/Logger.h>
 #include <wtf/UniqueRef.h>
 
 #if PLATFORM(COCOA)
@@ -48,10 +49,7 @@
 using namespace WebCore;
 
 RemoteMediaPlayerManagerProxy::RemoteMediaPlayerManagerProxy(GPUConnectionToWebProcess& connection)
-    : m_gpuConnectionToWebProcess(connection)
-#if !RELEASE_LOG_DISABLED
-    , m_logIdentifier(WTF::LoggerHelper::uniqueLogIdentifier())
-#endif
+    : m_gpuConnectionToWebProcess(makeWeakPtr(connection))
 {
 }
 
@@ -62,6 +60,7 @@
 void RemoteMediaPlayerManagerProxy::createMediaPlayer(MediaPlayerIdentifier identifier, MediaPlayerEnums::MediaEngineIdentifier engineIdentifier, RemoteMediaPlayerProxyConfiguration&& proxyConfiguration, CompletionHandler<void(RemoteMediaPlayerConfiguration&)>&& completionHandler)
 {
     ASSERT(RunLoop::isMain());
+    ASSERT(m_gpuConnectionToWebProcess);
 
     auto locker = holdLock(m_proxiesLock);
     ASSERT(!m_proxies.contains(identifier));
@@ -68,7 +67,7 @@
 
     RemoteMediaPlayerConfiguration playerConfiguration;
 
-    auto proxy = makeUnique<RemoteMediaPlayerProxy>(*this, identifier, m_gpuConnectionToWebProcess.connection(), engineIdentifier, WTFMove(proxyConfiguration));
+    auto proxy = makeUnique<RemoteMediaPlayerProxy>(*this, identifier, m_gpuConnectionToWebProcess->connection(), engineIdentifier, WTFMove(proxyConfiguration));
     proxy->getConfiguration(playerConfiguration);
     m_proxies.add(identifier, WTFMove(proxy));
 
@@ -196,14 +195,14 @@
 }
 
 #if !RELEASE_LOG_DISABLED
-const Logger& RemoteMediaPlayerManagerProxy::logger() const
+Logger& RemoteMediaPlayerManagerProxy::logger()
 {
-    return m_gpuConnectionToWebProcess.logger();
-}
+    if (!m_logger) {
+        m_logger = Logger::create(this);
+        m_logger->setEnabled(this, m_gpuConnectionToWebProcess ? m_gpuConnectionToWebProcess->isAlwaysOnLoggingAllowed() : false);
+    }
 
-WTFLogChannel& RemoteMediaPlayerManagerProxy::logChannel() const
-{
-    return WebKit2LogMedia;
+    return *m_logger;
 }
 #endif
 

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerManagerProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -28,6 +28,7 @@
 #if ENABLE(GPU_PROCESS)
 
 #include "Connection.h"
+#include "GPUConnectionToWebProcess.h"
 #include "MessageReceiver.h"
 #include "SandboxExtension.h"
 #include "TrackPrivateRemoteIdentifier.h"
@@ -34,20 +35,18 @@
 #include <WebCore/MediaPlayer.h>
 #include <WebCore/MediaPlayerIdentifier.h>
 #include <wtf/Lock.h>
-#include <wtf/LoggerHelper.h>
+#include <wtf/Logger.h>
+#include <wtf/WeakPtr.h>
 
 namespace WebKit {
 
-class GPUConnectionToWebProcess;
 class RemoteMediaPlayerProxy;
 struct RemoteMediaPlayerConfiguration;
 struct RemoteMediaPlayerProxyConfiguration;
 
 class RemoteMediaPlayerManagerProxy
-    : private IPC::MessageReceiver
-#if !RELEASE_LOG_DISABLED
-    , private LoggerHelper
-#endif
+    : public CanMakeWeakPtr<RemoteMediaPlayerManagerProxy>
+    , private IPC::MessageReceiver
 {
     WTF_MAKE_FAST_ALLOCATED;
 public:
@@ -54,21 +53,18 @@
     explicit RemoteMediaPlayerManagerProxy(GPUConnectionToWebProcess&);
     ~RemoteMediaPlayerManagerProxy();
 
-    GPUConnectionToWebProcess& gpuConnectionToWebProcess() const { return m_gpuConnectionToWebProcess; }
+    GPUConnectionToWebProcess* gpuConnectionToWebProcess() { return m_gpuConnectionToWebProcess.get(); }
     void clear();
 
+#if !RELEASE_LOG_DISABLED
+    Logger& logger();
+#endif
+
     void didReceiveMessageFromWebProcess(IPC::Connection& connection, IPC::Decoder& decoder) { didReceiveMessage(connection, decoder); }
     void didReceiveSyncMessageFromWebProcess(IPC::Connection& connection, IPC::Decoder& decoder, std::unique_ptr<IPC::Encoder>& encoder) { didReceiveSyncMessage(connection, decoder, encoder); }
     void didReceivePlayerMessage(IPC::Connection&, IPC::Decoder&);
     void didReceiveSyncPlayerMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&);
 
-#if !RELEASE_LOG_DISABLED
-    const Logger& logger() const final;
-    const void* logIdentifier() const final { return m_logIdentifier; }
-    const char* logClassName() const final { return "RemoteMediaPlayerManagerProxy"; }
-    WTFLogChannel& logChannel() const final;
-#endif
-
     RefPtr<WebCore::MediaPlayer> mediaPlayer(const WebCore::MediaPlayerIdentifier&);
 
 private:
@@ -89,10 +85,10 @@
 
     Lock m_proxiesLock;
     HashMap<WebCore::MediaPlayerIdentifier, std::unique_ptr<RemoteMediaPlayerProxy>> m_proxies;
-    GPUConnectionToWebProcess& m_gpuConnectionToWebProcess;
+    WeakPtr<GPUConnectionToWebProcess> m_gpuConnectionToWebProcess;
 
 #if !RELEASE_LOG_DISABLED
-    const void* m_logIdentifier;
+    RefPtr<Logger> m_logger;
 #endif
 };
 

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -73,12 +73,12 @@
 RemoteMediaPlayerProxy::RemoteMediaPlayerProxy(RemoteMediaPlayerManagerProxy& manager, MediaPlayerIdentifier identifier, Ref<IPC::Connection>&& connection, MediaPlayerEnums::MediaEngineIdentifier engineIdentifier, RemoteMediaPlayerProxyConfiguration&& configuration)
     : m_id(identifier)
     , m_webProcessConnection(WTFMove(connection))
-    , m_manager(manager)
+    , m_manager(makeWeakPtr(manager))
     , m_engineIdentifier(engineIdentifier)
     , m_updateCachedStateMessageTimer(RunLoop::main(), this, &RemoteMediaPlayerProxy::timerFired)
     , m_configuration(configuration)
 #if !RELEASE_LOG_DISABLED
-    , m_logger(m_manager.logger())
+    , m_logger(manager.logger())
 #endif
 {
     m_typesRequiringHardwareSupport = m_configuration.mediaContentTypesRequiringHardwareSupport;
@@ -136,10 +136,16 @@
 #if ENABLE(MEDIA_SOURCE)
 void RemoteMediaPlayerProxy::loadMediaSource(URL&& url, const WebCore::ContentType& contentType, bool webMParserEnabled, RemoteMediaSourceIdentifier mediaSourceIdentifier, CompletionHandler<void(RemoteMediaPlayerConfiguration&&)>&& completionHandler)
 {
-    m_mediaSourceProxy = adoptRef(*new RemoteMediaSourceProxy(m_manager.gpuConnectionToWebProcess(), mediaSourceIdentifier, webMParserEnabled, *this));
-    m_player->load(url, contentType, m_mediaSourceProxy.get());
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
 
     RemoteMediaPlayerConfiguration configuration;
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess()) {
+        completionHandler(WTFMove(configuration));
+        return;
+    }
+
+    m_mediaSourceProxy = adoptRef(*new RemoteMediaSourceProxy(*m_manager->gpuConnectionToWebProcess(), mediaSourceIdentifier, webMParserEnabled, *this));
+    m_player->load(url, contentType, m_mediaSourceProxy.get());
     getConfiguration(configuration);
     completionHandler(WTFMove(configuration));
 }
@@ -249,9 +255,13 @@
     m_player->setRate(rate);
 }
 
-Ref<PlatformMediaResource> RemoteMediaPlayerProxy::requestResource(ResourceRequest&& request, PlatformMediaResourceLoader::LoadOptions options)
+RefPtr<PlatformMediaResource> RemoteMediaPlayerProxy::requestResource(ResourceRequest&& request, PlatformMediaResourceLoader::LoadOptions options)
 {
-    auto& remoteMediaResourceManager = m_manager.gpuConnectionToWebProcess().remoteMediaResourceManager();
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return nullptr;
+
+    auto& remoteMediaResourceManager = m_manager->gpuConnectionToWebProcess()->remoteMediaResourceManager();
     auto remoteMediaResourceIdentifier = RemoteMediaResourceIdentifier::generate();
     auto remoteMediaResource = RemoteMediaResource::create(remoteMediaResourceManager, *this, remoteMediaResourceIdentifier);
     remoteMediaResourceManager.addMediaResource(remoteMediaResourceIdentifier, remoteMediaResource);
@@ -376,7 +386,11 @@
 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
 String RemoteMediaPlayerProxy::mediaPlayerMediaKeysStorageDirectory() const
 {
-    return m_manager.gpuConnectionToWebProcess().mediaKeysStorageDirectory();
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return emptyString();
+
+    return m_manager->gpuConnectionToWebProcess()->mediaKeysStorageDirectory();
 }
 #endif
 
@@ -409,7 +423,11 @@
 
 const String& RemoteMediaPlayerProxy::mediaPlayerMediaCacheDirectory() const
 {
-    return m_manager.gpuConnectionToWebProcess().mediaCacheDirectory();
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return emptyString();
+
+    return m_manager->gpuConnectionToWebProcess()->mediaCacheDirectory();
 }
 
 const Vector<WebCore::ContentType>& RemoteMediaPlayerProxy::mediaContentTypesRequiringHardwareSupport() const
@@ -479,8 +497,12 @@
     track.setLogger(mediaPlayerLogger(), mediaPlayerLogIdentifier());
 #endif
 
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return { };
+
     auto identifier = TrackPrivateRemoteIdentifier::generate();
-    m_audioTracks.set(&track, RemoteAudioTrackProxy::create(m_manager.gpuConnectionToWebProcess(), identifier, track, m_id));
+    m_audioTracks.set(&track, RemoteAudioTrackProxy::create(*m_manager->gpuConnectionToWebProcess(), identifier, track, m_id));
     return identifier;
 }
 
@@ -500,8 +522,13 @@
     track.setLogger(mediaPlayerLogger(), mediaPlayerLogIdentifier());
 #endif
 
+    ASSERT(m_manager);
+    ASSERT(m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return { };
+
     auto identifier = TrackPrivateRemoteIdentifier::generate();
-    m_videoTracks.set(&track, RemoteVideoTrackProxy::create(m_manager.gpuConnectionToWebProcess(), identifier, track, m_id));
+    m_videoTracks.set(&track, RemoteVideoTrackProxy::create(*m_manager->gpuConnectionToWebProcess(), identifier, track, m_id));
     return identifier;
 }
 
@@ -521,8 +548,12 @@
     track.setLogger(mediaPlayerLogger(), mediaPlayerLogIdentifier());
 #endif
 
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return { };
+
     auto identifier = TrackPrivateRemoteIdentifier::generate();
-    m_textTracks.set(&track, RemoteTextTrackProxy::create(m_manager.gpuConnectionToWebProcess(), identifier, track, m_id));
+    m_textTracks.set(&track, RemoteTextTrackProxy::create(*m_manager->gpuConnectionToWebProcess(), identifier, track, m_id));
     return identifier;
 }
 
@@ -612,7 +643,11 @@
 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
 RefPtr<ArrayBuffer> RemoteMediaPlayerProxy::mediaPlayerCachedKeyForKeyId(const String& keyId) const
 {
-    if (auto cdmSession = m_manager.gpuConnectionToWebProcess().legacyCdmFactoryProxy().getSession(m_legacySession))
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return nullptr;
+
+    if (auto cdmSession = m_manager->gpuConnectionToWebProcess()->legacyCdmFactoryProxy().getSession(m_legacySession))
         return cdmSession->getCachedKeyForKeyId(keyId);
     return nullptr;
 }
@@ -808,11 +843,15 @@
 #if ENABLE(LEGACY_ENCRYPTED_MEDIA)
 void RemoteMediaPlayerProxy::setLegacyCDMSession(RemoteLegacyCDMSessionIdentifier&& instanceId)
 {
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return;
+
     if (m_legacySession == instanceId)
         return;
 
     if (m_legacySession) {
-        if (auto cdmSession = m_manager.gpuConnectionToWebProcess().legacyCdmFactoryProxy().getSession(m_legacySession)) {
+        if (auto cdmSession = m_manager->gpuConnectionToWebProcess()->legacyCdmFactoryProxy().getSession(m_legacySession)) {
             m_player->setCDMSession(nullptr);
             cdmSession->setPlayer(nullptr);
         }
@@ -821,7 +860,7 @@
     m_legacySession = instanceId;
 
     if (m_legacySession) {
-        if (auto cdmSession = m_manager.gpuConnectionToWebProcess().legacyCdmFactoryProxy().getSession(m_legacySession)) {
+        if (auto cdmSession = m_manager->gpuConnectionToWebProcess()->legacyCdmFactoryProxy().getSession(m_legacySession)) {
             m_player->setCDMSession(cdmSession->session());
             cdmSession->setPlayer(makeWeakPtr(this));
         }
@@ -837,19 +876,31 @@
 #if ENABLE(ENCRYPTED_MEDIA)
 void RemoteMediaPlayerProxy::cdmInstanceAttached(RemoteCDMInstanceIdentifier&& instanceId)
 {
-    if (auto* instanceProxy = m_manager.gpuConnectionToWebProcess().cdmFactoryProxy().getInstance(instanceId))
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return;
+
+    if (auto* instanceProxy = m_manager->gpuConnectionToWebProcess()->cdmFactoryProxy().getInstance(instanceId))
         m_player->cdmInstanceAttached(instanceProxy->instance());
 }
 
 void RemoteMediaPlayerProxy::cdmInstanceDetached(RemoteCDMInstanceIdentifier&& instanceId)
 {
-    if (auto* instanceProxy = m_manager.gpuConnectionToWebProcess().cdmFactoryProxy().getInstance(instanceId))
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return;
+
+    if (auto* instanceProxy = m_manager->gpuConnectionToWebProcess()->cdmFactoryProxy().getInstance(instanceId))
         m_player->cdmInstanceDetached(instanceProxy->instance());
 }
 
 void RemoteMediaPlayerProxy::attemptToDecryptWithInstance(RemoteCDMInstanceIdentifier&& instanceId)
 {
-    if (auto* instanceProxy = m_manager.gpuConnectionToWebProcess().cdmFactoryProxy().getInstance(instanceId))
+    ASSERT(m_manager && m_manager->gpuConnectionToWebProcess());
+    if (!m_manager || !m_manager->gpuConnectionToWebProcess())
+        return;
+
+    if (auto* instanceProxy = m_manager->gpuConnectionToWebProcess()->cdmFactoryProxy().getInstance(instanceId))
         m_player->attemptToDecryptWithInstance(instanceProxy->instance());
 }
 #endif

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -189,7 +189,7 @@
     void wouldTaintOrigin(struct WebCore::SecurityOriginData, CompletionHandler<void(Optional<bool>)>&&);
     void setShouldUpdatePlaybackMetrics(bool);
 
-    Ref<WebCore::PlatformMediaResource> requestResource(WebCore::ResourceRequest&&, WebCore::PlatformMediaResourceLoader::LoadOptions);
+    RefPtr<WebCore::PlatformMediaResource> requestResource(WebCore::ResourceRequest&&, WebCore::PlatformMediaResourceLoader::LoadOptions);
     void sendH2Ping(const URL&, CompletionHandler<void(Expected<WTF::Seconds, WebCore::ResourceError>&&)>&&);
     void removeResource(RemoteMediaResourceIdentifier);
 
@@ -303,7 +303,7 @@
 #if ENABLE(VIDEO_PRESENTATION_MODE)
     std::unique_ptr<LayerHostingContext> m_fullscreenLayerHostingContext;
 #endif
-    RemoteMediaPlayerManagerProxy& m_manager;
+    WeakPtr<RemoteMediaPlayerManagerProxy> m_manager;
     WebCore::MediaPlayerEnums::MediaEngineIdentifier m_engineIdentifier;
     Vector<WebCore::ContentType> m_typesRequiringHardwareSupport;
     RunLoop::Timer<RemoteMediaPlayerProxy> m_updateCachedStateMessageTimer;

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaSourceProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaSourceProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaSourceProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -42,17 +42,19 @@
 using namespace WebCore;
 
 RemoteMediaSourceProxy::RemoteMediaSourceProxy(GPUConnectionToWebProcess& connectionToWebProcess, RemoteMediaSourceIdentifier identifier, bool webMParserEnabled, RemoteMediaPlayerProxy& remoteMediaPlayerProxy)
-    : m_connectionToWebProcess(connectionToWebProcess)
+    : m_connectionToWebProcess(makeWeakPtr(connectionToWebProcess))
     , m_identifier(identifier)
     , m_webMParserEnabled(webMParserEnabled)
     , m_remoteMediaPlayerProxy(makeWeakPtr(remoteMediaPlayerProxy))
 {
-    m_connectionToWebProcess.messageReceiverMap().addMessageReceiver(Messages::RemoteMediaSourceProxy::messageReceiverName(), m_identifier.toUInt64(), *this);
+    m_connectionToWebProcess->messageReceiverMap().addMessageReceiver(Messages::RemoteMediaSourceProxy::messageReceiverName(), m_identifier.toUInt64(), *this);
 }
 
 RemoteMediaSourceProxy::~RemoteMediaSourceProxy()
 {
-    m_connectionToWebProcess.messageReceiverMap().removeMessageReceiver(Messages::RemoteMediaSourceProxy::messageReceiverName(), m_identifier.toUInt64());
+    ASSERT(m_connectionToWebProcess);
+
+    m_connectionToWebProcess->messageReceiverMap().removeMessageReceiver(Messages::RemoteMediaSourceProxy::messageReceiverName(), m_identifier.toUInt64());
 }
 
 void RemoteMediaSourceProxy::setPrivateAndOpen(Ref<MediaSourcePrivate>&& mediaSourcePrivate)
@@ -74,7 +76,10 @@
 
 void RemoteMediaSourceProxy::seekToTime(const MediaTime& time)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaSourcePrivateRemote::SeekToTime(time), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaSourcePrivateRemote::SeekToTime(time), m_identifier);
 }
 
 #if USE(GSTREAMER)
@@ -98,7 +103,7 @@
 
 void RemoteMediaSourceProxy::addSourceBuffer(const WebCore::ContentType& contentType, AddSourceBufferCallback&& callback)
 {
-    if (!m_remoteMediaPlayerProxy)
+    if (!m_remoteMediaPlayerProxy || !m_connectionToWebProcess)
         return;
 
     RefPtr<SourceBufferPrivate> sourceBufferPrivate;
@@ -107,7 +112,7 @@
     Optional<RemoteSourceBufferIdentifier> remoteSourceIdentifier;
     if (status == MediaSourcePrivate::AddStatus::Ok) {
         auto identifier = RemoteSourceBufferIdentifier::generate();
-        auto remoteSourceBufferProxy = RemoteSourceBufferProxy::create(m_connectionToWebProcess, identifier, sourceBufferPrivate.releaseNonNull(), *m_remoteMediaPlayerProxy);
+        auto remoteSourceBufferProxy = RemoteSourceBufferProxy::create(*m_connectionToWebProcess, identifier, sourceBufferPrivate.releaseNonNull(), *m_remoteMediaPlayerProxy);
         m_sourceBuffers.append(WTFMove(remoteSourceBufferProxy));
         remoteSourceIdentifier = identifier;
     }

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaSourceProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaSourceProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaSourceProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -89,7 +89,7 @@
     void seekCompleted();
     void setTimeFudgeFactor(const MediaTime&);
 
-    GPUConnectionToWebProcess& m_connectionToWebProcess;
+    WeakPtr<GPUConnectionToWebProcess> m_connectionToWebProcess;
     RemoteMediaSourceIdentifier m_identifier;
     bool m_webMParserEnabled { false };
     RefPtr<WebCore::MediaSourcePrivate> m_private;

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteRemoteCommandListenerProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteRemoteCommandListenerProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteRemoteCommandListenerProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -36,7 +36,7 @@
 using namespace WebCore;
 
 RemoteRemoteCommandListenerProxy::RemoteRemoteCommandListenerProxy(GPUConnectionToWebProcess& gpuConnection, RemoteRemoteCommandListenerIdentifier&& identifier)
-    : m_gpuConnection(gpuConnection)
+    : m_gpuConnection(makeWeakPtr(gpuConnection))
     , m_identifier(WTFMove(identifier))
     , m_listener(WebCore::RemoteCommandListener::create(*this))
 {
@@ -46,7 +46,10 @@
 
 void RemoteRemoteCommandListenerProxy::didReceiveRemoteControlCommand(PlatformMediaSession::RemoteControlCommandType command, const PlatformMediaSession::RemoteCommandArgument& argument)
 {
-    m_gpuConnection.connection().send(Messages::RemoteRemoteCommandListener::DidReceiveRemoteControlCommand(command, argument), m_identifier);
+    if (!m_gpuConnection)
+        return;
+
+    m_gpuConnection->connection().send(Messages::RemoteRemoteCommandListener::DidReceiveRemoteControlCommand(command, argument), m_identifier);
 }
 
 void RemoteRemoteCommandListenerProxy::updateSupportedCommands(bool supportsSeeking)

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteRemoteCommandListenerProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteRemoteCommandListenerProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteRemoteCommandListenerProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -31,6 +31,7 @@
 #include "RemoteRemoteCommandListenerIdentifier.h"
 #include <WebCore/RemoteCommandListener.h>
 #include <wtf/UniqueRef.h>
+#include <wtf/WeakPtr.h>
 
 namespace IPC {
 class Connection;
@@ -58,7 +59,7 @@
     // Messages
     void updateSupportedCommands(bool supportsSeeking);
 
-    GPUConnectionToWebProcess& m_gpuConnection;
+    WeakPtr<GPUConnectionToWebProcess> m_gpuConnection;
     RemoteRemoteCommandListenerIdentifier m_identifier;
     std::unique_ptr<WebCore::RemoteCommandListener> m_listener;
 };

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -47,12 +47,12 @@
 }
 
 RemoteSourceBufferProxy::RemoteSourceBufferProxy(GPUConnectionToWebProcess& connectionToWebProcess, RemoteSourceBufferIdentifier identifier, Ref<SourceBufferPrivate>&& sourceBufferPrivate, RemoteMediaPlayerProxy& remoteMediaPlayerProxy)
-    : m_connectionToWebProcess(connectionToWebProcess)
+    : m_connectionToWebProcess(makeWeakPtr(connectionToWebProcess))
     , m_identifier(identifier)
     , m_sourceBufferPrivate(WTFMove(sourceBufferPrivate))
     , m_remoteMediaPlayerProxy(makeWeakPtr(remoteMediaPlayerProxy))
 {
-    m_connectionToWebProcess.messageReceiverMap().addMessageReceiver(Messages::RemoteSourceBufferProxy::messageReceiverName(), m_identifier.toUInt64(), *this);
+    m_connectionToWebProcess->messageReceiverMap().addMessageReceiver(Messages::RemoteSourceBufferProxy::messageReceiverName(), m_identifier.toUInt64(), *this);
     m_sourceBufferPrivate->setClient(this);
     m_sourceBufferPrivate->setIsAttached(true);
 }
@@ -60,7 +60,7 @@
 RemoteSourceBufferProxy::~RemoteSourceBufferProxy()
 {
     m_sourceBufferPrivate->setIsAttached(false);
-    m_connectionToWebProcess.messageReceiverMap().removeMessageReceiver(Messages::RemoteSourceBufferProxy::messageReceiverName(), m_identifier.toUInt64());
+    m_connectionToWebProcess->messageReceiverMap().removeMessageReceiver(Messages::RemoteSourceBufferProxy::messageReceiverName(), m_identifier.toUInt64());
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateDidReceiveInitializationSegment(InitializationSegment&& segment, CompletionHandler<void()>&& completionHandler)
@@ -102,62 +102,100 @@
         m_mediaDescriptions.add(identifier, *textTrackInfo.description);
     }
 
-    m_connectionToWebProcess.connection().sendWithAsyncReply(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDidReceiveInitializationSegment(segmentInfo), WTFMove(completionHandler), m_identifier);
+    if (!m_connectionToWebProcess) {
+        completionHandler();
+        return;
+    }
+
+    m_connectionToWebProcess->connection().sendWithAsyncReply(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDidReceiveInitializationSegment(segmentInfo), WTFMove(completionHandler), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateStreamEndedWithDecodeError()
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateStreamEndedWithDecodeError(), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateStreamEndedWithDecodeError(), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateAppendError(bool decodeError)
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateAppendError(decodeError), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateAppendError(decodeError), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateHighestPresentationTimestampChanged(const MediaTime& timestamp)
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateHighestPresentationTimestampChanged(timestamp), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateHighestPresentationTimestampChanged(timestamp), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateDurationChanged(const MediaTime& duration)
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDurationChanged(duration), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDurationChanged(duration), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateDidParseSample(double sampleDuration)
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDidParseSample(sampleDuration), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDidParseSample(sampleDuration), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateDidDropSample()
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDidDropSample(), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDidDropSample(), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateAppendComplete(SourceBufferPrivateClient::AppendResult appendResult)
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateAppendComplete(appendResult), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateAppendComplete(appendResult), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateDidReceiveRenderingError(int64_t errorCode)
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDidReceiveRenderingError(errorCode), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateDidReceiveRenderingError(errorCode), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateReportExtraMemoryCost(uint64_t extraMemory)
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateReportExtraMemoryCost(extraMemory), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateReportExtraMemoryCost(extraMemory), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateBufferedDirtyChanged(bool flag)
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateBufferedDirtyChanged(flag), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateBufferedDirtyChanged(flag), m_identifier);
 }
 
 void RemoteSourceBufferProxy::sourceBufferPrivateBufferedRangesChanged(const PlatformTimeRanges& timeRanges)
 {
-    m_connectionToWebProcess.connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateBufferedRangesChanged(timeRanges), m_identifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateBufferedRangesChanged(timeRanges), m_identifier);
 }
 
 void RemoteSourceBufferProxy::append(const IPC::DataReference& data)

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -111,7 +111,7 @@
     void updateTrackIds(Vector<std::pair<TrackPrivateRemoteIdentifier, TrackPrivateRemoteIdentifier>>&&);
     void bufferedSamplesForTrackId(TrackPrivateRemoteIdentifier, CompletionHandler<void(Vector<String>&&)>&&);
 
-    GPUConnectionToWebProcess& m_connectionToWebProcess;
+    WeakPtr<GPUConnectionToWebProcess> m_connectionToWebProcess;
     RemoteSourceBufferIdentifier m_identifier;
     Ref<WebCore::SourceBufferPrivate> m_sourceBufferPrivate;
     WeakPtr<RemoteMediaPlayerProxy> m_remoteMediaPlayerProxy;

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteTextTrackProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteTextTrackProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteTextTrackProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -44,13 +44,13 @@
 using namespace WebCore;
 
 RemoteTextTrackProxy::RemoteTextTrackProxy(GPUConnectionToWebProcess& connectionToWebProcess, TrackPrivateRemoteIdentifier identifier, InbandTextTrackPrivate& trackPrivate, MediaPlayerIdentifier mediaPlayerIdentifier)
-    : m_connectionToWebProcess(connectionToWebProcess)
+    : m_connectionToWebProcess(makeWeakPtr(connectionToWebProcess))
     , m_identifier(identifier)
     , m_trackPrivate(trackPrivate)
     , m_mediaPlayerIdentifier(mediaPlayerIdentifier)
 {
     m_trackPrivate->setClient(this);
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::AddRemoteTextTrack(m_identifier, configuration()), m_mediaPlayerIdentifier);
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::AddRemoteTextTrack(m_identifier, configuration()), m_mediaPlayerIdentifier);
 }
 
 RemoteTextTrackProxy::~RemoteTextTrackProxy()
@@ -82,7 +82,10 @@
 
 void RemoteTextTrackProxy::configurationChanged()
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::RemoteTextTrackConfigurationChanged(m_identifier, configuration()), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::RemoteTextTrackConfigurationChanged(m_identifier, configuration()), m_mediaPlayerIdentifier);
 }
 
 void RemoteTextTrackProxy::willRemove()
@@ -107,54 +110,84 @@
 
 void RemoteTextTrackProxy::addDataCue(const MediaTime& start, const MediaTime& end, const void* data, unsigned length)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::AddDataCue(m_identifier, start, end, IPC::DataReference(reinterpret_cast<const uint8_t*>(data), length)), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::AddDataCue(m_identifier, start, end, IPC::DataReference(reinterpret_cast<const uint8_t*>(data), length)), m_mediaPlayerIdentifier);
 }
 
 #if ENABLE(DATACUE_VALUE)
 void RemoteTextTrackProxy::addDataCue(const MediaTime& start, const MediaTime& end, Ref<SerializedPlatformDataCue>&& cueData, const String& type)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::AddDataCueWithType(m_identifier, start, end, cueData->encodableValue(), type), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::AddDataCueWithType(m_identifier, start, end, cueData->encodableValue(), type), m_mediaPlayerIdentifier);
 }
 
 void RemoteTextTrackProxy::updateDataCue(const MediaTime& start, const MediaTime& end, SerializedPlatformDataCue& cueData)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::UpdateDataCue(m_identifier, start, end, cueData.encodableValue()), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::UpdateDataCue(m_identifier, start, end, cueData.encodableValue()), m_mediaPlayerIdentifier);
 }
 
 void RemoteTextTrackProxy::removeDataCue(const MediaTime& start, const MediaTime& end, SerializedPlatformDataCue& cueData)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::RemoveDataCue(m_identifier, start, end, cueData.encodableValue()), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::RemoveDataCue(m_identifier, start, end, cueData.encodableValue()), m_mediaPlayerIdentifier);
 }
 #endif
 
 void RemoteTextTrackProxy::addGenericCue(InbandGenericCue& cue)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::AddGenericCue(m_identifier, cue.cueData()), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::AddGenericCue(m_identifier, cue.cueData()), m_mediaPlayerIdentifier);
 }
 
 void RemoteTextTrackProxy::updateGenericCue(InbandGenericCue& cue)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::UpdateGenericCue(m_identifier, cue.cueData()), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::UpdateGenericCue(m_identifier, cue.cueData()), m_mediaPlayerIdentifier);
 }
 
 void RemoteTextTrackProxy::removeGenericCue(InbandGenericCue& cue)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::RemoveGenericCue(m_identifier, cue.cueData()), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::RemoveGenericCue(m_identifier, cue.cueData()), m_mediaPlayerIdentifier);
 }
 
 void RemoteTextTrackProxy::parseWebVTTFileHeader(String&& header)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::ParseWebVTTFileHeader(m_identifier, header), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::ParseWebVTTFileHeader(m_identifier, header), m_mediaPlayerIdentifier);
 }
 
 void RemoteTextTrackProxy::parseWebVTTCueData(const char* data, unsigned length)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::ParseWebVTTCueData(m_identifier, IPC::DataReference(reinterpret_cast<const uint8_t*>(data), length)), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::ParseWebVTTCueData(m_identifier, IPC::DataReference(reinterpret_cast<const uint8_t*>(data), length)), m_mediaPlayerIdentifier);
 }
 
 void RemoteTextTrackProxy::parseWebVTTCueData(ISOWebVTTCue&& cueData)
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::ParseWebVTTCueDataStruct(m_identifier, cueData), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::ParseWebVTTCueDataStruct(m_identifier, cueData), m_mediaPlayerIdentifier);
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteTextTrackProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteTextTrackProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteTextTrackProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -34,6 +34,7 @@
 #include <WebCore/MediaPlayerIdentifier.h>
 #include <WebCore/TrackBase.h>
 #include <wtf/Ref.h>
+#include <wtf/WeakPtr.h>
 
 namespace IPC {
 class Connection;
@@ -88,7 +89,7 @@
     TextTrackPrivateRemoteConfiguration& configuration();
     void configurationChanged();
 
-    GPUConnectionToWebProcess& m_connectionToWebProcess;
+    WeakPtr<GPUConnectionToWebProcess> m_connectionToWebProcess;
     TrackPrivateRemoteIdentifier m_identifier;
     Ref<WebCore::InbandTextTrackPrivate> m_trackPrivate;
     WebCore::MediaPlayerIdentifier m_mediaPlayerIdentifier;

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.cpp (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.cpp	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.cpp	2021-02-25 06:45:27 UTC (rev 273473)
@@ -40,13 +40,13 @@
 using namespace WebCore;
 
 RemoteVideoTrackProxy::RemoteVideoTrackProxy(GPUConnectionToWebProcess& connectionToWebProcess, TrackPrivateRemoteIdentifier identifier, VideoTrackPrivate& trackPrivate, MediaPlayerIdentifier mediaPlayerIdentifier)
-    : m_connectionToWebProcess(connectionToWebProcess)
+    : m_connectionToWebProcess(makeWeakPtr(connectionToWebProcess))
     , m_identifier(identifier)
     , m_trackPrivate(trackPrivate)
     , m_mediaPlayerIdentifier(mediaPlayerIdentifier)
 {
     m_trackPrivate->setClient(this);
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::AddRemoteVideoTrack(m_identifier, configuration()), m_mediaPlayerIdentifier);
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::AddRemoteVideoTrack(m_identifier, configuration()), m_mediaPlayerIdentifier);
 }
 
 RemoteVideoTrackProxy::~RemoteVideoTrackProxy()
@@ -70,7 +70,10 @@
 
 void RemoteVideoTrackProxy::configurationChanged()
 {
-    m_connectionToWebProcess.connection().send(Messages::MediaPlayerPrivateRemote::RemoteVideoTrackConfigurationChanged(m_identifier, configuration()), m_mediaPlayerIdentifier);
+    if (!m_connectionToWebProcess)
+        return;
+
+    m_connectionToWebProcess->connection().send(Messages::MediaPlayerPrivateRemote::RemoteVideoTrackConfigurationChanged(m_identifier, configuration()), m_mediaPlayerIdentifier);
 }
 
 void RemoteVideoTrackProxy::willRemove()

Modified: trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.h (273472 => 273473)


--- trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.h	2021-02-25 06:24:46 UTC (rev 273472)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.h	2021-02-25 06:45:27 UTC (rev 273473)
@@ -34,6 +34,7 @@
 #include <WebCore/TrackBase.h>
 #include <WebCore/VideoTrackPrivate.h>
 #include <wtf/Ref.h>
+#include <wtf/WeakPtr.h>
 
 namespace IPC {
 class Connection;
@@ -74,7 +75,7 @@
     TrackPrivateRemoteConfiguration& configuration();
     void configurationChanged();
 
-    GPUConnectionToWebProcess& m_connectionToWebProcess;
+    WeakPtr<GPUConnectionToWebProcess> m_connectionToWebProcess;
     TrackPrivateRemoteIdentifier m_identifier;
     Ref<WebCore::VideoTrackPrivate> m_trackPrivate;
     WebCore::MediaPlayerIdentifier m_mediaPlayerIdentifier;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to