Diff
Modified: trunk/Source/WebCore/ChangeLog (239518 => 239519)
--- trunk/Source/WebCore/ChangeLog 2018-12-21 22:39:32 UTC (rev 239518)
+++ trunk/Source/WebCore/ChangeLog 2018-12-21 23:00:24 UTC (rev 239519)
@@ -1,3 +1,22 @@
+2018-12-21 Jer Noble <jer.no...@apple.com>
+
+ Convert raw CDMSessionMediaSourceAVFObjC pointer in MediaPlayerPrivateMediaSourceAVFObjC
+ https://bugs.webkit.org/show_bug.cgi?id=192985
+ <rdar://problem/46750743>
+
+ Reviewed by Eric Carlson.
+
+ Make m_session a RefPtr; drive-by fix: make m_mediaElement in WebKitMediaKeys a WeakPtr.
+
+ * Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp:
+ (WebCore::WebKitMediaKeys::setMediaElement):
+ * Modules/encryptedmedia/legacy/WebKitMediaKeys.h:
+ * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
+ (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
+ (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession):
+
2018-12-21 Justin Michaud <justin_mich...@apple.com>
CSS variables don't work for colors in "border" property
Modified: trunk/Source/WebCore/Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp (239518 => 239519)
--- trunk/Source/WebCore/Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp 2018-12-21 22:39:32 UTC (rev 239518)
+++ trunk/Source/WebCore/Modules/encryptedmedia/legacy/WebKitMediaKeys.cpp 2018-12-21 23:00:24 UTC (rev 239519)
@@ -131,7 +131,7 @@
if (m_mediaElement && m_mediaElement->player())
m_mediaElement->player()->setCDMSession(nullptr);
- m_mediaElement = element;
+ m_mediaElement = makeWeakPtr(element);
if (m_mediaElement && m_mediaElement->player() && !m_sessions.isEmpty())
m_mediaElement->player()->setCDMSession(m_sessions.last()->session());
Modified: trunk/Source/WebCore/Modules/encryptedmedia/legacy/WebKitMediaKeys.h (239518 => 239519)
--- trunk/Source/WebCore/Modules/encryptedmedia/legacy/WebKitMediaKeys.h 2018-12-21 22:39:32 UTC (rev 239518)
+++ trunk/Source/WebCore/Modules/encryptedmedia/legacy/WebKitMediaKeys.h 2018-12-21 23:00:24 UTC (rev 239519)
@@ -31,6 +31,7 @@
#include "LegacyCDM.h"
#include <_javascript_Core/Uint8Array.h>
#include <wtf/Vector.h>
+#include <wtf/WeakPtr.h>
namespace WebCore {
@@ -60,7 +61,7 @@
WebKitMediaKeys(const String& keySystem, std::unique_ptr<LegacyCDM>&&);
Vector<Ref<WebKitMediaKeySession>> m_sessions;
- HTMLMediaElement* m_mediaElement { nullptr };
+ WeakPtr<HTMLMediaElement> m_mediaElement;
String m_keySystem;
std::unique_ptr<LegacyCDM> m_cdm;
};
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h (239518 => 239519)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h 2018-12-21 22:39:32 UTC (rev 239518)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h 2018-12-21 23:00:24 UTC (rev 239519)
@@ -28,6 +28,7 @@
#include "LegacyCDMSession.h"
#include "SourceBufferPrivateAVFObjC.h"
+#include <wtf/RefCounted.h>
#include <wtf/RetainPtr.h>
#include <wtf/WeakPtr.h>
@@ -40,7 +41,7 @@
class CDMPrivateMediaSourceAVFObjC;
-class CDMSessionMediaSourceAVFObjC : public LegacyCDMSession, public SourceBufferPrivateAVFObjCErrorClient {
+class CDMSessionMediaSourceAVFObjC : public LegacyCDMSession, public SourceBufferPrivateAVFObjCErrorClient, public RefCounted<CDMSessionMediaSourceAVFObjC> {
public:
CDMSessionMediaSourceAVFObjC(CDMPrivateMediaSourceAVFObjC&, LegacyCDMSessionClient*);
virtual ~CDMSessionMediaSourceAVFObjC();
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h (239518 => 239519)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h 2018-12-21 22:39:32 UTC (rev 239518)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h 2018-12-21 23:00:24 UTC (rev 239519)
@@ -113,7 +113,7 @@
bool hasStreamSession() { return m_streamSession; }
AVStreamSession *streamSession();
void setCDMSession(LegacyCDMSession*) override;
- CDMSessionMediaSourceAVFObjC* cdmSession() const { return m_session; }
+ CDMSessionMediaSourceAVFObjC* cdmSession() const { return m_session.get(); }
#endif
#if ENABLE(ENCRYPTED_MEDIA)
@@ -281,7 +281,9 @@
RefPtr<WebCoreDecompressionSession> m_decompressionSession;
Deque<RetainPtr<id>> m_sizeChangeObservers;
Timer m_seekTimer;
- CDMSessionMediaSourceAVFObjC* m_session;
+#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
+ RefPtr<CDMSessionMediaSourceAVFObjC> m_session;
+#endif
MediaPlayer::NetworkState m_networkState;
MediaPlayer::ReadyState m_readyState;
bool m_readyStateIsWaitingForAvailableFrame { false };
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm (239518 => 239519)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm 2018-12-21 22:39:32 UTC (rev 239518)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm 2018-12-21 23:00:24 UTC (rev 239519)
@@ -104,7 +104,6 @@
: m_player(player)
, m_synchronizer(adoptNS([allocAVSampleBufferRenderSynchronizerInstance() init]))
, m_seekTimer(*this, &MediaPlayerPrivateMediaSourceAVFObjC::seekInternal)
- , m_session(nullptr)
, m_networkState(MediaPlayer::Empty)
, m_readyState(MediaPlayer::HaveNothing)
, m_rate(1)
@@ -914,10 +913,10 @@
m_session = toCDMSessionMediaSourceAVFObjC(session);
- if (CDMSessionAVStreamSession* cdmStreamSession = toCDMSessionAVStreamSession(m_session))
+ if (CDMSessionAVStreamSession* cdmStreamSession = toCDMSessionAVStreamSession(m_session.get()))
cdmStreamSession->setStreamSession(streamSession());
for (auto& sourceBuffer : m_mediaSourcePrivate->sourceBuffers())
- sourceBuffer->setCDMSession(m_session);
+ sourceBuffer->setCDMSession(m_session.get());
}
void MediaPlayerPrivateMediaSourceAVFObjC::keyNeeded(Uint8Array* initData)