/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; use js::rust::HandleObject; use crate::dom::bindings::codegen::Bindings::RTCErrorBinding::{ RTCErrorDetailType, RTCErrorInit, RTCErrorMethods, }; use crate::dom::bindings::reflector::reflect_dom_object_with_proto; use crate::dom::bindings::root::DomRoot; use crate::dom::bindings::str::DOMString; use crate::dom::domexception::DOMException; use crate::dom::window::Window; use crate::script_runtime::CanGc; #[dom_struct] pub(crate) struct RTCError { exception: DOMException, error_detail: RTCErrorDetailType, sdp_line_number: Option, http_request_status_code: Option, sctp_cause_code: Option, received_alert: Option, sent_alert: Option, } impl RTCError { fn new_inherited(init: &RTCErrorInit, message: DOMString) -> RTCError { RTCError { exception: DOMException::new_inherited(message, "OperationError".into()), error_detail: init.errorDetail, sdp_line_number: init.sdpLineNumber, http_request_status_code: init.httpRequestStatusCode, sctp_cause_code: init.sctpCauseCode, received_alert: init.receivedAlert, sent_alert: init.sentAlert, } } pub(crate) fn new( window: &Window, init: &RTCErrorInit, message: DOMString, can_gc: CanGc, ) -> DomRoot { Self::new_with_proto(window, None, init, message, can_gc) } fn new_with_proto( window: &Window, proto: Option, init: &RTCErrorInit, message: DOMString, can_gc: CanGc, ) -> DomRoot { reflect_dom_object_with_proto( Box::new(RTCError::new_inherited(init, message)), window, proto, can_gc, ) } } impl RTCErrorMethods for RTCError { // https://www.w3.org/TR/webrtc/#dom-rtcerror-constructor fn Constructor( window: &Window, proto: Option, can_gc: CanGc, init: &RTCErrorInit, message: DOMString, ) -> DomRoot { RTCError::new_with_proto(window, proto, init, message, can_gc) } // https://www.w3.org/TR/webrtc/#dom-rtcerror-errordetail fn ErrorDetail(&self) -> RTCErrorDetailType { self.error_detail } // https://www.w3.org/TR/webrtc/#dom-rtcerror-sdplinenumber fn GetSdpLineNumber(&self) -> Option { self.sdp_line_number } // https://www.w3.org/TR/webrtc/#dom-rtcerror fn GetHttpRequestStatusCode(&self) -> Option { self.http_request_status_code } // https://www.w3.org/TR/webrtc/#dom-rtcerror-sctpcausecode fn GetSctpCauseCode(&self) -> Option { self.sctp_cause_code } // https://www.w3.org/TR/webrtc/#dom-rtcerror-receivedalert fn GetReceivedAlert(&self) -> Option { self.received_alert } // https://www.w3.org/TR/webrtc/#dom-rtcerror-sentalert fn GetSentAlert(&self) -> Option { self.sent_alert } }