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:

committed by
Commit Bot

parent
6d0ec50cfb
commit
4ea68472ca
third_party/blink
renderer
modules
web_tests
external
wpt
@@ -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
|
||||
|
Reference in New Issue
Block a user