Changeset 239238 in webkit


Ignore:
Timestamp:
Dec 14, 2018 3:52:40 PM (5 years ago)
Author:
youenn@apple.com
Message:

getSenders/getReceivers() should not return closed transceiver senders/receivers
https://bugs.webkit.org/show_bug.cgi?id=192706

Reviewed by Eric Carlson.

LayoutTests/imported/w3c:

  • web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html:
  • web-platform-tests/webrtc/RTCRtpTransceiver.https.html:

Source/WebCore:

Updated as per https://github.com/w3c/webrtc-pc/commit/85284b76baebf9e149d194e692be16a21768a91a
This forces us to compute the sender/receiver list at getter call time.
Updated the internal call sites of senders to use the list of transceivers instead.

Covered by updated WPT tests.

  • Modules/mediastream/RTCPeerConnection.cpp:

(WebCore::RTCPeerConnection::addTrack):
(WebCore::RTCPeerConnection::getSenders const):
(WebCore::RTCPeerConnection::getReceivers const):

  • Modules/mediastream/RTCPeerConnection.h:
  • Modules/mediastream/RTCRtpTransceiver.cpp:

(WebCore::RTCRtpTransceiver::stopped const):
(WebCore::RtpTransceiverSet::append):
(WebCore::RtpTransceiverSet::senders const):
(WebCore::RtpTransceiverSet::receivers const):

  • Modules/mediastream/RTCRtpTransceiver.h:

(WebCore::RtpTransceiverSet::senders const): Deleted.
(WebCore::RtpTransceiverSet::receivers const): Deleted.

  • Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:

