Changeset 194918 in webkit


Ignore:
Timestamp:
Jan 12, 2016 12:20:13 PM (8 years ago)
Author:
adam.bergkvist@ericsson.com
Message:

WebRTC: Update RTCPeerConnection.add/removeTrack() and add test
https://bugs.webkit.org/show_bug.cgi?id=153010

Reviewed by Eric Carlson.

Source/WebCore:

RTCPeerConnection.add/removeTrack() are not fully spec compliant yet, since that would
require support for RTCRtpTransceiver which is a new work-in-progress feature. Use
Vector, instead of map, for senders and receivers since nothing is removed from these
sets anymore.

Test: fast/mediastream/RTCPeerConnection-add-removeTrack.html

  • Modules/mediastream/RTCPeerConnection.cpp:

(WebCore::RTCPeerConnection::addTrack):
(WebCore::RTCPeerConnection::removeTrack):
(WebCore::RTCPeerConnection::queuedCreateOffer): Deleted.

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

(WebCore::RTCRtpSender::RTCRtpSender):

  • Modules/mediastream/RTCRtpSender.h:

(WebCore::RTCRtpSender::create):
(WebCore::RTCRtpSender::mediaStreamIds):

LayoutTests:

Add test for RTCPeerConnection.add/removeTrack() (currently not covered by other tests).
This test also covers some of the functionality of RTCRtpSender.

  • fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt: Added.
  • fast/mediastream/RTCPeerConnection-add-removeTrack.html: Added.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r194917 r194918  
     12016-01-12  Adam Bergkvist  <adam.bergkvist@ericsson.com>
     2
     3        WebRTC: Update RTCPeerConnection.add/removeTrack() and add test
     4        https://bugs.webkit.org/show_bug.cgi?id=153010
     5
     6        Reviewed by Eric Carlson.
     7
     8        Add test for RTCPeerConnection.add/removeTrack() (currently not covered by other tests).
     9        This test also covers some of the functionality of RTCRtpSender.
     10
     11        * fast/mediastream/RTCPeerConnection-add-removeTrack-expected.txt: Added.
     12        * fast/mediastream/RTCPeerConnection-add-removeTrack.html: Added.
     13
    1142016-01-12  Jiewen Tan  <jiewen_tan@apple.com>
    215
  • trunk/Source/WebCore/ChangeLog

    r194905 r194918  
     12016-01-12  Adam Bergkvist  <adam.bergkvist@ericsson.com>
     2
     3        WebRTC: Update RTCPeerConnection.add/removeTrack() and add test
     4        https://bugs.webkit.org/show_bug.cgi?id=153010
     5
     6        Reviewed by Eric Carlson.
     7
     8        RTCPeerConnection.add/removeTrack() are not fully spec compliant yet, since that would
     9        require support for RTCRtpTransceiver which is a new work-in-progress feature. Use
     10        Vector, instead of map, for senders and receivers since nothing is removed from these
     11        sets anymore.
     12
     13        Test: fast/mediastream/RTCPeerConnection-add-removeTrack.html
     14
     15        * Modules/mediastream/RTCPeerConnection.cpp:
     16        (WebCore::RTCPeerConnection::addTrack):
     17        (WebCore::RTCPeerConnection::removeTrack):
     18        (WebCore::RTCPeerConnection::queuedCreateOffer): Deleted.
     19        * Modules/mediastream/RTCPeerConnection.h:
     20        * Modules/mediastream/RTCRtpSender.cpp:
     21        (WebCore::RTCRtpSender::RTCRtpSender):
     22        * Modules/mediastream/RTCRtpSender.h:
     23        (WebCore::RTCRtpSender::create):
     24        (WebCore::RTCRtpSender::mediaStreamIds):
     25
    1262016-01-12  Brady Eidson  <beidson@apple.com>
    227
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp

    r194496 r194918  
    5050#include "RTCIceCandidateEvent.h"
    5151#include "RTCOfferAnswerOptions.h"
    52 #include "RTCRtpReceiver.h"
    53 #include "RTCRtpSender.h"
    5452#include "RTCSessionDescription.h"
    5553#include "RTCTrackEvent.h"
     
    105103}
    106104
    107 Vector<RefPtr<RTCRtpSender>> RTCPeerConnection::getSenders() const
    108 {
    109     Vector<RefPtr<RTCRtpSender>> senders;
    110     senders.reserveCapacity(m_senderSet.size());
    111     copyValuesToVector(m_senderSet, senders);
    112 
    113     return senders;
    114 }
    115 
    116 Vector<RefPtr<RTCRtpReceiver>> RTCPeerConnection::getReceivers() const
    117 {
    118     Vector<RefPtr<RTCRtpReceiver>> receivers;
    119     receivers.reserveCapacity(m_receiverSet.size());
    120     copyValuesToVector(m_receiverSet, receivers);
    121 
    122     return receivers;
    123 }
    124 
    125105RefPtr<RTCRtpSender> RTCPeerConnection::addTrack(RefPtr<MediaStreamTrack>&& track, Vector<MediaStream*> streams, ExceptionCode& ec)
    126106{
     
    141121    }
    142122
    143     if (m_senderSet.contains(track->id())) {
    144         // FIXME: Spec says InvalidParameter
    145         ec = INVALID_MODIFICATION_ERR;
    146         return nullptr;
    147     }
    148 
    149     const String& trackId = track->id();
    150     RefPtr<RTCRtpSender> sender = RTCRtpSender::create(WTFMove(track), streams[0]->id());
    151     m_senderSet.add(trackId, sender);
     123    for (auto& sender : m_senderSet) {
     124        if (sender->track()->id() == track->id()) {
     125            // FIXME: Spec says InvalidParameter
     126            ec = INVALID_MODIFICATION_ERR;
     127            return nullptr;
     128        }
     129    }
     130
     131    Vector<String> mediaStreamIds;
     132    for (auto stream : streams)
     133        mediaStreamIds.append(stream->id());
     134
     135    RefPtr<RTCRtpSender> sender = RTCRtpSender::create(WTFMove(track), WTFMove(mediaStreamIds));
     136    m_senderSet.append(sender);
    152137
    153138    m_backend->markAsNeedingNegotiation();
     
    168153    }
    169154
    170     if (!m_senderSet.remove(sender->track()->id()))
     155    if (!m_senderSet.contains(sender))
    171156        return;
    172157
  • trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.h

    r192848 r194918  
    4242#include "JSMediaStream.h"
    4343#include "PeerConnectionBackend.h"
     44#include "RTCRtpReceiver.h"
     45#include "RTCRtpSender.h"
    4446#include "ScriptWrappable.h"
    4547#include <wtf/HashMap.h>
     
    5557class RTCIceCandidate;
    5658class RTCPeerConnectionErrorCallback;
    57 class RTCRtpReceiver;
    58 class RTCRtpSender;
    5959class RTCSessionDescription;
    6060class RTCStatsCallback;
     
    6565    ~RTCPeerConnection();
    6666
    67     Vector<RefPtr<RTCRtpSender>> getSenders() const override;
    68     Vector<RefPtr<RTCRtpReceiver>> getReceivers() const;
     67    Vector<RefPtr<RTCRtpSender>> getSenders() const override { return m_senderSet; }
     68    Vector<RefPtr<RTCRtpReceiver>> getReceivers() const { return m_receiverSet; }
    6969
    7070    RefPtr<RTCRtpSender> addTrack(RefPtr<MediaStreamTrack>&&, Vector<MediaStream*>, ExceptionCode&);
     
    136136    PeerConnectionStates::IceConnectionState m_iceConnectionState;
    137137
    138     HashMap<String, RefPtr<RTCRtpSender>> m_senderSet;
    139     HashMap<String, RefPtr<RTCRtpReceiver>> m_receiverSet;
     138    Vector<RefPtr<RTCRtpSender>> m_senderSet;
     139    Vector<RefPtr<RTCRtpReceiver>> m_receiverSet;
    140140
    141141    Vector<RefPtr<RTCDataChannel>> m_dataChannels;
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp

    r194496 r194918  
    3636namespace WebCore {
    3737
    38 RTCRtpSender::RTCRtpSender(RefPtr<MediaStreamTrack>&& track, const String& mediaStreamId)
     38RTCRtpSender::RTCRtpSender(RefPtr<MediaStreamTrack>&& track, Vector<String>&& mediaStreamIds)
    3939    : RTCRtpSenderReceiverBase(WTFMove(track))
    40     , m_mediaStreamId(mediaStreamId)
     40    , m_mediaStreamIds(WTFMove(mediaStreamIds))
    4141{
    4242}
  • trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h

    r194496 r194918  
    4141class RTCRtpSender : public RTCRtpSenderReceiverBase {
    4242public:
    43     static Ref<RTCRtpSender> create(RefPtr<MediaStreamTrack>&& track, const String& mediaStreamId)
     43    static Ref<RTCRtpSender> create(RefPtr<MediaStreamTrack>&& track, Vector<String>&& mediaStreamIds)
    4444    {
    45         return adoptRef(*new RTCRtpSender(WTFMove(track), mediaStreamId));
     45        return adoptRef(*new RTCRtpSender(WTFMove(track), WTFMove(mediaStreamIds)));
    4646    }
    4747
    48     const String& mediaStreamId() const { return m_mediaStreamId; }
     48    const Vector<String>& mediaStreamIds() const { return m_mediaStreamIds; }
    4949
    5050private:
    51     RTCRtpSender(RefPtr<MediaStreamTrack>&&, const String& mediaStreamId);
     51    RTCRtpSender(RefPtr<MediaStreamTrack>&&, Vector<String>&& mediaStreamIds);
    5252
    53     String m_mediaStreamId;
     53    Vector<String> m_mediaStreamIds;
    5454};
    5555
Note: See TracChangeset for help on using the changeset viewer.