Commit 68c1d92a authored by Samuel Huang's avatar Samuel Huang Committed by Commit Bot

Revert "Create RTCDtlsTransport objects in the blink layer"

This reverts commit d7d59c5b.

Reason for revert: virtual/webrtc-wpt-unified-plan/external/wpt/webrtc/RTCRtpSender-transport.https.html fails in "WebKit Linux Trusty MSAN".

Original change's description:
> Create RTCDtlsTransport objects in the blink layer
> 
> This CL does on-demand creation of blink-layer transport
> objects. It also introduces a way to get at the webrtc::PeerConnection
> object from the WebPeerConnectionHandler API.
> 
> Bug: chromium:907849
> Change-Id: Ic86a5a66289c31d1f939a47d58bc194c32471cbd
> Reviewed-on: https://chromium-review.googlesource.com/c/1358060
> Commit-Queue: Harald Alvestrand <hta@chromium.org>
> Reviewed-by: Guido Urdaneta <guidou@chromium.org>
> Reviewed-by: Henrik Boström <hbos@chromium.org>
> Reviewed-by: Kentaro Hara <haraken@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#615072}

TBR=hta@chromium.org,haraken@chromium.org,hbos@chromium.org,guidou@chromium.org

Change-Id: Ie9c8d2e3dc5f97fc94ca5bf43cc30a9407d9fa4c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: chromium:907849
Reviewed-on: https://chromium-review.googlesource.com/c/1369719Reviewed-by: default avatarSamuel Huang <huangs@chromium.org>
Commit-Queue: Samuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#615115}
parent 0817cc92
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/optional.h" #include "base/optional.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "third_party/webrtc/api/dtlstransportinterface.h"
#include "third_party/webrtc/api/peerconnectioninterface.h" #include "third_party/webrtc/api/peerconnectioninterface.h"
#include "third_party/webrtc/api/stats/rtcstatsreport.h" #include "third_party/webrtc/api/stats/rtcstatsreport.h"
...@@ -158,10 +157,6 @@ class MockPeerConnectionImpl : public webrtc::PeerConnectionInterface { ...@@ -158,10 +157,6 @@ class MockPeerConnectionImpl : public webrtc::PeerConnectionInterface {
void SetGetStatsResult(bool result) { getstats_result_ = result; } void SetGetStatsResult(bool result) { getstats_result_ = result; }
// Set the report that |GetStats(RTCStatsCollectorCallback*)| returns. // Set the report that |GetStats(RTCStatsCollectorCallback*)| returns.
void SetGetStatsReport(webrtc::RTCStatsReport* report); void SetGetStatsReport(webrtc::RTCStatsReport* report);
rtc::scoped_refptr<webrtc::DtlsTransportInterface> LookupDtlsTransportByMid(
const std::string& mid) override {
return nullptr;
}
SignalingState signaling_state() override { SignalingState signaling_state() override {
NOTIMPLEMENTED(); NOTIMPLEMENTED();
......
...@@ -1924,11 +1924,6 @@ blink::WebString RTCPeerConnectionHandler::Id() const { ...@@ -1924,11 +1924,6 @@ blink::WebString RTCPeerConnectionHandler::Id() const {
return blink::WebString::FromASCII(id_); return blink::WebString::FromASCII(id_);
} }
webrtc::PeerConnectionInterface*
RTCPeerConnectionHandler::NativePeerConnection() {
return native_peer_connection();
}
void RTCPeerConnectionHandler::OnSignalingChange( void RTCPeerConnectionHandler::OnSignalingChange(
webrtc::PeerConnectionInterface::SignalingState new_state) { webrtc::PeerConnectionInterface::SignalingState new_state) {
DCHECK(task_runner_->RunsTasksInCurrentSequence()); DCHECK(task_runner_->RunsTasksInCurrentSequence());
......
...@@ -170,7 +170,6 @@ class CONTENT_EXPORT RTCPeerConnectionHandler ...@@ -170,7 +170,6 @@ class CONTENT_EXPORT RTCPeerConnectionHandler
const blink::WebRTCDataChannelInit& init) override; const blink::WebRTCDataChannelInit& init) override;
void Stop() override; void Stop() override;
blink::WebString Id() const override; blink::WebString Id() const override;
webrtc::PeerConnectionInterface* NativePeerConnection() override;
// Delegate functions to allow for mocking of WebKit interfaces. // Delegate functions to allow for mocking of WebKit interfaces.
// getStats takes ownership of request parameter. // getStats takes ownership of request parameter.
......
...@@ -131,9 +131,6 @@ class WebRTCPeerConnectionHandler { ...@@ -131,9 +131,6 @@ class WebRTCPeerConnectionHandler {
// Origin Trial - RtcPeerConnectionId // Origin Trial - RtcPeerConnectionId
virtual WebString Id() const = 0; virtual WebString Id() const = 0;
// Returns a pointer to the underlying native PeerConnection object.
virtual webrtc::PeerConnectionInterface* NativePeerConnection() = 0;
}; };
} // namespace blink } // namespace blink
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_event_init.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_event_init.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_quic_transport.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_quic_transport.h"
#include "third_party/blink/renderer/platform/scheduler/public/thread.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h"
#include "third_party/webrtc/api/dtlstransportinterface.h"
#include "third_party/webrtc/api/jsepicecandidate.h" #include "third_party/webrtc/api/jsepicecandidate.h"
#include "third_party/webrtc/api/peerconnectioninterface.h" #include "third_party/webrtc/api/peerconnectioninterface.h"
#include "third_party/webrtc/p2p/base/portallocator.h" #include "third_party/webrtc/p2p/base/portallocator.h"
...@@ -31,10 +30,12 @@ ...@@ -31,10 +30,12 @@
namespace blink { namespace blink {
RTCDtlsTransport::RTCDtlsTransport( RTCDtlsTransport* RTCDtlsTransport::Create(ExecutionContext* context) {
ExecutionContext* context, return MakeGarbageCollected<RTCDtlsTransport>(context);
rtc::scoped_refptr<webrtc::DtlsTransportInterface> native_transport) }
: ContextClient(context), native_transport_(native_transport) {}
RTCDtlsTransport::RTCDtlsTransport(ExecutionContext* context)
: ContextClient(context) {}
RTCDtlsTransport::~RTCDtlsTransport() {} RTCDtlsTransport::~RTCDtlsTransport() {}
...@@ -54,10 +55,6 @@ RTCIceTransport* RTCDtlsTransport::iceTransport() const { ...@@ -54,10 +55,6 @@ RTCIceTransport* RTCDtlsTransport::iceTransport() const {
return nullptr; return nullptr;
} }
webrtc::DtlsTransportInterface* RTCDtlsTransport::native_transport() {
return native_transport_.get();
}
const AtomicString& RTCDtlsTransport::InterfaceName() const { const AtomicString& RTCDtlsTransport::InterfaceName() const {
return event_target_names::kRTCDtlsTransport; return event_target_names::kRTCDtlsTransport;
} }
......
...@@ -8,11 +8,6 @@ ...@@ -8,11 +8,6 @@
#include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h" #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
#include "third_party/blink/renderer/core/dom/context_lifecycle_observer.h" #include "third_party/blink/renderer/core/dom/context_lifecycle_observer.h"
#include "third_party/blink/renderer/modules/event_target_modules.h" #include "third_party/blink/renderer/modules/event_target_modules.h"
#include "third_party/webrtc/api/scoped_refptr.h"
namespace webrtc {
class DtlsTransportInterface;
}
namespace blink { namespace blink {
...@@ -37,9 +32,9 @@ class MODULES_EXPORT RTCDtlsTransport final : public EventTargetWithInlineData, ...@@ -37,9 +32,9 @@ class MODULES_EXPORT RTCDtlsTransport final : public EventTargetWithInlineData,
USING_GARBAGE_COLLECTED_MIXIN(RTCDtlsTransport); USING_GARBAGE_COLLECTED_MIXIN(RTCDtlsTransport);
public: public:
RTCDtlsTransport( static RTCDtlsTransport* Create(ExecutionContext* context);
ExecutionContext* context,
rtc::scoped_refptr<webrtc::DtlsTransportInterface> native_context); explicit RTCDtlsTransport(ExecutionContext* context);
~RTCDtlsTransport() override; ~RTCDtlsTransport() override;
// rtc_dtls_transport.idl // rtc_dtls_transport.idl
...@@ -55,11 +50,9 @@ class MODULES_EXPORT RTCDtlsTransport final : public EventTargetWithInlineData, ...@@ -55,11 +50,9 @@ class MODULES_EXPORT RTCDtlsTransport final : public EventTargetWithInlineData,
ExecutionContext* GetExecutionContext() const override; ExecutionContext* GetExecutionContext() const override;
// For garbage collection. // For garbage collection.
void Trace(blink::Visitor* visitor) override; void Trace(blink::Visitor* visitor) override;
webrtc::DtlsTransportInterface* native_transport();
private: private:
HeapVector<Member<DOMArrayBuffer>> remote_certificates_; HeapVector<Member<DOMArrayBuffer>> remote_certificates_;
rtc::scoped_refptr<webrtc::DtlsTransportInterface> native_transport_;
}; };
} // namespace blink } // namespace blink
......
...@@ -87,7 +87,6 @@ ...@@ -87,7 +87,6 @@
#include "third_party/blink/renderer/modules/peerconnection/rtc_data_channel.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_data_channel.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_data_channel_event.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_data_channel_event.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_data_channel_init.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_data_channel_init.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_dtmf_sender.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_dtmf_sender.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_error_util.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_error_util.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_ice_server.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_ice_server.h"
...@@ -118,7 +117,6 @@ ...@@ -118,7 +117,6 @@
#include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h" #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
#include "third_party/blink/renderer/platform/wtf/time.h" #include "third_party/blink/renderer/platform/wtf/time.h"
#include "third_party/webrtc/api/dtlstransportinterface.h"
#include "third_party/webrtc/api/jsep.h" #include "third_party/webrtc/api/jsep.h"
#include "third_party/webrtc/api/peerconnectioninterface.h" #include "third_party/webrtc/api/peerconnectioninterface.h"
#include "third_party/webrtc/pc/sessiondescription.h" #include "third_party/webrtc/pc/sessiondescription.h"
...@@ -1138,47 +1136,6 @@ bool RTCPeerConnection::HasDocumentMedia() const { ...@@ -1138,47 +1136,6 @@ bool RTCPeerConnection::HasDocumentMedia() const {
user_media_controller->HasRequestedUserMedia(); user_media_controller->HasRequestedUserMedia();
} }
RTCDtlsTransport* RTCPeerConnection::LookupDtlsTransportByMid(String mid) {
if (mid.IsNull())
return nullptr;
webrtc::PeerConnectionInterface* native_pc =
peer_handler_->NativePeerConnection();
if (!native_pc)
return nullptr;
auto native_transport =
native_pc->LookupDtlsTransportByMid(std::string(mid.Utf8().data()));
if (!native_transport)
return nullptr;
// Check for previously created RTCDtlsTransport objects referencing
// this transport.
auto transport_iterator = dtls_transports_by_mid_.find(mid);
if (transport_iterator != dtls_transports_by_mid_.end()) {
if (transport_iterator->value->native_transport() !=
native_transport.get()) {
// The mid's transport has changed. Erase the reference to
// the old transport, and continue.
dtls_transports_by_mid_.erase(transport_iterator);
} else {
return transport_iterator->value;
}
}
// Check if the same transport has been returned for another mid.
for (auto const& transport_iterator : dtls_transports_by_mid_) {
if (transport_iterator.value->native_transport() ==
native_transport.get()) {
dtls_transports_by_mid_.insert(mid, transport_iterator.value);
return transport_iterator.value;
}
}
// The transport is previously unseen. Create object and hold on to
// a reference to it.
RTCDtlsTransport* transport = MakeGarbageCollected<RTCDtlsTransport>(
GetExecutionContext(), native_transport);
dtls_transports_by_mid_.insert(mid, transport);
return transport;
}
void RTCPeerConnection::ReportSetSdpUsage( void RTCPeerConnection::ReportSetSdpUsage(
SetSdpOperationType operation_type, SetSdpOperationType operation_type,
const RTCSessionDescriptionInit* session_description_init) const { const RTCSessionDescriptionInit* session_description_init) const {
...@@ -2380,8 +2337,8 @@ RTCRtpReceiver* RTCPeerConnection::CreateOrUpdateReceiver( ...@@ -2380,8 +2337,8 @@ RTCRtpReceiver* RTCPeerConnection::CreateOrUpdateReceiver(
RTCRtpReceiver* receiver; RTCRtpReceiver* receiver;
if (receiver_it == rtp_receivers_.end()) { if (receiver_it == rtp_receivers_.end()) {
// Create new receiver. // Create new receiver.
receiver = MakeGarbageCollected<RTCRtpReceiver>( receiver = MakeGarbageCollected<RTCRtpReceiver>(std::move(web_receiver),
this, std::move(web_receiver), track, MediaStreamVector()); track, MediaStreamVector());
// Receiving tracks should be muted by default. SetReadyState() propagates // Receiving tracks should be muted by default. SetReadyState() propagates
// the related state changes to ensure it is muted on all layers. It also // the related state changes to ensure it is muted on all layers. It also
// fires events - which is not desired - but because they fire synchronously // fires events - which is not desired - but because they fire synchronously
...@@ -2617,7 +2574,7 @@ void RTCPeerConnection::DidAddReceiverPlanB( ...@@ -2617,7 +2574,7 @@ void RTCPeerConnection::DidAddReceiverPlanB(
} }
DCHECK(FindReceiver(*web_receiver) == rtp_receivers_.end()); DCHECK(FindReceiver(*web_receiver) == rtp_receivers_.end());
RTCRtpReceiver* rtp_receiver = MakeGarbageCollected<RTCRtpReceiver>( RTCRtpReceiver* rtp_receiver = MakeGarbageCollected<RTCRtpReceiver>(
this, std::move(web_receiver), track, streams); std::move(web_receiver), track, streams);
rtp_receivers_.push_back(rtp_receiver); rtp_receivers_.push_back(rtp_receiver);
ScheduleDispatchEvent(MakeGarbageCollected<RTCTrackEvent>( ScheduleDispatchEvent(MakeGarbageCollected<RTCTrackEvent>(
rtp_receiver, rtp_receiver->track(), streams, nullptr)); rtp_receiver, rtp_receiver->track(), streams, nullptr));
...@@ -3054,7 +3011,6 @@ void RTCPeerConnection::Trace(blink::Visitor* visitor) { ...@@ -3054,7 +3011,6 @@ void RTCPeerConnection::Trace(blink::Visitor* visitor) {
visitor->Trace(transceivers_); visitor->Trace(transceivers_);
visitor->Trace(dispatch_scheduled_event_runner_); visitor->Trace(dispatch_scheduled_event_runner_);
visitor->Trace(scheduled_events_); visitor->Trace(scheduled_events_);
visitor->Trace(dtls_transports_by_mid_);
EventTargetWithInlineData::Trace(visitor); EventTargetWithInlineData::Trace(visitor);
PausableObject::Trace(visitor); PausableObject::Trace(visitor);
MediaStreamObserver::Trace(visitor); MediaStreamObserver::Trace(visitor);
......
...@@ -62,7 +62,6 @@ class MediaStreamTrack; ...@@ -62,7 +62,6 @@ class MediaStreamTrack;
class MediaStreamTrackOrString; class MediaStreamTrackOrString;
class RTCAnswerOptions; class RTCAnswerOptions;
class RTCConfiguration; class RTCConfiguration;
class RTCDtlsTransport;
class RTCDTMFSender; class RTCDTMFSender;
class RTCDataChannel; class RTCDataChannel;
class RTCDataChannelInit; class RTCDataChannelInit;
...@@ -335,8 +334,6 @@ class MODULES_EXPORT RTCPeerConnection final ...@@ -335,8 +334,6 @@ class MODULES_EXPORT RTCPeerConnection final
// getUserMedia(). // getUserMedia().
bool HasDocumentMedia() const; bool HasDocumentMedia() const;
// Look up, and potentially create, a DTLSTransport object.
RTCDtlsTransport* LookupDtlsTransportByMid(String mid);
void Trace(blink::Visitor*) override; void Trace(blink::Visitor*) override;
private: private:
...@@ -497,11 +494,6 @@ class MODULES_EXPORT RTCPeerConnection final ...@@ -497,11 +494,6 @@ class MODULES_EXPORT RTCPeerConnection final
HeapVector<Member<RTCRtpReceiver>> rtp_receivers_; HeapVector<Member<RTCRtpReceiver>> rtp_receivers_;
HeapVector<Member<RTCRtpTransceiver>> transceivers_; HeapVector<Member<RTCRtpTransceiver>> transceivers_;
// A map of all transports that have been looked up by MID.
// A transport may be referenced by more than one mid, so may
// be present multiple times in the table.
HeapHashMap<String, Member<RTCDtlsTransport>> dtls_transports_by_mid_;
std::unique_ptr<WebRTCPeerConnectionHandler> peer_handler_; std::unique_ptr<WebRTCPeerConnectionHandler> peer_handler_;
Member<AsyncMethodRunner<RTCPeerConnection>> dispatch_scheduled_event_runner_; Member<AsyncMethodRunner<RTCPeerConnection>> dispatch_scheduled_event_runner_;
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include "third_party/blink/public/platform/web_media_stream.h" #include "third_party/blink/public/platform/web_media_stream.h"
#include "third_party/blink/public/platform/web_media_stream_track.h" #include "third_party/blink/public/platform/web_media_stream_track.h"
#include "third_party/blink/public/platform/web_rtc_rtp_contributing_source.h" #include "third_party/blink/public/platform/web_rtc_rtp_contributing_source.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_capabilities.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_capabilities.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_stats_report.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_stats_report.h"
#include "third_party/blink/renderer/modules/peerconnection/web_rtc_stats_report_callback_resolver.h" #include "third_party/blink/renderer/modules/peerconnection/web_rtc_stats_report_callback_resolver.h"
...@@ -18,12 +17,10 @@ ...@@ -18,12 +17,10 @@
namespace blink { namespace blink {
RTCRtpReceiver::RTCRtpReceiver(RTCPeerConnection* pc, RTCRtpReceiver::RTCRtpReceiver(std::unique_ptr<WebRTCRtpReceiver> receiver,
std::unique_ptr<WebRTCRtpReceiver> receiver,
MediaStreamTrack* track, MediaStreamTrack* track,
MediaStreamVector streams) MediaStreamVector streams)
: pc_(pc), : receiver_(std::move(receiver)),
receiver_(std::move(receiver)),
track_(track), track_(track),
streams_(std::move(streams)) { streams_(std::move(streams)) {
DCHECK(receiver_); DCHECK(receiver_);
...@@ -34,17 +31,6 @@ MediaStreamTrack* RTCRtpReceiver::track() const { ...@@ -34,17 +31,6 @@ MediaStreamTrack* RTCRtpReceiver::track() const {
return track_; return track_;
} }
RTCDtlsTransport* RTCRtpReceiver::transport() {
if (!transceiver_)
return nullptr;
return pc_->LookupDtlsTransportByMid(transceiver_->mid());
}
RTCDtlsTransport* RTCRtpReceiver::rtcp_transport() {
// Chrome does not support turning off RTCP-mux.
return nullptr;
}
const HeapVector<Member<RTCRtpContributingSource>>& const HeapVector<Member<RTCRtpContributingSource>>&
RTCRtpReceiver::getContributingSources() { RTCRtpReceiver::getContributingSources() {
UpdateSourcesIfNeeded(); UpdateSourcesIfNeeded();
...@@ -71,10 +57,6 @@ void RTCRtpReceiver::set_streams(MediaStreamVector streams) { ...@@ -71,10 +57,6 @@ void RTCRtpReceiver::set_streams(MediaStreamVector streams) {
streams_ = std::move(streams); streams_ = std::move(streams);
} }
void RTCRtpReceiver::set_transceiver(RTCRtpTransceiver* transceiver) {
transceiver_ = transceiver;
}
void RTCRtpReceiver::UpdateSourcesIfNeeded() { void RTCRtpReceiver::UpdateSourcesIfNeeded() {
if (!contributing_sources_needs_updating_) if (!contributing_sources_needs_updating_)
return; return;
...@@ -110,11 +92,9 @@ void RTCRtpReceiver::SetContributingSourcesNeedsUpdating() { ...@@ -110,11 +92,9 @@ void RTCRtpReceiver::SetContributingSourcesNeedsUpdating() {
} }
void RTCRtpReceiver::Trace(blink::Visitor* visitor) { void RTCRtpReceiver::Trace(blink::Visitor* visitor) {
visitor->Trace(pc_);
visitor->Trace(track_); visitor->Trace(track_);
visitor->Trace(streams_); visitor->Trace(streams_);
visitor->Trace(contributing_sources_); visitor->Trace(contributing_sources_);
visitor->Trace(transceiver_);
ScriptWrappable::Trace(visitor); ScriptWrappable::Trace(visitor);
} }
......
...@@ -18,10 +18,7 @@ ...@@ -18,10 +18,7 @@
#include "third_party/blink/renderer/platform/heap/visitor.h" #include "third_party/blink/renderer/platform/heap/visitor.h"
namespace blink { namespace blink {
class RTCDtlsTransport;
class RTCPeerConnection;
class RTCRtpCapabilities; class RTCRtpCapabilities;
class RTCRtpTransceiver;
// https://w3c.github.io/webrtc-pc/#rtcrtpreceiver-interface // https://w3c.github.io/webrtc-pc/#rtcrtpreceiver-interface
class RTCRtpReceiver final : public ScriptWrappable { class RTCRtpReceiver final : public ScriptWrappable {
...@@ -29,29 +26,24 @@ class RTCRtpReceiver final : public ScriptWrappable { ...@@ -29,29 +26,24 @@ class RTCRtpReceiver final : public ScriptWrappable {
public: public:
// Takes ownership of the receiver. // Takes ownership of the receiver.
RTCRtpReceiver(RTCPeerConnection*, RTCRtpReceiver(std::unique_ptr<WebRTCRtpReceiver>,
std::unique_ptr<WebRTCRtpReceiver>,
MediaStreamTrack*, MediaStreamTrack*,
MediaStreamVector); MediaStreamVector);
static RTCRtpCapabilities* getCapabilities(const String& kind); static RTCRtpCapabilities* getCapabilities(const String& kind);
MediaStreamTrack* track() const; MediaStreamTrack* track() const;
RTCDtlsTransport* transport();
RTCDtlsTransport* rtcp_transport();
const HeapVector<Member<RTCRtpContributingSource>>& getContributingSources(); const HeapVector<Member<RTCRtpContributingSource>>& getContributingSources();
ScriptPromise getStats(ScriptState*); ScriptPromise getStats(ScriptState*);
const WebRTCRtpReceiver& web_receiver() const; const WebRTCRtpReceiver& web_receiver() const;
MediaStreamVector streams() const; MediaStreamVector streams() const;
void set_streams(MediaStreamVector streams); void set_streams(MediaStreamVector streams);
void set_transceiver(RTCRtpTransceiver*);
void UpdateSourcesIfNeeded(); void UpdateSourcesIfNeeded();
void Trace(blink::Visitor*) override; void Trace(blink::Visitor*) override;
private: private:
Member<RTCPeerConnection> pc_;
void SetContributingSourcesNeedsUpdating(); void SetContributingSourcesNeedsUpdating();
std::unique_ptr<WebRTCRtpReceiver> receiver_; std::unique_ptr<WebRTCRtpReceiver> receiver_;
...@@ -61,7 +53,6 @@ class RTCRtpReceiver final : public ScriptWrappable { ...@@ -61,7 +53,6 @@ class RTCRtpReceiver final : public ScriptWrappable {
// The current contributing sources (|getContributingSources|). // The current contributing sources (|getContributingSources|).
HeapVector<Member<RTCRtpContributingSource>> contributing_sources_; HeapVector<Member<RTCRtpContributingSource>> contributing_sources_;
bool contributing_sources_needs_updating_ = true; bool contributing_sources_needs_updating_ = true;
Member<RTCRtpTransceiver> transceiver_;
}; };
} // namespace blink } // namespace blink
......
...@@ -6,8 +6,6 @@ ...@@ -6,8 +6,6 @@
[Exposed=Window] [Exposed=Window]
interface RTCRtpReceiver { interface RTCRtpReceiver {
readonly attribute MediaStreamTrack track; readonly attribute MediaStreamTrack track;
[RuntimeEnabled=RTCDtlsTransport] readonly attribute RTCDtlsTransport? transport;
[RuntimeEnabled=RTCDtlsTransport] readonly attribute RTCDtlsTransport? rtcp_transport;
static RTCRtpCapabilities? getCapabilities(DOMString kind); static RTCRtpCapabilities? getCapabilities(DOMString kind);
sequence<RTCRtpContributingSource> getContributingSources(); sequence<RTCRtpContributingSource> getContributingSources();
[CallWith=ScriptState] Promise<RTCStatsReport> getStats(); [CallWith=ScriptState] Promise<RTCStatsReport> getStats();
......
...@@ -274,17 +274,6 @@ MediaStreamTrack* RTCRtpSender::track() { ...@@ -274,17 +274,6 @@ MediaStreamTrack* RTCRtpSender::track() {
return track_; return track_;
} }
RTCDtlsTransport* RTCRtpSender::transport() {
if (!transceiver_)
return nullptr;
return pc_->LookupDtlsTransportByMid(transceiver_->mid());
}
RTCDtlsTransport* RTCRtpSender::rtcp_transport() {
// Chrome does not support turning off RTCP-mux.
return nullptr;
}
ScriptPromise RTCRtpSender::replaceTrack(ScriptState* script_state, ScriptPromise RTCRtpSender::replaceTrack(ScriptState* script_state,
MediaStreamTrack* with_track) { MediaStreamTrack* with_track) {
ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state); ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
...@@ -452,10 +441,6 @@ void RTCRtpSender::set_streams(MediaStreamVector streams) { ...@@ -452,10 +441,6 @@ void RTCRtpSender::set_streams(MediaStreamVector streams) {
streams_ = std::move(streams); streams_ = std::move(streams);
} }
void RTCRtpSender::set_transceiver(RTCRtpTransceiver* transceiver) {
transceiver_ = transceiver;
}
RTCDTMFSender* RTCRtpSender::dtmf() { RTCDTMFSender* RTCRtpSender::dtmf() {
// Lazy initialization of dtmf_ to avoid overhead when not used. // Lazy initialization of dtmf_ to avoid overhead when not used.
if (!dtmf_ && kind_ == "audio") { if (!dtmf_ && kind_ == "audio") {
...@@ -476,7 +461,6 @@ void RTCRtpSender::Trace(blink::Visitor* visitor) { ...@@ -476,7 +461,6 @@ void RTCRtpSender::Trace(blink::Visitor* visitor) {
visitor->Trace(dtmf_); visitor->Trace(dtmf_);
visitor->Trace(streams_); visitor->Trace(streams_);
visitor->Trace(last_returned_parameters_); visitor->Trace(last_returned_parameters_);
visitor->Trace(transceiver_);
ScriptWrappable::Trace(visitor); ScriptWrappable::Trace(visitor);
} }
......
...@@ -20,11 +20,9 @@ ...@@ -20,11 +20,9 @@
namespace blink { namespace blink {
class MediaStreamTrack; class MediaStreamTrack;
class RTCDtlsTransport;
class RTCDTMFSender; class RTCDTMFSender;
class RTCPeerConnection; class RTCPeerConnection;
class RTCRtpCapabilities; class RTCRtpCapabilities;
class RTCRtpTransceiver;
webrtc::RtpEncodingParameters ToRtpEncodingParameters( webrtc::RtpEncodingParameters ToRtpEncodingParameters(
const RTCRtpEncodingParameters*); const RTCRtpEncodingParameters*);
...@@ -43,8 +41,6 @@ class RTCRtpSender final : public ScriptWrappable { ...@@ -43,8 +41,6 @@ class RTCRtpSender final : public ScriptWrappable {
MediaStreamVector streams); MediaStreamVector streams);
MediaStreamTrack* track(); MediaStreamTrack* track();
RTCDtlsTransport* transport();
RTCDtlsTransport* rtcp_transport();
ScriptPromise replaceTrack(ScriptState*, MediaStreamTrack*); ScriptPromise replaceTrack(ScriptState*, MediaStreamTrack*);
RTCDTMFSender* dtmf(); RTCDTMFSender* dtmf();
static RTCRtpCapabilities* getCapabilities(const String& kind); static RTCRtpCapabilities* getCapabilities(const String& kind);
...@@ -59,7 +55,6 @@ class RTCRtpSender final : public ScriptWrappable { ...@@ -59,7 +55,6 @@ class RTCRtpSender final : public ScriptWrappable {
void ClearLastReturnedParameters(); void ClearLastReturnedParameters();
MediaStreamVector streams() const; MediaStreamVector streams() const;
void set_streams(MediaStreamVector streams); void set_streams(MediaStreamVector streams);
void set_transceiver(RTCRtpTransceiver*);
void Trace(blink::Visitor*) override; void Trace(blink::Visitor*) override;
...@@ -73,7 +68,6 @@ class RTCRtpSender final : public ScriptWrappable { ...@@ -73,7 +68,6 @@ class RTCRtpSender final : public ScriptWrappable {
Member<RTCDTMFSender> dtmf_; Member<RTCDTMFSender> dtmf_;
MediaStreamVector streams_; MediaStreamVector streams_;
Member<RTCRtpSendParameters> last_returned_parameters_; Member<RTCRtpSendParameters> last_returned_parameters_;
Member<RTCRtpTransceiver> transceiver_;
}; };
} // namespace blink } // namespace blink
......
...@@ -6,8 +6,6 @@ ...@@ -6,8 +6,6 @@
[Exposed=Window] [Exposed=Window]
interface RTCRtpSender { interface RTCRtpSender {
readonly attribute MediaStreamTrack? track; readonly attribute MediaStreamTrack? track;
[RuntimeEnabled=RTCDtlsTransport] readonly attribute RTCDtlsTransport? transport;
[RuntimeEnabled=RTCDtlsTransport] readonly attribute RTCDtlsTransport? rtcp_transport;
static RTCRtpCapabilities? getCapabilities(DOMString kind); static RTCRtpCapabilities? getCapabilities(DOMString kind);
[RuntimeEnabled=RTCRtpSenderParameters, CallWith=ScriptState] Promise<void> setParameters(optional RTCRtpSendParameters parameters); [RuntimeEnabled=RTCRtpSenderParameters, CallWith=ScriptState] Promise<void> setParameters(optional RTCRtpSendParameters parameters);
[RuntimeEnabled=RTCRtpSenderParameters] RTCRtpSendParameters getParameters(); [RuntimeEnabled=RTCRtpSenderParameters] RTCRtpSendParameters getParameters();
......
...@@ -100,8 +100,6 @@ RTCRtpTransceiver::RTCRtpTransceiver( ...@@ -100,8 +100,6 @@ RTCRtpTransceiver::RTCRtpTransceiver(
DCHECK(sender_); DCHECK(sender_);
DCHECK(receiver_); DCHECK(receiver_);
UpdateMembers(); UpdateMembers();
sender_->set_transceiver(this);
receiver_->set_transceiver(this);
} }
String RTCRtpTransceiver::mid() const { String RTCRtpTransceiver::mid() const {
......
...@@ -216,11 +216,6 @@ WebString MockWebRTCPeerConnectionHandler::Id() const { ...@@ -216,11 +216,6 @@ WebString MockWebRTCPeerConnectionHandler::Id() const {
return WebString(); return WebString();
} }
webrtc::PeerConnectionInterface*
MockWebRTCPeerConnectionHandler::NativePeerConnection() {
return nullptr;
}
std::unique_ptr<WebRTCPeerConnectionHandler> std::unique_ptr<WebRTCPeerConnectionHandler>
TestingPlatformSupportWithWebRTC::CreateRTCPeerConnectionHandler( TestingPlatformSupportWithWebRTC::CreateRTCPeerConnectionHandler(
WebRTCPeerConnectionHandlerClient*, WebRTCPeerConnectionHandlerClient*,
......
...@@ -64,7 +64,6 @@ class MockWebRTCPeerConnectionHandler : public WebRTCPeerConnectionHandler { ...@@ -64,7 +64,6 @@ class MockWebRTCPeerConnectionHandler : public WebRTCPeerConnectionHandler {
const WebRTCDataChannelInit&) override; const WebRTCDataChannelInit&) override;
void Stop() override; void Stop() override;
WebString Id() const override; WebString Id() const override;
webrtc::PeerConnectionInterface* NativePeerConnection() override;
}; };
class TestingPlatformSupportWithWebRTC : public TestingPlatformSupport { class TestingPlatformSupportWithWebRTC : public TestingPlatformSupport {
......
This is a testharness.js-based test.
PASS RTCRtpSender.transport is null when unconnected
FAIL RTCRtpSender/receiver.transport has a value when connected assert_not_equals: got disallowed value null
FAIL RTCRtpSender/receiver.transport at the right time, with bundle policy balanced assert_not_equals: got disallowed value null
FAIL RTCRtpSender/receiver.transport at the right time, with bundle policy max-bundle assert_not_equals: got disallowed value null
FAIL RTCRtpSender/receiver.transport at the right time, with bundle policy max-compat assert_not_equals: got disallowed value null
Harness: the test ran to completion.
<!doctype html>
<meta charset=utf-8>
<title>RTCRtpSender.transport</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="dictionary-helper.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
'use strict';
// Spec link: http://w3c.github.io/webrtc-pc/#dom-rtcrtpsender-transport
promise_test(async t => {
const caller = new RTCPeerConnection();
t.add_cleanup(() => caller.close());
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track] = stream.getTracks();
const sender = caller.addTrack(track);
assert_equals(sender.transport, null);
}, 'RTCRtpSender.transport is null when unconnected');
// Test for the simple/happy path of connecting a single track
promise_test(async t => {
const caller = new RTCPeerConnection();
t.add_cleanup(() => caller.close());
const stream = await navigator.mediaDevices.getUserMedia({audio: true});
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track] = stream.getTracks();
const sender = caller.addTrack(track);
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());
exchangeIceCandidates(caller, callee);
await exchangeOfferAndListenToOntrack(t, caller, callee);
assert_not_equals(sender.transport, null);
const [transceiver] = caller.getTransceivers();
assert_equals(transceiver.sender.transport,
transceiver.receiver.transport);
}, 'RTCRtpSender/receiver.transport has a value when connected');
// Test with multiple tracks, and checking details of when things show up
// for different bundle policies.
for (let bundle_policy of ['balanced', 'max-bundle', 'max-compat']) {
promise_test(async t => {
const caller = new RTCPeerConnection({bundlePolicy: bundle_policy});
t.add_cleanup(() => caller.close());
const stream = await navigator.mediaDevices.getUserMedia(
{audio: true, video:true});
t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
const [track1, track2] = stream.getTracks();
const sender1 = caller.addTrack(track1);
const sender2 = caller.addTrack(track2);
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());
exchangeIceCandidates(caller, callee);
const offer = await caller.createOffer();
assert_equals(sender1.transport, null);
assert_equals(sender2.transport, null);
await caller.setLocalDescription(offer);
assert_not_equals(sender1.transport, null);
assert_not_equals(sender2.transport, null);
const [caller_transceiver1, caller_transceiver2] = caller.getTransceivers();
assert_equals(sender1.transport, caller_transceiver1.sender.transport);
if (bundle_policy == 'max-bundle') {
assert_equals(caller_transceiver1.sender.transport,
caller_transceiver2.sender.transport);
} else {
assert_not_equals(caller_transceiver1.sender.transport,
caller_transceiver2.sender.transport);
}
await callee.setRemoteDescription(offer);
const [callee_transceiver1, callee_transceiver2] = callee.getTransceivers();
assert_not_equals(callee_transceiver1.receiver.transport, null);
assert_not_equals(callee_transceiver2.receiver.transport, null);
const answer = await callee.createAnswer();
await callee.setLocalDescription(answer);
// At this point, bundle should have kicked in.
assert_equals(callee_transceiver1.receiver.transport,
callee_transceiver2.receiver.transport);
await caller.setRemoteDescription(answer);
assert_equals(caller_transceiver1.receiver.transport,
caller_transceiver2.receiver.transport);
}, 'RTCRtpSender/receiver.transport at the right time, with bundle policy ' + bundle_policy);
}
</script>
...@@ -228,7 +228,7 @@ PASS RTCRtpSender interface: existence and properties of interface prototype obj ...@@ -228,7 +228,7 @@ PASS RTCRtpSender interface: existence and properties of interface prototype obj
PASS RTCRtpSender interface: existence and properties of interface prototype object's "constructor" property PASS RTCRtpSender interface: existence and properties of interface prototype object's "constructor" property
PASS RTCRtpSender interface: existence and properties of interface prototype object's @@unscopables property PASS RTCRtpSender interface: existence and properties of interface prototype object's @@unscopables property
PASS RTCRtpSender interface: attribute track PASS RTCRtpSender interface: attribute track
PASS RTCRtpSender interface: attribute transport FAIL RTCRtpSender interface: attribute transport assert_true: The prototype object must have a property "transport" expected true got false
FAIL RTCRtpSender interface: attribute rtcpTransport assert_true: The prototype object must have a property "rtcpTransport" expected true got false FAIL RTCRtpSender interface: attribute rtcpTransport assert_true: The prototype object must have a property "rtcpTransport" expected true got false
PASS RTCRtpSender interface: operation getCapabilities(DOMString) PASS RTCRtpSender interface: operation getCapabilities(DOMString)
FAIL RTCRtpSender interface: operation setParameters(RTCRtpSendParameters) assert_equals: property has wrong .length expected 1 but got 0 FAIL RTCRtpSender interface: operation setParameters(RTCRtpSendParameters) assert_equals: property has wrong .length expected 1 but got 0
...@@ -260,7 +260,7 @@ PASS RTCRtpReceiver interface: existence and properties of interface prototype o ...@@ -260,7 +260,7 @@ PASS RTCRtpReceiver interface: existence and properties of interface prototype o
PASS RTCRtpReceiver interface: existence and properties of interface prototype object's "constructor" property PASS RTCRtpReceiver interface: existence and properties of interface prototype object's "constructor" property
PASS RTCRtpReceiver interface: existence and properties of interface prototype object's @@unscopables property PASS RTCRtpReceiver interface: existence and properties of interface prototype object's @@unscopables property
PASS RTCRtpReceiver interface: attribute track PASS RTCRtpReceiver interface: attribute track
PASS RTCRtpReceiver interface: attribute transport FAIL RTCRtpReceiver interface: attribute transport assert_true: The prototype object must have a property "transport" expected true got false
FAIL RTCRtpReceiver interface: attribute rtcpTransport assert_true: The prototype object must have a property "rtcpTransport" expected true got false FAIL RTCRtpReceiver interface: attribute rtcpTransport assert_true: The prototype object must have a property "rtcpTransport" expected true got false
PASS RTCRtpReceiver interface: operation getCapabilities(DOMString) PASS RTCRtpReceiver interface: operation getCapabilities(DOMString)
FAIL RTCRtpReceiver interface: operation getParameters() assert_own_property: interface prototype object missing non-static operation expected property "getParameters" missing FAIL RTCRtpReceiver interface: operation getParameters() assert_own_property: interface prototype object missing non-static operation expected property "getParameters" missing
......
This is a testharness.js-based test.
PASS RTCRtpSender.transport is null when unconnected
PASS RTCRtpSender/receiver.transport has a value when connected
PASS RTCRtpSender/receiver.transport at the right time, with bundle policy balanced
PASS RTCRtpSender/receiver.transport at the right time, with bundle policy max-bundle
PASS RTCRtpSender/receiver.transport at the right time, with bundle policy max-compat
Harness: the test ran to completion.
...@@ -228,7 +228,7 @@ PASS RTCRtpSender interface: existence and properties of interface prototype obj ...@@ -228,7 +228,7 @@ PASS RTCRtpSender interface: existence and properties of interface prototype obj
PASS RTCRtpSender interface: existence and properties of interface prototype object's "constructor" property PASS RTCRtpSender interface: existence and properties of interface prototype object's "constructor" property
PASS RTCRtpSender interface: existence and properties of interface prototype object's @@unscopables property PASS RTCRtpSender interface: existence and properties of interface prototype object's @@unscopables property
PASS RTCRtpSender interface: attribute track PASS RTCRtpSender interface: attribute track
PASS RTCRtpSender interface: attribute transport FAIL RTCRtpSender interface: attribute transport assert_true: The prototype object must have a property "transport" expected true got false
FAIL RTCRtpSender interface: attribute rtcpTransport assert_true: The prototype object must have a property "rtcpTransport" expected true got false FAIL RTCRtpSender interface: attribute rtcpTransport assert_true: The prototype object must have a property "rtcpTransport" expected true got false
PASS RTCRtpSender interface: operation getCapabilities(DOMString) PASS RTCRtpSender interface: operation getCapabilities(DOMString)
FAIL RTCRtpSender interface: operation setParameters(RTCRtpSendParameters) assert_equals: property has wrong .length expected 1 but got 0 FAIL RTCRtpSender interface: operation setParameters(RTCRtpSendParameters) assert_equals: property has wrong .length expected 1 but got 0
...@@ -240,7 +240,7 @@ PASS RTCRtpSender interface: attribute dtmf ...@@ -240,7 +240,7 @@ PASS RTCRtpSender interface: attribute dtmf
PASS RTCRtpSender must be primary interface of new RTCPeerConnection().addTransceiver('audio').sender PASS RTCRtpSender must be primary interface of new RTCPeerConnection().addTransceiver('audio').sender
PASS Stringification of new RTCPeerConnection().addTransceiver('audio').sender PASS Stringification of new RTCPeerConnection().addTransceiver('audio').sender
PASS RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "track" with the proper type PASS RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "track" with the proper type
PASS RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "transport" with the proper type FAIL RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "transport" with the proper type assert_inherits: property "transport" not found in prototype chain
FAIL RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "rtcpTransport" with the proper type assert_inherits: property "rtcpTransport" not found in prototype chain FAIL RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "rtcpTransport" with the proper type assert_inherits: property "rtcpTransport" not found in prototype chain
PASS RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "getCapabilities(DOMString)" with the proper type PASS RTCRtpSender interface: new RTCPeerConnection().addTransceiver('audio').sender must inherit property "getCapabilities(DOMString)" with the proper type
PASS RTCRtpSender interface: calling getCapabilities(DOMString) on new RTCPeerConnection().addTransceiver('audio').sender with too few arguments must throw TypeError PASS RTCRtpSender interface: calling getCapabilities(DOMString) on new RTCPeerConnection().addTransceiver('audio').sender with too few arguments must throw TypeError
...@@ -260,7 +260,7 @@ PASS RTCRtpReceiver interface: existence and properties of interface prototype o ...@@ -260,7 +260,7 @@ PASS RTCRtpReceiver interface: existence and properties of interface prototype o
PASS RTCRtpReceiver interface: existence and properties of interface prototype object's "constructor" property PASS RTCRtpReceiver interface: existence and properties of interface prototype object's "constructor" property
PASS RTCRtpReceiver interface: existence and properties of interface prototype object's @@unscopables property PASS RTCRtpReceiver interface: existence and properties of interface prototype object's @@unscopables property
PASS RTCRtpReceiver interface: attribute track PASS RTCRtpReceiver interface: attribute track
PASS RTCRtpReceiver interface: attribute transport FAIL RTCRtpReceiver interface: attribute transport assert_true: The prototype object must have a property "transport" expected true got false
FAIL RTCRtpReceiver interface: attribute rtcpTransport assert_true: The prototype object must have a property "rtcpTransport" expected true got false FAIL RTCRtpReceiver interface: attribute rtcpTransport assert_true: The prototype object must have a property "rtcpTransport" expected true got false
PASS RTCRtpReceiver interface: operation getCapabilities(DOMString) PASS RTCRtpReceiver interface: operation getCapabilities(DOMString)
FAIL RTCRtpReceiver interface: operation getParameters() assert_own_property: interface prototype object missing non-static operation expected property "getParameters" missing FAIL RTCRtpReceiver interface: operation getParameters() assert_own_property: interface prototype object missing non-static operation expected property "getParameters" missing
...@@ -270,7 +270,7 @@ PASS RTCRtpReceiver interface: operation getStats() ...@@ -270,7 +270,7 @@ PASS RTCRtpReceiver interface: operation getStats()
PASS RTCRtpReceiver must be primary interface of new RTCPeerConnection().addTransceiver('audio').receiver PASS RTCRtpReceiver must be primary interface of new RTCPeerConnection().addTransceiver('audio').receiver
PASS Stringification of new RTCPeerConnection().addTransceiver('audio').receiver PASS Stringification of new RTCPeerConnection().addTransceiver('audio').receiver
PASS RTCRtpReceiver interface: new RTCPeerConnection().addTransceiver('audio').receiver must inherit property "track" with the proper type PASS RTCRtpReceiver interface: new RTCPeerConnection().addTransceiver('audio').receiver must inherit property "track" with the proper type
PASS RTCRtpReceiver interface: new RTCPeerConnection().addTransceiver('audio').receiver must inherit property "transport" with the proper type FAIL RTCRtpReceiver interface: new RTCPeerConnection().addTransceiver('audio').receiver must inherit property "transport" with the proper type assert_inherits: property "transport" not found in prototype chain
FAIL RTCRtpReceiver interface: new RTCPeerConnection().addTransceiver('audio').receiver must inherit property "rtcpTransport" with the proper type assert_inherits: property "rtcpTransport" not found in prototype chain FAIL RTCRtpReceiver interface: new RTCPeerConnection().addTransceiver('audio').receiver must inherit property "rtcpTransport" with the proper type assert_inherits: property "rtcpTransport" not found in prototype chain
PASS RTCRtpReceiver interface: new RTCPeerConnection().addTransceiver('audio').receiver must inherit property "getCapabilities(DOMString)" with the proper type PASS RTCRtpReceiver interface: new RTCPeerConnection().addTransceiver('audio').receiver must inherit property "getCapabilities(DOMString)" with the proper type
PASS RTCRtpReceiver interface: calling getCapabilities(DOMString) on new RTCPeerConnection().addTransceiver('audio').receiver with too few arguments must throw TypeError PASS RTCRtpReceiver interface: calling getCapabilities(DOMString) on new RTCPeerConnection().addTransceiver('audio').receiver with too few arguments must throw TypeError
......
...@@ -5674,9 +5674,7 @@ interface RTCRtpContributingSource ...@@ -5674,9 +5674,7 @@ interface RTCRtpContributingSource
interface RTCRtpReceiver interface RTCRtpReceiver
static method getCapabilities static method getCapabilities
attribute @@toStringTag attribute @@toStringTag
getter rtcp_transport
getter track getter track
getter transport
method constructor method constructor
method getContributingSources method getContributingSources
method getStats method getStats
...@@ -5684,9 +5682,7 @@ interface RTCRtpSender ...@@ -5684,9 +5682,7 @@ interface RTCRtpSender
static method getCapabilities static method getCapabilities
attribute @@toStringTag attribute @@toStringTag
getter dtmf getter dtmf
getter rtcp_transport
getter track getter track
getter transport
method constructor method constructor
method getParameters method getParameters
method getStats method getStats
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment