aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/rtcdatachannel.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2020-06-01 12:19:47 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2020-06-29 16:53:47 +0200
commit5c6dcbf54e77b94e3d7d2cf11a53144ec783a52a (patch)
tree2968b728fa25024402379a74952cdd28238b1dd3 /components/script/dom/rtcdatachannel.rs
parent84598a517323f47284e34aa328a195ae96c5f8cc (diff)
downloadservo-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.rs22
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) {}
}