aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/rtcdatachannel.rs11
-rw-r--r--components/script/dom/rtcpeerconnection.rs21
2 files changed, 18 insertions, 14 deletions
diff --git a/components/script/dom/rtcdatachannel.rs b/components/script/dom/rtcdatachannel.rs
index c0a3db51cc4..7cf42b0f5fc 100644
--- a/components/script/dom/rtcdatachannel.rs
+++ b/components/script/dom/rtcdatachannel.rs
@@ -30,6 +30,7 @@ use script_traits::serializable::BlobImpl;
use servo_media::webrtc::{
DataChannelId, DataChannelInit, DataChannelMessage, DataChannelState, WebRtcError,
};
+use std::cell::Cell;
use std::ptr;
#[dom_struct]
@@ -45,7 +46,7 @@ pub struct RTCDataChannel {
protocol: USVString,
negotiated: bool,
id: Option<u16>,
- ready_state: DomRefCell<RTCDataChannelState>,
+ ready_state: Cell<RTCDataChannelState>,
binary_type: DomRefCell<DOMString>,
}
@@ -80,7 +81,7 @@ impl RTCDataChannel {
protocol: options.protocol.clone(),
negotiated: options.negotiated,
id: options.id,
- ready_state: DomRefCell::new(RTCDataChannelState::Connecting),
+ ready_state: Cell::new(RTCDataChannelState::Connecting),
binary_type: DomRefCell::new(DOMString::from("blob")),
};
@@ -209,11 +210,11 @@ impl RTCDataChannel {
},
_ => {},
};
- *self.ready_state.borrow_mut() = state.into();
+ self.ready_state.set(state.into());
}
fn send(&self, source: &SendSource) -> Fallible<()> {
- if *self.ready_state.borrow() != RTCDataChannelState::Open {
+ if self.ready_state.get() != RTCDataChannelState::Open {
return Err(Error::InvalidState);
}
@@ -304,7 +305,7 @@ impl RTCDataChannelMethods for RTCDataChannel {
// https://www.w3.org/TR/webrtc/#dom-datachannel-readystate
fn ReadyState(&self) -> RTCDataChannelState {
- *self.ready_state.borrow()
+ self.ready_state.get()
}
// XXX We need a way to know when the underlying data transport
diff --git a/components/script/dom/rtcpeerconnection.rs b/components/script/dom/rtcpeerconnection.rs
index c92233b59bf..5d84b155216 100644
--- a/components/script/dom/rtcpeerconnection.rs
+++ b/components/script/dom/rtcpeerconnection.rs
@@ -311,17 +311,20 @@ impl RTCPeerConnection {
event.upcast::<Event>().fire(self.upcast());
},
_ => {
- if let Some(ref channel) = self.data_channels.borrow().get(&channel_id) {
- match event {
- DataChannelEvent::Open => channel.on_open(),
- DataChannelEvent::Close => channel.on_close(),
- DataChannelEvent::Error(error) => channel.on_error(error),
- DataChannelEvent::OnMessage(message) => channel.on_message(message),
- DataChannelEvent::StateChange(state) => channel.on_state_change(state),
- DataChannelEvent::NewChannel => unreachable!(),
- }
+ let channel = if let Some(channel) = self.data_channels.borrow().get(&channel_id) {
+ DomRoot::from_ref(&**channel)
} else {
debug_assert!(false, "Got an event for an unregistered data channel");
+ return;
+ };
+
+ match event {
+ DataChannelEvent::Open => channel.on_open(),
+ DataChannelEvent::Close => channel.on_close(),
+ DataChannelEvent::Error(error) => channel.on_error(error),
+ DataChannelEvent::OnMessage(message) => channel.on_message(message),
+ DataChannelEvent::StateChange(state) => channel.on_state_change(state),
+ DataChannelEvent::NewChannel => unreachable!(),
}
},
};