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;