diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2020-06-01 12:19:47 +0200 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2020-06-29 16:53:47 +0200 |
commit | 5c6dcbf54e77b94e3d7d2cf11a53144ec783a52a (patch) | |
tree | 2968b728fa25024402379a74952cdd28238b1dd3 /components/script/dom/rtcdatachannel.rs | |
parent | 84598a517323f47284e34aa328a195ae96c5f8cc (diff) | |
download | servo-5c6dcbf54e77b94e3d7d2cf11a53144ec783a52a.tar.gz servo-5c6dcbf54e77b94e3d7d2cf11a53144ec783a52a.zip |
Trigger RTCErrorEvent on data channel error
Diffstat (limited to 'components/script/dom/rtcdatachannel.rs')
-rw-r--r-- | components/script/dom/rtcdatachannel.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/components/script/dom/rtcdatachannel.rs b/components/script/dom/rtcdatachannel.rs index d7388729dbd..a1a0e2075f0 100644 --- a/components/script/dom/rtcdatachannel.rs +++ b/components/script/dom/rtcdatachannel.rs @@ -5,15 +5,18 @@ use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::RTCDataChannelBinding::RTCDataChannelInit; use crate::dom::bindings::codegen::Bindings::RTCDataChannelBinding::RTCDataChannelMethods; +use crate::dom::bindings::codegen::Bindings::RTCErrorBinding::{RTCErrorDetailType, RTCErrorInit}; use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::refcounted::Trusted; use crate::dom::bindings::reflector::{reflect_dom_object, DomObject}; use crate::dom::bindings::root::DomRoot; -use crate::dom::bindings::str::USVString; +use crate::dom::bindings::str::{DOMString, USVString}; use crate::dom::blob::Blob; use crate::dom::event::{Event, EventBubbles, EventCancelable}; use crate::dom::eventtarget::EventTarget; use crate::dom::globalscope::GlobalScope; +use crate::dom::rtcerror::RTCError; +use crate::dom::rtcerrorevent::RTCErrorEvent; use crate::task_source::TaskSource; use dom_struct::dom_struct; use js::rust::CustomAutoRooterGuard; @@ -164,7 +167,22 @@ impl RTCDataChannel { event.upcast::<Event>().fire(self.upcast()); } - fn on_error(&self, error: WebRtcError) {} + fn on_error(&self, error: WebRtcError) { + let init = RTCErrorInit { + errorDetail: RTCErrorDetailType::Data_channel_failure, + httpRequestStatusCode: None, + receivedAlert: None, + sctpCauseCode: None, + sdpLineNumber: None, + sentAlert: None, + }; + 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); + event.upcast::<Event>().fire(self.upcast()); + } fn on_message(&self, message: String) {} } |