Skip to content

Commit

Permalink
Set data channels as closed on peer connection close
Browse files Browse the repository at this point in the history
  • Loading branch information
ferjm committed Jun 29, 2020
1 parent 2dedcae commit 820ea45
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
8 changes: 6 additions & 2 deletions components/script/dom/rtcdatachannel.rs
Expand Up @@ -133,6 +133,9 @@ impl RTCDataChannel {
}

pub fn on_error(&self, error: WebRtcError) {
let global = self.global();
let cx = global.get_cx();
let _ac = JSAutoRealm::new(*cx, self.reflector().get_jsobject().get());
let init = RTCErrorInit {
errorDetail: RTCErrorDetailType::Data_channel_failure,
httpRequestStatusCode: None,
Expand All @@ -144,8 +147,8 @@ impl RTCDataChannel {
let message = match error {
WebRtcError::Backend(message) => DOMString::from(message),
};
let error = RTCError::new(&self.global(), &init, message);
let event = RTCErrorEvent::new(&self.global(), atom!("error"), false, false, &error);
let error = RTCError::new(&global, &init, message);
let event = RTCErrorEvent::new(&global, atom!("error"), false, false, &error);
event.upcast::<Event>().fire(self.upcast());
}

Expand Down Expand Up @@ -299,6 +302,7 @@ impl RTCDataChannelMethods for RTCDataChannel {
self.id
}

// https://www.w3.org/TR/webrtc/#dom-datachannel-readystate
fn ReadyState(&self) -> RTCDataChannelState {
*self.ready_state.borrow()
}
Expand Down
12 changes: 8 additions & 4 deletions components/script/dom/rtcpeerconnection.rs
Expand Up @@ -44,7 +44,7 @@ use dom_struct::dom_struct;
use servo_media::streams::registry::MediaStreamId;
use servo_media::streams::MediaStreamType;
use servo_media::webrtc::{
BundlePolicy, DataChannelEvent, DataChannelId, GatheringState, IceCandidate,
BundlePolicy, DataChannelEvent, DataChannelId, DataChannelState, GatheringState, IceCandidate,
IceConnectionState, SdpType, SessionDescription, SignalingState, WebRtcController,
WebRtcSignaller,
};
Expand Down Expand Up @@ -169,7 +169,6 @@ impl WebRtcSignaller for RTCSignaller {

fn close(&self) {
// do nothing
// XXX(ferjm) close all data channels.
}
}

Expand Down Expand Up @@ -716,8 +715,13 @@ impl RTCPeerConnectionMethods for RTCPeerConnection {
// Step 5 handled by backend
self.controller.borrow_mut().as_ref().unwrap().quit();

// Step 6-10
// (no current support for data channels, transports, etc)
// Step 6
for (_, val) in self.data_channels.borrow().iter() {
val.on_state_change(DataChannelState::Closed);
}

// Step 7-10
// (no current support for transports, etc)

// Step 11
self.ice_connection_state.set(RTCIceConnectionState::Closed);
Expand Down

0 comments on commit 820ea45

Please sign in to comment.