Title: [269951] trunk/Source/WebCore
Revision
269951
Author
[email protected]
Date
2020-11-18 03:15:20 -0800 (Wed, 18 Nov 2020)

Log Message

REGRESSION(r269435): [Debug][GStreamer] Several tests are crashing
https://bugs.webkit.org/show_bug.cgi?id=218735
<rdar://problem/71469947>

Patch by Philippe Normand <[email protected]> on 2020-11-18
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:

Modified Paths

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&);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to