diff options
-rw-r--r-- | components/script/dom/rtcdatachannel.rs | 11 | ||||
-rw-r--r-- | components/script/dom/rtcpeerconnection.rs | 21 |
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!(), } }, }; |