Title: [235682] trunk/Source/WebCore
Revision
235682
Author
[email protected]
Date
2018-09-05 11:54:54 -0700 (Wed, 05 Sep 2018)

Log Message

Move replaceTrack logic to LibWebRTCPeerConnectionBackend
https://bugs.webkit.org/show_bug.cgi?id=189281

Reviewed by Eric Carlson.

Move replaceTrack handling code from RTCPeerConnection to LibWebRTCPeerConnectionBackend.
This makes the logic easier to understand.
Future refactoring will further try to put more handling in RTCRtpSenderBackend.
No change of behavior.

* Modules/mediastream/RTCPeerConnection.cpp:
* Modules/mediastream/RTCPeerConnection.h:
* Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
(WebCore::tryUpdatingTrackSource):
(WebCore::LibWebRTCPeerConnectionBackend::replaceTrack):
(WebCore::LibWebRTCPeerConnectionBackend::enqueueReplaceTrackTask):
* Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
* Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
(WebCore::LibWebRTCRtpSenderBackend::replaceTrack):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (235681 => 235682)


--- trunk/Source/WebCore/ChangeLog	2018-09-05 18:52:34 UTC (rev 235681)
+++ trunk/Source/WebCore/ChangeLog	2018-09-05 18:54:54 UTC (rev 235682)
@@ -1,3 +1,25 @@
+2018-09-05  Youenn Fablet  <[email protected]>
+
+        Move replaceTrack logic to LibWebRTCPeerConnectionBackend
+        https://bugs.webkit.org/show_bug.cgi?id=189281
+
+        Reviewed by Eric Carlson.
+
+        Move replaceTrack handling code from RTCPeerConnection to LibWebRTCPeerConnectionBackend.
+        This makes the logic easier to understand.
+        Future refactoring will further try to put more handling in RTCRtpSenderBackend.
+        No change of behavior.
+
+        * Modules/mediastream/RTCPeerConnection.cpp:
+        * Modules/mediastream/RTCPeerConnection.h:
+        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
+        (WebCore::tryUpdatingTrackSource):
+        (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack):
+        (WebCore::LibWebRTCPeerConnectionBackend::enqueueReplaceTrackTask):
+        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
+        (WebCore::LibWebRTCRtpSenderBackend::replaceTrack):
+
 2018-09-05  Zalan Bujtas  <[email protected]>
 
         [LFC] LayoutContext::displayBoxForLayoutBox() should return a Display::Box&

Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp (235681 => 235682)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp	2018-09-05 18:52:34 UTC (rev 235681)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp	2018-09-05 18:54:54 UTC (rev 235682)
@@ -530,26 +530,6 @@
     dispatchEvent(event);
 }
 
-void RTCPeerConnection::enqueueReplaceTrackTask(RTCRtpSender& sender, RefPtr<MediaStreamTrack>&& withTrack, DOMPromiseDeferred<void>&& promise)
-{
-    scriptExecutionContext()->postTask([protectedThis = makeRef(*this), protectedSender = makeRef(sender), promise = WTFMove(promise), withTrack = WTFMove(withTrack)](ScriptExecutionContext&) mutable {
-        if (protectedThis->isClosed())
-            return;
-
-        if (!withTrack) {
-            protectedSender->setTrackToNull();
-            promise.resolve();
-            return;
-        }
-
-        bool hasTrack = protectedSender->track();
-        protectedSender->setTrack(withTrack.releaseNonNull());
-        if (!hasTrack)
-            protectedThis->m_backend->addTrack(protectedSender.ptr(), *protectedSender->track(), { });
-        promise.resolve();
-    });
-}
-
 void RTCPeerConnection::dispatchEvent(Event& event)
 {
     DEBUG_LOG(LOGIDENTIFIER, "dispatching '", event.type(), "'");

Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h (235681 => 235682)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h	2018-09-05 18:52:34 UTC (rev 235681)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h	2018-09-05 18:54:54 UTC (rev 235682)
@@ -150,8 +150,6 @@
     void disableICECandidateFiltering() { m_backend->disableICECandidateFiltering(); }
     void enableICECandidateFiltering() { m_backend->enableICECandidateFiltering(); }
 
-    void enqueueReplaceTrackTask(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&);
-
     void clearController() { m_controller = nullptr; }
 
     // ActiveDOMObject.

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp (235681 => 235682)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-09-05 18:52:34 UTC (rev 235681)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp	2018-09-05 18:54:54 UTC (rev 235682)
@@ -408,47 +408,69 @@
     return source->setSource(track->privateTrack());
 }
 
