Diff
Modified: trunk/Source/WebCore/ChangeLog (269950 => 269951)
--- trunk/Source/WebCore/ChangeLog 2020-11-18 10:55:25 UTC (rev 269950)
+++ trunk/Source/WebCore/ChangeLog 2020-11-18 11:15:20 UTC (rev 269951)
@@ -1,3 +1,23 @@
+2020-11-18 Philippe Normand <[email protected]>
+
+ REGRESSION(r269435): [Debug][GStreamer] Several tests are crashing
+ https://bugs.webkit.org/show_bug.cgi?id=218735
+ <rdar://problem/71469947>
+
+ Reviewed by Carlos Garcia Campos.
+
+ Cache the referrer value from the main thread before using it in the GStreamer secondary
+ thread.
+
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+ (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
+ (WebCore::MediaPlayerPrivateGStreamer::sourceSetup):
+ * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
+ * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
+ (webKitWebSrcMakeRequest):
+ (webKitWebSrcSetMediaPlayer):
+ * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h:
+
2020-11-18 Commit Queue <[email protected]>
Unreviewed, reverting r269940.
Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp (269950 => 269951)
--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 2020-11-18 10:55:25 UTC (rev 269950)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp 2020-11-18 11:15:20 UTC (rev 269951)
@@ -172,6 +172,7 @@
MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer(MediaPlayer* player)
: m_notifier(MainThreadNotifier<MainThreadNotification>::create())
, m_player(player)
+ , m_referrer(player->referrer())
, m_cachedPosition(MediaTime::invalidTime())
, m_cachedDuration(MediaTime::invalidTime())
, m_seekTime(MediaTime::invalidTime())
@@ -911,7 +912,7 @@
m_source = sourceElement;
if (WEBKIT_IS_WEB_SRC(m_source.get())) {
- webKitWebSrcSetMediaPlayer(WEBKIT_WEB_SRC_CAST(m_source.get()), m_player);
+ webKitWebSrcSetMediaPlayer(WEBKIT_WEB_SRC_CAST(m_source.get()), m_player, m_referrer);
g_signal_connect(GST_ELEMENT_PARENT(m_source.get()), "element-added", G_CALLBACK(uriDecodeBinElementAddedCallback), this);
#if ENABLE(MEDIA_STREAM)
} else if (WEBKIT_IS_MEDIA_STREAM_SRC(sourceElement)) {
Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h (269950 => 269951)
--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h 2020-11-18 10:55:25 UTC (rev 269950)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h 2020-11-18 11:15:20 UTC (rev 269951)
@@ -332,6 +332,7 @@
Ref<MainThreadNotifier<MainThreadNotification>> m_notifier;
MediaPlayer* m_player;
+ String m_referrer;
mutable MediaTime m_cachedPosition;
mutable MediaTime m_cachedDuration;
bool m_canFallBackToLastFinishedSeekPosition { false };
Modified: trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp (269950 => 269951)
--- trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp 2020-11-18 10:55:25 UTC (rev 269950)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp 2020-11-18 11:15:20 UTC (rev 269951)
@@ -133,6 +133,10 @@
// and the player HTTP referrer string.
WebCore::MediaPlayer* player;
+ // MediaPlayer referrer cached value. The corresponding method has to be called from the
+ // main thread, so the value needs to be cached before use in non-main thread.
+ String referrer;
+
// Properties used for GStreamer data-flow in create().
bool isFlushing { false };
Condition responseCondition; // Must be signaled after any updates on HTTP requests, and when flushing.
@@ -641,7 +645,7 @@
request.setAllowCookies(true);
request.setFirstPartyForCookies(url);
- request.setHTTPReferrer(members->player->referrer());
+ request.setHTTPReferrer(members->referrer);
if (priv->httpMethod.get())
request.setHTTPMethod(priv->httpMethod.get());
@@ -929,11 +933,12 @@
iface->set_uri = webKitWebSrcSetUri;
}
-void webKitWebSrcSetMediaPlayer(WebKitWebSrc* src, WebCore::MediaPlayer* player)
+void webKitWebSrcSetMediaPlayer(WebKitWebSrc* src, WebCore::MediaPlayer* player, const String& referrer)
{
ASSERT(player);
DataMutex<WebKitWebSrcPrivate::StreamingMembers>::LockedWrapper members(src->priv->dataMutex);
members->player = player;
+ members->referrer = referrer;
}
bool webKitSrcPassedCORSAccessCheck(WebKitWebSrc* src)
Modified: trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.h (269950 => 269951)
--- trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.h 2020-11-18 10:55:25 UTC (rev 269950)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.h 2020-11-18 11:15:20 UTC (rev 269951)
@@ -22,6 +22,7 @@
#include <gst/base/gstpushsrc.h>
#include <gst/gst.h>
+#include <wtf/Forward.h>
namespace WebCore {
class MediaPlayer;
@@ -52,7 +53,7 @@
};
GType webkit_web_src_get_type(void);
-void webKitWebSrcSetMediaPlayer(WebKitWebSrc*, WebCore::MediaPlayer*);
+void webKitWebSrcSetMediaPlayer(WebKitWebSrc*, WebCore::MediaPlayer*, const WTF::String&);
bool webKitSrcPassedCORSAccessCheck(WebKitWebSrc*);
bool webKitSrcWouldTaintOrigin(WebKitWebSrc*, const WebCore::SecurityOrigin&);