0

Creates an ICE transport object at DTLS transport initialization.

This doesn't yet give us a functional ICE transport object.
WPT testing is weak - it checks that an object is returned.

Bug: chromium:907849
Change-Id: I33cb20fa98f5555445bbf903ba85eb8cc15216f6
Reviewed-on: https://chromium-review.googlesource.com/c/1479966
Commit-Queue: Harald Alvestrand <hta@chromium.org>
Reviewed-by: Henrik Boström <hbos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#635037}
This commit is contained in:
Harald Alvestrand
2019-02-25 06:54:47 +00:00
committed by Commit Bot
parent 6d0ec50cfb
commit 4ea68472ca
5 changed files with 43 additions and 7 deletions

@@ -73,11 +73,13 @@ std::unique_ptr<DtlsTransportProxy> CreateProxy(
RTCDtlsTransport::RTCDtlsTransport(
ExecutionContext* context,
rtc::scoped_refptr<webrtc::DtlsTransportInterface> native_transport)
rtc::scoped_refptr<webrtc::DtlsTransportInterface> native_transport,
RTCIceTransport* ice_transport)
: ContextClient(context),
current_state_(webrtc::DtlsTransportState::kNew),
native_transport_(native_transport),
proxy_(CreateProxy(context, native_transport, this)) {}
proxy_(CreateProxy(context, native_transport, this)),
ice_transport_(ice_transport) {}
RTCDtlsTransport::~RTCDtlsTransport() {}
@@ -91,9 +93,7 @@ RTCDtlsTransport::getRemoteCertificates() const {
}
RTCIceTransport* RTCDtlsTransport::iceTransport() const {
// TODO(crbug.com/907849): Implement returning an IceTransport
NOTIMPLEMENTED();
return nullptr;
return ice_transport_;
}
webrtc::DtlsTransportInterface* RTCDtlsTransport::native_transport() {
@@ -115,6 +115,9 @@ void RTCDtlsTransport::OnStateChange(webrtc::DtlsTransportInformation info) {
DCHECK(current_state_.state() != webrtc::DtlsTransportState::kClosed);
current_state_ = info;
DispatchEvent(*Event::Create(event_type_names::kStatechange));
// Make sure the ICE transport is also closed. This must happen prior
// to garbage collection.
ice_transport_->stop();
}
const AtomicString& RTCDtlsTransport::InterfaceName() const {
@@ -135,6 +138,7 @@ bool RTCDtlsTransport::HasPendingActivity() const {
void RTCDtlsTransport::Trace(Visitor* visitor) {
visitor->Trace(remote_certificates_);
visitor->Trace(ice_transport_);
EventTargetWithInlineData::Trace(visitor);
ContextClient::Trace(visitor);
}

@@ -41,7 +41,8 @@ class MODULES_EXPORT RTCDtlsTransport final
public:
RTCDtlsTransport(
ExecutionContext* context,
rtc::scoped_refptr<webrtc::DtlsTransportInterface> native_context);
rtc::scoped_refptr<webrtc::DtlsTransportInterface> native_context,
RTCIceTransport* ice_transport);
~RTCDtlsTransport() override;
// rtc_dtls_transport.idl
@@ -73,6 +74,7 @@ class MODULES_EXPORT RTCDtlsTransport final
HeapVector<Member<DOMArrayBuffer>> remote_certificates_;
rtc::scoped_refptr<webrtc::DtlsTransportInterface> native_transport_;
std::unique_ptr<DtlsTransportProxy> proxy_;
Member<RTCIceTransport> ice_transport_;
};
} // namespace blink

@@ -91,6 +91,7 @@
#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_ice_server.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_offer_options.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_event.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h"
@@ -2436,13 +2437,31 @@ RTCDtlsTransport* RTCPeerConnection::CreateOrUpdateDtlsTransport(
return transport;
}
RTCDtlsTransport* transport = MakeGarbageCollected<RTCDtlsTransport>(
GetExecutionContext(), native_transport);
GetExecutionContext(), native_transport,
CreateOrUpdateIceTransport(native_transport->ice_transport()));
dtls_transports_by_native_transport_.insert(native_transport.get(),
transport);
transport->ChangeState(information);
return transport;
}
RTCIceTransport* RTCPeerConnection::CreateOrUpdateIceTransport(
rtc::scoped_refptr<webrtc::IceTransportInterface> ice_transport) {
if (!ice_transport.get()) {
return nullptr;
}
auto transport_locator =
ice_transports_by_native_transport_.find(ice_transport);
if (transport_locator != ice_transports_by_native_transport_.end()) {
return transport_locator->value;
}
// TODO(crbug.com/907849): Create a functional ICE transport object.
// This is a dummy.
RTCIceTransport* transport = RTCIceTransport::Create(GetExecutionContext());
ice_transports_by_native_transport_.insert(ice_transport.get(), transport);
return transport;
}
RTCDTMFSender* RTCPeerConnection::createDTMFSender(
MediaStreamTrack* track,
ExceptionState& exception_state) {
@@ -3061,6 +3080,7 @@ void RTCPeerConnection::Trace(blink::Visitor* visitor) {
visitor->Trace(transceivers_);
visitor->Trace(scheduled_events_);
visitor->Trace(dtls_transports_by_native_transport_);
visitor->Trace(ice_transports_by_native_transport_);
EventTargetWithInlineData::Trace(visitor);
ContextLifecycleObserver::Trace(visitor);
MediaStreamObserver::Trace(visitor);

@@ -67,6 +67,7 @@ class RTCDTMFSender;
class RTCDataChannel;
class RTCDataChannelInit;
class RTCIceCandidateInitOrRTCIceCandidate;
class RTCIceTransport;
class RTCOfferOptions;
class RTCPeerConnectionTest;
class RTCRtpReceiver;
@@ -410,6 +411,11 @@ class MODULES_EXPORT RTCPeerConnection final
rtc::scoped_refptr<webrtc::DtlsTransportInterface>,
const webrtc::DtlsTransportInformation& info);
// Creates or updates the RTCIceTransport object corresponding to the given
// webrtc::IceTransportInterface object.
RTCIceTransport* CreateOrUpdateIceTransport(
rtc::scoped_refptr<webrtc::IceTransportInterface>);
// Update the |receiver->streams()| to the streams indicated by |stream_ids|,
// adding to |remove_list| and |add_list| accordingly.
// https://w3c.github.io/webrtc-pc/#set-associated-remote-streams
@@ -492,6 +498,9 @@ class MODULES_EXPORT RTCPeerConnection final
// when they are no longer in use.
HeapHashMap<webrtc::DtlsTransportInterface*, WeakMember<RTCDtlsTransport>>
dtls_transports_by_native_transport_;
// The same kind of map for webrtc::IceTransports.
HeapHashMap<webrtc::IceTransportInterface*, WeakMember<RTCIceTransport>>
ice_transports_by_native_transport_;
std::unique_ptr<WebRTCPeerConnectionHandler> peer_handler_;

@@ -35,6 +35,7 @@
const [transceiver] = caller.getTransceivers();
assert_equals(transceiver.sender.transport,
transceiver.receiver.transport);
assert_not_equals(sender.transport.iceTransport, null);
}, 'RTCRtpSender/receiver.transport has a value when connected');
// Test with multiple tracks, and checking details of when things show up