Title: [261532] branches/safari-609-branch

Diff

Modified: branches/safari-609-branch/LayoutTests/ChangeLog (261531 => 261532)


--- branches/safari-609-branch/LayoutTests/ChangeLog	2020-05-12 00:30:39 UTC (rev 261531)
+++ branches/safari-609-branch/LayoutTests/ChangeLog	2020-05-12 00:34:35 UTC (rev 261532)
@@ -1,3 +1,16 @@
+2020-05-11  Russell Epstein  <repst...@apple.com>
+
+        Apply patch. rdar://problem/62978903
+
+    2020-05-11  Youenn Fablet  <you...@apple.com>
+
+            MediaPlayerPrivateMediaStreamAVFObjC should unobserve the tracks from its audio and video track sets
+            https://bugs.webkit.org/show_bug.cgi?id=211444
+            <rdar://problem/62886221>
+
+            * fast/mediastream/MediaStream-removeTrack-while-playing-expected.txt: Added.
+            * fast/mediastream/MediaStream-removeTrack-while-playing.html: Added.
+
 2020-05-11  Alan Coon  <alanc...@apple.com>
 
         Cherry-pick r260979. rdar://problem/62978869

Added: branches/safari-609-branch/LayoutTests/fast/mediastream/MediaStream-removeTrack-while-playing-expected.txt (0 => 261532)


--- branches/safari-609-branch/LayoutTests/fast/mediastream/MediaStream-removeTrack-while-playing-expected.txt	                        (rev 0)
+++ branches/safari-609-branch/LayoutTests/fast/mediastream/MediaStream-removeTrack-while-playing-expected.txt	2020-05-12 00:34:35 UTC (rev 261532)
@@ -0,0 +1,4 @@
+
+
+PASS removeTrack while playing 
+

Added: branches/safari-609-branch/LayoutTests/fast/mediastream/MediaStream-removeTrack-while-playing.html (0 => 261532)


--- branches/safari-609-branch/LayoutTests/fast/mediastream/MediaStream-removeTrack-while-playing.html	                        (rev 0)
+++ branches/safari-609-branch/LayoutTests/fast/mediastream/MediaStream-removeTrack-while-playing.html	2020-05-12 00:34:35 UTC (rev 261532)
@@ -0,0 +1,30 @@
+<!doctype html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>Testing addTrack/removeTrack while playing</title>
+        <script src=""
+        <script src=""
+    </head>
+    <body>
+        <video id="video" autoplay playsInline></video>
+        <script>
+promise_test(async (test) => {
+    const localStream = await navigator.mediaDevices.getUserMedia({audio: true, video: true});
+    const audioTrack = localStream.getAudioTracks()[0];
+    const videoTrack = localStream.getVideoTracks()[0];
+
+    video.srcObject = localStream;
+    await video.play();
+    localStream._onremovetrack_ = () => { video.srcObject = null; };
+
+    if (window.internals) {
+        internals.removeMediaStreamTrackAndNotify(localStream, videoTrack);
+        internals.removeMediaStreamTrackAndNotify(localStream, audioTrack);
+    }
+    audioTrack.stop();
+    videoTrack.stop();
+}, "removeTrack while playing");
+        </script>
+    </body>
+</html>

Modified: branches/safari-609-branch/Source/WebCore/ChangeLog (261531 => 261532)


--- branches/safari-609-branch/Source/WebCore/ChangeLog	2020-05-12 00:30:39 UTC (rev 261531)
+++ branches/safari-609-branch/Source/WebCore/ChangeLog	2020-05-12 00:34:35 UTC (rev 261532)
@@ -1,3 +1,24 @@
+2020-05-11  Russell Epstein  <repst...@apple.com>
+
+        Apply patch. rdar://problem/62978903
+
+    2020-05-11  Youenn Fablet  <you...@apple.com>
+
+            MediaPlayerPrivateMediaStreamAVFObjC should unobserve the tracks from its audio and video track sets
+            https://bugs.webkit.org/show_bug.cgi?id=211444
+            <rdar://problem/62886221>
+
+            Test: fast/mediastream/MediaStream-removeTrack-while-playing.html
+
+            * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
+            (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC):
+            We keep maps of audio and video tracks we are observing.
+            Use these two maps to properly unobserve all tracks at destruction time.
+            While this is not strictly needed since we are using weak pointers, this helps keeping the code healthy.
+            * platform/mediastream/MediaStreamTrackPrivate.cpp:
+            (WebCore::MediaStreamTrackPrivate::forEachObserver):
+            Add a debug ASSERT so that we ensure add/remove observers is done properly.
+
 2020-05-11  Alan Coon  <alanc...@apple.com>
 
         Cherry-pick r258991. rdar://problem/62978907

Modified: branches/safari-609-branch/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm (261531 => 261532)


--- branches/safari-609-branch/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm	2020-05-12 00:30:39 UTC (rev 261531)
+++ branches/safari-609-branch/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm	2020-05-12 00:34:35 UTC (rev 261532)
@@ -202,8 +202,10 @@
     if (m_mediaStreamPrivate) {
         m_mediaStreamPrivate->removeObserver(*this);
 
-        for (auto& track : m_mediaStreamPrivate->tracks())
-            track->removeObserver(*this);
+        for (auto& track : m_audioTrackMap.values())
+            track->streamTrack().removeObserver(*this);
+        for (auto& track : m_videoTrackMap.values())
+            track->streamTrack().removeObserver(*this);
     }
 
     destroyLayers();
@@ -912,8 +914,9 @@
     }
 }
 
-void MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged(MediaStreamTrackPrivate&)
+void MediaPlayerPrivateMediaStreamAVFObjC::readyStateChanged(MediaStreamTrackPrivate& privateStream)
 {
+    ASSERT(m_mediaStreamPrivate);
     scheduleDeferredTask([this] {
         updateReadyState();
     });

Modified: branches/safari-609-branch/Source/WebCore/platform/mediastream/MediaStreamPrivate.h (261531 => 261532)


--- branches/safari-609-branch/Source/WebCore/platform/mediastream/MediaStreamPrivate.h	2020-05-12 00:30:39 UTC (rev 261531)
+++ branches/safari-609-branch/Source/WebCore/platform/mediastream/MediaStreamPrivate.h	2020-05-12 00:34:35 UTC (rev 261532)
@@ -88,7 +88,7 @@
     void updateActiveState(NotifyClientOption);
 
     void addTrack(RefPtr<MediaStreamTrackPrivate>&&, NotifyClientOption = NotifyClientOption::Notify);
-    void removeTrack(MediaStreamTrackPrivate&, NotifyClientOption = NotifyClientOption::Notify);
+    WEBCORE_EXPORT void removeTrack(MediaStreamTrackPrivate&, NotifyClientOption = NotifyClientOption::Notify);
 
     void startProducingData();
     void stopProducingData();

Modified: branches/safari-609-branch/Source/WebCore/testing/Internals.cpp (261531 => 261532)


--- branches/safari-609-branch/Source/WebCore/testing/Internals.cpp	2020-05-12 00:30:39 UTC (rev 261531)
+++ branches/safari-609-branch/Source/WebCore/testing/Internals.cpp	2020-05-12 00:34:35 UTC (rev 261532)
@@ -4918,6 +4918,11 @@
     track.source().setMuted(muted);
 }
 
+void Internals::removeMediaStreamTrackAndNotify(MediaStream& stream, MediaStreamTrack& track)
+{
+    stream.privateStream().removeTrack(track.privateTrack());
+}
+
 void Internals::removeMediaStreamTrack(MediaStream& stream, MediaStreamTrack& track)
 {
     stream.internalRemoveTrack(track.id(), MediaStream::StreamModifier::Platform);

Modified: branches/safari-609-branch/Source/WebCore/testing/Internals.h (261531 => 261532)


--- branches/safari-609-branch/Source/WebCore/testing/Internals.h	2020-05-12 00:30:39 UTC (rev 261531)
+++ branches/safari-609-branch/Source/WebCore/testing/Internals.h	2020-05-12 00:34:35 UTC (rev 261532)
@@ -746,6 +746,7 @@
     void delayMediaStreamTrackSamples(MediaStreamTrack&, float);
     void setMediaStreamTrackMuted(MediaStreamTrack&, bool);
     void removeMediaStreamTrack(MediaStream&, MediaStreamTrack&);
+    void removeMediaStreamTrackAndNotify(MediaStream&, MediaStreamTrack&);
     void simulateMediaStreamTrackCaptureSourceFailure(MediaStreamTrack&);
     void setMediaStreamTrackIdentifier(MediaStreamTrack&, String&& id);
     void setMediaStreamSourceInterrupted(MediaStreamTrack&, bool);

Modified: branches/safari-609-branch/Source/WebCore/testing/Internals.idl (261531 => 261532)


--- branches/safari-609-branch/Source/WebCore/testing/Internals.idl	2020-05-12 00:30:39 UTC (rev 261531)
+++ branches/safari-609-branch/Source/WebCore/testing/Internals.idl	2020-05-12 00:34:35 UTC (rev 261532)
@@ -723,6 +723,7 @@
     [Conditional=MEDIA_STREAM] void delayMediaStreamTrackSamples(MediaStreamTrack track, float delay);
     [Conditional=MEDIA_STREAM] void setMediaStreamTrackMuted(MediaStreamTrack track, boolean muted);
     [Conditional=MEDIA_STREAM] void removeMediaStreamTrack(MediaStream stream, MediaStreamTrack track);
+    [Conditional=MEDIA_STREAM] void removeMediaStreamTrackAndNotify(MediaStream stream, MediaStreamTrack track);
     [Conditional=MEDIA_STREAM] void simulateMediaStreamTrackCaptureSourceFailure(MediaStreamTrack track);
     [Conditional=MEDIA_STREAM] void setMediaStreamTrackIdentifier(MediaStreamTrack track, DOMString identifier);
     [Conditional=MEDIA_STREAM] void setMediaStreamSourceInterrupted(MediaStreamTrack track, boolean interrupted);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to