+template<typename Source>
+static inline bool tryUpdatingTrackSource(MediaStreamTrack& currentTrack, MediaStreamTrack* newTrack, const Vector<Source>& sources)
+{
+    for (auto& source : sources) {
+        if (&source->source() == &currentTrack.privateTrack()) {
+            if (!updateTrackSource(source, newTrack))
+                return false;
+            return true;
+        }
+    }
+    return false;
+}
+
 void LibWebRTCPeerConnectionBackend::replaceTrack(RTCRtpSender& sender, RefPtr<MediaStreamTrack>&& track, DOMPromiseDeferred<void>&& promise)
 {
-    ASSERT(sender.track());
-
     auto* currentTrack = sender.track();
 
-    ASSERT(!track || currentTrack->source().type() == track->source().type());
-    switch (currentTrack->source().type()) {
-    case RealtimeMediaSource::Type::None:
-        ASSERT_NOT_REACHED();
-        promise.reject(InvalidModificationError);
-        break;
-    case RealtimeMediaSource::Type::Audio: {
-        for (auto& audioSource : m_audioSources) {
-            if (&audioSource->source() == &currentTrack->privateTrack()) {
-                if (!updateTrackSource(audioSource, track.get())) {
-                    promise.reject(InvalidModificationError);
-                    return;
-                }
-                connection().enqueueReplaceTrackTask(sender, WTFMove(track), WTFMove(promise));
+    ASSERT(!track || !currentTrack || currentTrack->source().type() == track->source().type());
+    if (currentTrack) {
+        switch (currentTrack->source().type()) {
+        case RealtimeMediaSource::Type::None:
+            ASSERT_NOT_REACHED();
+            promise.reject(InvalidModificationError);
+            break;
+        case RealtimeMediaSource::Type::Audio:
+            if (!tryUpdatingTrackSource(*currentTrack, track.get(), m_audioSources)) {
+                promise.reject(InvalidModificationError);
                 return;
             }
+            break;
+        case RealtimeMediaSource::Type::Video:
+            if (!tryUpdatingTrackSource(*currentTrack, track.get(), m_videoSources)) {
+                promise.reject(InvalidModificationError);
+                return;
+            }
+            break;
         }
-        promise.reject(InvalidModificationError);
-        break;
     }
-    case RealtimeMediaSource::Type::Video: {
-        for (auto& videoSource : m_videoSources) {
-            if (&videoSource->source() == &currentTrack->privateTrack()) {
-                if (!updateTrackSource(videoSource, track.get())) {
-                    promise.reject(InvalidModificationError);
-                    return;
-                }
-                connection().enqueueReplaceTrackTask(sender, WTFMove(track), WTFMove(promise));
+    enqueueReplaceTrackTask(sender, WTFMove(track), WTFMove(promise));
+}
+
+void LibWebRTCPeerConnectionBackend::enqueueReplaceTrackTask(RTCRtpSender& sender, RefPtr<MediaStreamTrack>&& withTrack, DOMPromiseDeferred<void>&& promise)
+{
+    m_peerConnection.scriptExecutionContext()->postTask([protectedConnection = makeRef(m_peerConnection), protectedSender = makeRef(sender), promise = WTFMove(promise), withTrack = WTFMove(withTrack), this](ScriptExecutionContext&) mutable {
+        if (protectedConnection->isClosed())
+            return;
+
+        if (!withTrack) {
+            protectedSender->setTrackToNull();
+            promise.resolve();
+            return;
+        }
+
+        bool hasTrack = protectedSender->track();
+        protectedSender->setTrack(withTrack.releaseNonNull());
+        if (!hasTrack) {
+            if (!m_endpoint->addTrack(backendFromRTPSender(protectedSender), *protectedSender->track(), { })) {
+                promise.reject(Exception { TypeError, "Unable to add track"_s });
                 return;
             }
         }
-        promise.reject(InvalidModificationError);
-        break;
-    }
-    }
+        promise.resolve();
+    });
 }
 
 void LibWebRTCPeerConnectionBackend::applyRotationForOutgoingVideoSources()

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h (235681 => 235682)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h	2018-09-05 18:52:34 UTC (rev 235681)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h	2018-09-05 18:54:54 UTC (rev 235682)
@@ -112,6 +112,8 @@
 
     Ref<RTCRtpTransceiver> completeAddTransceiver(Ref<RTCRtpSender>&&, const RTCRtpTransceiverInit&, const String& trackId, const String& trackKind);
 
+    void enqueueReplaceTrackTask(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&);
+
     Ref<LibWebRTCMediaEndpoint> m_endpoint;
     bool m_isLocalDescriptionSet { false };
     bool m_isRemoteDescriptionSet { false };

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp (235681 => 235682)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp	2018-09-05 18:52:34 UTC (rev 235681)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp	2018-09-05 18:54:54 UTC (rev 235682)
@@ -41,11 +41,6 @@
         return;
     }
 
-    if (!sender.track() && track) {
-        m_peerConnectionBackend->connection().enqueueReplaceTrackTask(sender, track.releaseNonNull(), WTFMove(promise));
-        return;
-    }
-
     m_peerConnectionBackend->replaceTrack(sender, WTFMove(track), WTFMove(promise));
 }
 

Modified: trunk/Source/WebCore/css/FontFaceSet.h (235681 => 235682)


--- trunk/Source/WebCore/css/FontFaceSet.h	2018-09-05 18:52:34 UTC (rev 235681)
+++ trunk/Source/WebCore/css/FontFaceSet.h	2018-09-05 18:54:54 UTC (rev 235682)
@@ -35,7 +35,7 @@
 
 class DOMException;
 
-class FontFaceSet final : public RefCounted<FontFaceSet>, private CSSFontFaceSetClient, public EventTargetWithInlineData, private ActiveDOMObject {
+class FontFaceSet final : public RefCounted<FontFaceSet>, private CSSFontFaceSetClient, public EventTargetWithInlineData, private  ActiveDOMObject {
 public:
     static Ref<FontFaceSet> create(Document&, const Vector<RefPtr<FontFace>>& initialFaces);
     static Ref<FontFaceSet> create(Document&, CSSFontFaceSet& backing);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to