(WebCore::findExistingSender):
(WebCore::LibWebRTCPeerConnectionBackend::addTrack):

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r239192 r239238  
     12018-12-14  Youenn Fablet  <youenn@apple.com>
     2
     3        getSenders/getReceivers() should not return closed transceiver senders/receivers
     4        https://bugs.webkit.org/show_bug.cgi?id=192706
     5
     6        Reviewed by Eric Carlson.
     7
     8        * web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html:
     9        * web-platform-tests/webrtc/RTCRtpTransceiver.https.html:
     10
    1112018-12-13  Youenn Fablet  <youenn@apple.com>
    212
  • trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html

    r239192 r239238  
    258258
    259259    assert_true(pc1.getTransceivers()[0].stopped, 'Transceiver is stopped');
     260    assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver');
     261    assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver');
    260262  }, 'setRemoteDescription should stop the transceiver if its corresponding m section is rejected');
    261263
  • trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpTransceiver.https.html

    r238136 r239238  
    11561156    });
    11571157    stoppedTransceiver.stop();
     1158    assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver');
     1159    assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver');
    11581160
    11591161    await onended;
  • trunk/Source/WebCore/ChangeLog

    r239237 r239238  
     12018-12-14  Youenn Fablet  <youenn@apple.com>
     2
     3        getSenders/getReceivers() should not return closed transceiver senders/receivers
     4        https://bugs.webkit.org/show_bug.cgi?id=192706
     5
     6        Reviewed by Eric Carlson.
     7
     8        Updated as per https://github.com/w3c/webrtc-pc/commit/85284b76baebf9e149d194e692be16a21768a91a
     9        This forces us to compute the sender/receiver list at getter call time.
     10        Updated the internal call sites of senders to use the list of transceivers instead.
     11
     12        Covered by updated WPT tests.
     13
     14        * Modules/mediastream/RTCPeerConnection.cpp:
     15        (WebCore::RTCPeerConnection::addTrack):
     16        (WebCore::RTCPeerConnection::getSenders const):
     17        (WebCore::RTCPeerConnection::getReceivers const):
     18        * Modules/mediastream/RTCPeerConnection.h:
     19        * Modules/mediastream/RTCRtpTransceiver.cpp:
     20        (WebCore::RTCRtpTransceiver::stopped const):
     21        (WebCore::RtpTransceiverSet::append):
     22        (WebCore::RtpTransceiverSet::senders const):
     23        (WebCore::RtpTransceiverSet::receivers const):
     24        * Modules/mediastream/RTCRtpTransceiver.h:
     25        (WebCore::RtpTransceiverSet::senders const): Deleted.
     26        (WebCore::RtpTransceiverSet::receivers const): Deleted.
     27        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
     28        (WebCore::findExistingSender):
     29        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
     30
    1312018-12-14  David Kilzer  <ddkilzer@apple.com>
    232
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp

    r238232 r239238  
    115115        return Exception { InvalidStateError };
    116116
    117     for (RTCRtpSender& sender : m_transceiverSet->senders()) {
    118         if (sender.trackId() == track->id())
     117    for (auto& transceiver : m_transceiverSet->list()) {
     118        if (transceiver->sender().trackId() == track->id())
    119119            return Exception { InvalidAccessError };
    120120    }
     
    642642}
    643643
    644 const Vector<std::reference_wrapper<RTCRtpSender>>& RTCPeerConnection::getSenders() const
     644Vector<std::reference_wrapper<RTCRtpSender>> RTCPeerConnection::getSenders() const
    645645{
    646646    m_backend->collectTransceivers();
     
    648648}
    649649
    650 const Vector<std::reference_wrapper<RTCRtpReceiver>>& RTCPeerConnection::getReceivers() const
     650Vector<std::reference_wrapper<RTCRtpReceiver>> RTCPeerConnection::getReceivers() const
    651651{
    652652    m_backend->collectTransceivers();
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h

    r238232 r239238  
    129129
    130130    // 5.1 RTCPeerConnection extensions
    131     const Vector<std::reference_wrapper<RTCRtpSender>>& getSenders() const;
    132     const Vector<std::reference_wrapper<RTCRtpReceiver>>& getReceivers() const;
     131    Vector<std::reference_wrapper<RTCRtpSender>> getSenders() const;
     132    Vector<std::reference_wrapper<RTCRtpReceiver>> getReceivers() const;
    133133    const Vector<RefPtr<RTCRtpTransceiver>>& getTransceivers() const;
    134134
    135     const Vector<std::reference_wrapper<RTCRtpSender>>& currentSenders() const { return m_transceiverSet->senders(); }
    136135    const Vector<RefPtr<RTCRtpTransceiver>>& currentTransceivers() const { return m_transceiverSet->list(); }
    137136
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp

    r239192 r239238  
    107107}
    108108
    109 void RtpTransceiverSet::append(Ref<RTCRtpTransceiver>&& transceiver)
    110 {
    111     m_senders.append(transceiver->sender());
    112     m_receivers.append(transceiver->receiver());
    113 
    114     m_transceivers.append(WTFMove(transceiver));
    115 }
    116 
    117109bool RTCRtpTransceiver::stopped() const
    118110{
     
    122114}
    123115
     116void RtpTransceiverSet::append(Ref<RTCRtpTransceiver>&& transceiver)
     117{
     118    m_transceivers.append(WTFMove(transceiver));
     119}
     120
     121Vector<std::reference_wrapper<RTCRtpSender>> RtpTransceiverSet::senders() const
     122{
     123    Vector<std::reference_wrapper<RTCRtpSender>> senders;
     124    for (auto& transceiver : m_transceivers) {
     125        if (transceiver->stopped())
     126            continue;
     127        senders.append(transceiver->sender());
     128    }
     129    return senders;
     130}
     131
     132Vector<std::reference_wrapper<RTCRtpReceiver>> RtpTransceiverSet::receivers() const
     133{
     134    Vector<std::reference_wrapper<RTCRtpReceiver>> receivers;
     135    for (auto& transceiver : m_transceivers) {
     136        if (transceiver->stopped())
     137            continue;
     138        receivers.append(transceiver->receiver());
     139    }
     140    return receivers;
     141}
     142
    124143} // namespace WebCore
    125144
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h

    r239192 r239238  
    9292    void append(Ref<RTCRtpTransceiver>&&);
    9393
    94     const Vector<std::reference_wrapper<RTCRtpSender>>& senders() const { return m_senders; }
    95     const Vector<std::reference_wrapper<RTCRtpReceiver>>& receivers() const { return m_receivers; }
     94    Vector<std::reference_wrapper<RTCRtpSender>> senders() const;
     95    Vector<std::reference_wrapper<RTCRtpReceiver>> receivers() const;
    9696
    9797private:
    9898    Vector<RefPtr<RTCRtpTransceiver>> m_transceivers;
    99 
    100     Vector<std::reference_wrapper<RTCRtpSender>> m_senders;
    101     Vector<std::reference_wrapper<RTCRtpReceiver>> m_receivers;
    10299};
    103100
  • trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp

    r238845 r239238  
    386386}
    387387
    388 static inline RefPtr<RTCRtpSender> findExistingSender(const Vector<std::reference_wrapper<RTCRtpSender>>& senders, LibWebRTCRtpSenderBackend& senderBackend)
     388static inline RefPtr<RTCRtpSender> findExistingSender(const Vector<RefPtr<RTCRtpTransceiver>>& transceivers, LibWebRTCRtpSenderBackend& senderBackend)
    389389{
    390390    ASSERT(senderBackend.rtcSender());
    391     for (RTCRtpSender& sender : senders) {
     391    for (auto& transceiver : transceivers) {
     392        auto& sender = transceiver->sender();
    392393        if (!sender.isStopped() && senderBackend.rtcSender() == backendFromRTPSender(sender).rtcSender())
    393394            return makeRef(sender);
     
    403404            return Exception { TypeError, "Unable to add track"_s };
    404405
    405         if (auto sender = findExistingSender(m_peerConnection.currentSenders(), *senderBackend)) {
     406        if (auto sender = findExistingSender(m_peerConnection.currentTransceivers(), *senderBackend)) {
    406407            backendFromRTPSender(*sender).takeSource(*senderBackend);
    407408            sender->setTrack(makeRef(track));
Note: See TracChangeset for help on using the changeset viewer.