Modified: trunk/Source/WebCore/ChangeLog (188715 => 188716)
--- trunk/Source/WebCore/ChangeLog 2015-08-20 22:57:57 UTC (rev 188715)
+++ trunk/Source/WebCore/ChangeLog 2015-08-20 23:06:13 UTC (rev 188716)
@@ -1,3 +1,21 @@
+2015-08-20 Anders Carlsson <[email protected]>
+
+ Stop using cancelCallOnMainThread in MediaPlayerPrivateMediaFoundation
+ https://bugs.webkit.org/show_bug.cgi?id=148252
+
+ Reviewed by Tim Horton.
+
+ Replace cancelCallOnMainThread with WeakPtrs.
+
+ * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
+ (WebCore::MediaPlayerPrivateMediaFoundation::MediaPlayerPrivateMediaFoundation):
+ (WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
+ (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
+ (WebCore::MediaPlayerPrivateMediaFoundation::~MediaPlayerPrivateMediaFoundation):
+ (WebCore::MediaPlayerPrivateMediaFoundation::onCreatedMediaSourceCallback):
+ (WebCore::MediaPlayerPrivateMediaFoundation::onTopologySetCallback):
+ * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
+
2015-08-20 Beth Dakin <[email protected]>
WK1 can re-enter layout during FrameView destruction and crash
Modified: trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp (188715 => 188716)
--- trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp 2015-08-20 22:57:57 UTC (rev 188715)
+++ trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp 2015-08-20 23:06:13 UTC (rev 188716)
@@ -62,12 +62,7 @@
, m_hasVideo(false)
, m_hwndVideo(nullptr)
, m_readyState(MediaPlayer::HaveNothing)
- , m_mediaSession(nullptr)
- , m_sourceResolver(nullptr)
- , m_mediaSource(nullptr)
- , m_topology(nullptr)
- , m_sourcePD(nullptr)
- , m_videoDisplay(nullptr)
+ , m_weakPtrFactory(this)
{
createSession();
createVideoWindow();
@@ -78,8 +73,6 @@
notifyDeleted();
destroyVideoWindow();
endSession();
- cancelCallOnMainThread(onTopologySetCallback, this);
- cancelCallOnMainThread(onCreatedMediaSourceCallback, this);
}
void MediaPlayerPrivateMediaFoundation::registerMediaEngine(MediaEngineRegistrar registrar)
@@ -342,7 +335,12 @@
hr = asyncResult->GetStatus();
m_loadingProgress = SUCCEEDED(hr);
- callOnMainThread(onCreatedMediaSourceCallback, this);
+ auto weakPtr = m_weakFactory.createWeakPtr();
+ callOnMainThread([weakPtr] {
+ if (!weakPtr)
+ return;
+ weakPtr->onCreatedMediaSource();
+ });
return true;
}
@@ -367,7 +365,12 @@
switch (mediaEventType) {
case MESessionTopologySet:
- callOnMainThread(onTopologySetCallback, this);
+ auto weakPtr = m_weakFactory.createWeakPtr();
+ callOnMainThread([weakPtr] {
+ if (!weakPtr)
+ return;
+ weakPtr->onTopologySet();
+ });
break;
case MESessionClosed:
@@ -643,18 +646,6 @@
m_player->playbackStateChanged();
}
-void MediaPlayerPrivateMediaFoundation::onCreatedMediaSourceCallback(void* context)
-{
- MediaPlayerPrivateMediaFoundation* mediaPlayer = static_cast<MediaPlayerPrivateMediaFoundation*>(context);
- mediaPlayer->onCreatedMediaSource();
-}
-
-void MediaPlayerPrivateMediaFoundation::onTopologySetCallback(void* context)
-{
- MediaPlayerPrivateMediaFoundation* mediaPlayer = static_cast<MediaPlayerPrivateMediaFoundation*>(context);
- mediaPlayer->onTopologySet();
-}
-
MediaPlayerPrivateMediaFoundation::AsyncCallback::AsyncCallback(MediaPlayerPrivateMediaFoundation* mediaPlayer, bool event)
: m_refCount(0)
, m_mediaPlayer(mediaPlayer)
Modified: trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h (188715 => 188716)
--- trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h 2015-08-20 22:57:57 UTC (rev 188715)
+++ trunk/Source/WebCore/platform/graphics/win/MediaPlayerPrivateMediaFoundation.h 2015-08-20 23:06:13 UTC (rev 188716)
@@ -33,6 +33,7 @@
#include <wtf/Lock.h>
#include <wtf/ThreadingPrimitives.h>
+#include <wtf/WeakPtr.h>
namespace WebCore {
@@ -92,6 +93,7 @@
HashSet<MediaPlayerListener*> m_listeners;
Lock m_mutexListeners;
+ WeakPtrFactory<MediaPlayerPrivateMediaFoundation> m_weakPtrFactory;
COMPtr<IMFMediaSession> m_mediaSession;
COMPtr<IMFSourceResolver> m_sourceResolver;
COMPtr<IMFMediaSource> m_mediaSource;
@@ -111,8 +113,6 @@
void onCreatedMediaSource();
void onTopologySet();
- static void onCreatedMediaSourceCallback(void* context);
- static void onTopologySetCallback(void* context);
LPCWSTR registerVideoWindowClass();
void createVideoWindow();