Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.h (278495 => 278496)
--- trunk/Source/WebCore/platform/graphics/MediaPlayer.h 2021-06-04 20:24:37 UTC (rev 278495)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.h 2021-06-04 20:41:45 UTC (rev 278496)
@@ -53,6 +53,7 @@
#include <wtf/MediaTime.h>
#include <wtf/ThreadSafeRefCounted.h>
#include <wtf/WallTime.h>
+#include <wtf/WeakPtr.h>
#include <wtf/text/StringHash.h>
#if ENABLE(AVF_CAPTIONS)
@@ -289,7 +290,7 @@
#endif
};
-class WEBCORE_EXPORT MediaPlayer : public MediaPlayerEnums, public ThreadSafeRefCounted<MediaPlayer, WTF::DestructionThread::Main> {
+class WEBCORE_EXPORT MediaPlayer : public MediaPlayerEnums, public ThreadSafeRefCounted<MediaPlayer, WTF::DestructionThread::Main>, public CanMakeWeakPtr<MediaPlayer> {
WTF_MAKE_NONCOPYABLE(MediaPlayer); WTF_MAKE_FAST_ALLOCATED;
public:
static Ref<MediaPlayer> create(MediaPlayerClient&);
Modified: trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp (278495 => 278496)
--- trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp 2021-06-04 20:24:37 UTC (rev 278495)
+++ trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp 2021-06-04 20:41:45 UTC (rev 278496)
@@ -106,7 +106,7 @@
, m_logIdentifier(player->mediaPlayerLogIdentifier())
,
#endif
- m_player(player)
+ m_player(makeWeakPtr(*player))
, m_mediaResourceLoader(*player->createResourceLoader())
, m_manager(manager)
, m_remoteEngineIdentifier(engineIdentifier)
@@ -133,7 +133,11 @@
void MediaPlayerPrivateRemote::prepareForPlayback(bool privateMode, MediaPlayer::Preload preload, bool preservesPitch, bool prepare)
{
- auto scale = m_player->playerContentsScale();
+ auto player = makeRefPtr(m_player.get());
+ if (!player)
+ return;
+
+ auto scale = player->playerContentsScale();
auto preferredDynamicRangeMode = m_player->preferredDynamicRangeMode();
connection().sendWithAsyncReply(Messages::RemoteMediaPlayerProxy::PrepareForPlayback(privateMode, preload, preservesPitch, prepare, scale, preferredDynamicRangeMode), [weakThis = makeWeakPtr(*this), this](auto inlineLayerHostingContextId) mutable {
@@ -143,9 +147,13 @@
if (!inlineLayerHostingContextId)
return;
+ auto player = makeRefPtr(m_player.get());
+ if (!player)
+ return;
+
m_videoLayer = createVideoLayerRemote(this, inlineLayerHostingContextId.value());
#if PLATFORM(COCOA)
- m_videoLayerManager->setVideoLayer(m_videoLayer.get(), snappedIntRect(m_player->playerContentBoxRect()).size());
+ m_videoLayerManager->setVideoLayer(m_videoLayer.get(), snappedIntRect(player->playerContentBoxRect()).size());
#endif
}, m_id);
}
@@ -169,7 +177,8 @@
if (!createExtension()) {
WTFLogAlways("Unable to create sandbox extension handle for GPUProcess url.\n");
m_cachedState.networkState = MediaPlayer::NetworkState::FormatError;
- m_player->networkStateChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->networkStateChanged();
return;
}
@@ -180,8 +189,12 @@
if (!weakThis)
return;
+ auto player = makeRefPtr(m_player.get());
+ if (!player)
+ return;
+
m_configuration = WTFMove(configuration);
- m_player->mediaEngineUpdated();
+ player->mediaEngineUpdated();
}, m_id);
}
@@ -303,31 +316,36 @@
void MediaPlayerPrivateRemote::networkStateChanged(RemoteMediaPlayerState&& state)
{
updateCachedState(WTFMove(state));
- m_player->networkStateChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->networkStateChanged();
}
void MediaPlayerPrivateRemote::setReadyState(MediaPlayer::ReadyState readyState)
{
m_cachedState.readyState = readyState;
- m_player->readyStateChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->readyStateChanged();
}
void MediaPlayerPrivateRemote::readyStateChanged(RemoteMediaPlayerState&& state)
{
updateCachedState(WTFMove(state));
- m_player->readyStateChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->readyStateChanged();
}
void MediaPlayerPrivateRemote::volumeChanged(double volume)
{
m_volume = volume;
- m_player->volumeChanged(volume);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->volumeChanged(volume);
}
void MediaPlayerPrivateRemote::muteChanged(bool muted)
{
m_muted = muted;
- m_player->muteChanged(muted);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->muteChanged(muted);
}
void MediaPlayerPrivateRemote::timeChanged(RemoteMediaPlayerState&& state)
@@ -334,19 +352,22 @@
{
m_seeking = false;
updateCachedState(WTFMove(state));
- m_player->timeChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->timeChanged();
}
void MediaPlayerPrivateRemote::durationChanged(RemoteMediaPlayerState&& state)
{
updateCachedState(WTFMove(state));
- m_player->durationChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->durationChanged();
}
void MediaPlayerPrivateRemote::rateChanged(double rate)
{
m_rate = rate;
- m_player->rateChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->rateChanged();
}
void MediaPlayerPrivateRemote::playbackStateChanged(bool paused, MediaTime&& mediaTime, MonotonicTime&& wallTime)
@@ -354,25 +375,29 @@
m_cachedState.paused = paused;
m_cachedMediaTime = mediaTime;
m_cachedMediaTimeQueryTime = wallTime;
- m_player->playbackStateChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->playbackStateChanged();
}
void MediaPlayerPrivateRemote::engineFailedToLoad(long platformErrorCode)
{
m_platformErrorCode = platformErrorCode;
- m_player->remoteEngineFailedToLoad();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->remoteEngineFailedToLoad();
}
void MediaPlayerPrivateRemote::characteristicChanged(RemoteMediaPlayerState&& state)
{
updateCachedState(WTFMove(state));
- m_player->characteristicChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->characteristicChanged();
}
void MediaPlayerPrivateRemote::sizeChanged(WebCore::FloatSize naturalSize)
{
m_cachedState.naturalSize = naturalSize;
- m_player->sizeChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->sizeChanged();
}
void MediaPlayerPrivateRemote::currentTimeChanged(const MediaTime& mediaTime, const MonotonicTime& queryTime)
@@ -384,13 +409,15 @@
void MediaPlayerPrivateRemote::firstVideoFrameAvailable()
{
INFO_LOG(LOGIDENTIFIER);
- m_player->firstVideoFrameAvailable();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->firstVideoFrameAvailable();
}
void MediaPlayerPrivateRemote::renderingModeChanged()
{
INFO_LOG(LOGIDENTIFIER);
- m_player->renderingModeChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->renderingModeChanged();
}
String MediaPlayerPrivateRemote::engineDescription() const
@@ -420,7 +447,8 @@
void MediaPlayerPrivateRemote::acceleratedRenderingStateChanged()
{
- connection().send(Messages::RemoteMediaPlayerProxy::AcceleratedRenderingStateChanged(m_player->supportsAcceleratedRendering()), m_id);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ connection().send(Messages::RemoteMediaPlayerProxy::AcceleratedRenderingStateChanged(player->supportsAcceleratedRendering()), m_id);
}
#if ENABLE(WIRELESS_PLAYBACK_TARGET)
@@ -517,7 +545,8 @@
return;
#endif
- m_player->addAudioTrack(addResult.iterator->value);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ m_player->addAudioTrack(addResult.iterator->value);
}
void MediaPlayerPrivateRemote::removeRemoteAudioTrack(TrackPrivateRemoteIdentifier identifier)
@@ -525,7 +554,8 @@
ASSERT(m_audioTracks.contains(identifier));
if (auto* track = m_audioTracks.get(identifier)) {
- m_player->removeAudioTrack(*track);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->removeAudioTrack(*track);
m_audioTracks.remove(identifier);
}
}
@@ -553,7 +583,8 @@
return;
#endif
- m_player->addTextTrack(addResult.iterator->value);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->addTextTrack(addResult.iterator->value);
}
void MediaPlayerPrivateRemote::removeRemoteTextTrack(TrackPrivateRemoteIdentifier identifier)
@@ -561,7 +592,8 @@
ASSERT(m_textTracks.contains(identifier));
if (auto* track = m_textTracks.get(identifier)) {
- m_player->removeTextTrack(*track);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->removeTextTrack(*track);
m_textTracks.remove(identifier);
}
}
@@ -671,7 +703,8 @@
return;
#endif
- m_player->addVideoTrack(addResult.iterator->value);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->addVideoTrack(addResult.iterator->value);
}
void MediaPlayerPrivateRemote::removeRemoteVideoTrack(TrackPrivateRemoteIdentifier identifier)
@@ -679,7 +712,8 @@
ASSERT(m_videoTracks.contains(identifier));
if (auto* track = m_videoTracks.get(identifier)) {
- m_player->removeVideoTrack(*track);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->removeVideoTrack(*track);
m_videoTracks.remove(identifier);
}
}
@@ -701,8 +735,12 @@
if (!weakThis)
return;
+ auto player = makeRefPtr(m_player.get());
+ if (!player)
+ return;
+
m_configuration = WTFMove(configuration);
- m_player->mediaEngineUpdated();
+ player->mediaEngineUpdated();
}, m_id);
m_mediaSourcePrivate = MediaSourcePrivateRemote::create(m_manager.gpuProcessConnection(), identifier, m_manager.typeCache(m_remoteEngineIdentifier), *this, client);
@@ -713,8 +751,12 @@
if (!weakThis)
return;
+ auto player = makeRefPtr(m_player.get());
+ if (!player)
+ return;
+
m_cachedState.networkState = MediaPlayer::NetworkState::FormatError;
- m_player->networkStateChanged();
+ player->networkStateChanged();
});
}
#endif
@@ -726,8 +768,12 @@
if (!weakThis)
return;
+ auto player = makeRefPtr(m_player.get());
+ if (!player)
+ return;
+
m_cachedState.networkState = MediaPlayer::NetworkState::FormatError;
- m_player->networkStateChanged();
+ player->networkStateChanged();
});
}
#endif
@@ -947,7 +993,8 @@
void MediaPlayerPrivateRemote::currentPlaybackTargetIsWirelessChanged(bool isCurrentPlaybackTargetWireless)
{
m_isCurrentPlaybackTargetWireless = isCurrentPlaybackTargetWireless;
- m_player->currentPlaybackTargetIsWirelessChanged(isCurrentPlaybackTargetWireless);
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->currentPlaybackTargetIsWirelessChanged(isCurrentPlaybackTargetWireless);
}
bool MediaPlayerPrivateRemote::isCurrentPlaybackTargetWireless() const
@@ -1080,7 +1127,8 @@
void MediaPlayerPrivateRemote::mediaPlayerKeyNeeded(IPC::DataReference&& message)
{
- m_player->keyNeeded(Uint8Array::create(message.data(), message.size()).ptr());
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->keyNeeded(Uint8Array::create(message.data(), message.size()).ptr());
}
#endif
@@ -1106,13 +1154,15 @@
void MediaPlayerPrivateRemote::waitingForKeyChanged(bool waitingForKey)
{
m_waitingForKey = waitingForKey;
- m_player->waitingForKeyChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->waitingForKeyChanged();
}
void MediaPlayerPrivateRemote::initializationDataEncountered(const String& initDataType, IPC::DataReference&& initData)
{
auto initDataBuffer = ArrayBuffer::create(initData.data(), initData.size());
- m_player->initializationDataEncountered(initDataType, WTFMove(initDataBuffer));
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->initializationDataEncountered(initDataType, WTFMove(initDataBuffer));
}
bool MediaPlayerPrivateRemote::waitingForKey() const
@@ -1286,18 +1336,21 @@
void MediaPlayerPrivateRemote::resourceNotSupported()
{
- m_player->resourceNotSupported();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->resourceNotSupported();
}
void MediaPlayerPrivateRemote::activeSourceBuffersChanged()
{
- m_player->activeSourceBuffersChanged();
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->activeSourceBuffersChanged();
}
#if PLATFORM(IOS_FAMILY)
void MediaPlayerPrivateRemote::getRawCookies(const URL& url, WebCore::MediaPlayerClient::GetRawCookiesCallback&& completionHandler) const
{
- m_player->getRawCookies(url, WTFMove(completionHandler));
+ if (auto player = makeRefPtr(m_player.get()); player)
+ player->getRawCookies(url, WTFMove(completionHandler));
}
#endif
Modified: trunk/Source/WebKit/WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm (278495 => 278496)
--- trunk/Source/WebKit/WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm 2021-06-04 20:24:37 UTC (rev 278495)
+++ trunk/Source/WebKit/WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm 2021-06-04 20:41:45 UTC (rev 278496)
@@ -45,7 +45,7 @@
: m_logger(player->mediaPlayerLogger())
, m_logIdentifier(player->mediaPlayerLogIdentifier())
#endif
- , m_player(player)
+ , m_player(makeWeakPtr(*player))
, m_mediaResourceLoader(*player->createResourceLoader())
, m_videoLayerManager(makeUniqueRef<VideoLayerManagerObjC>(logger(), logIdentifier()))
, m_manager(manager)