diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2019-01-26 19:13:09 -0800 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2019-01-29 11:36:27 -0800 |
commit | 5bfa42094e96372fbabd0f8a074235b1799bf656 (patch) | |
tree | ddecef11ce55b64a8b090192eaaf0ea581df2908 /components/script | |
parent | e0d8de27142fb05e2e4322a32fe45fb91223f308 (diff) | |
download | servo-5bfa42094e96372fbabd0f8a074235b1799bf656.tar.gz servo-5bfa42094e96372fbabd0f8a074235b1799bf656.zip |
Add RTCPeerConnectionIceEvent
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/mod.rs | 1 | ||||
-rw-r--r-- | components/script/dom/rtcpeerconnection.rs | 4 | ||||
-rw-r--r-- | components/script/dom/rtcpeerconnectioniceevent.rs | 92 | ||||
-rw-r--r-- | components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl | 17 |
4 files changed, 114 insertions, 0 deletions
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs index 2f54371f891..3dc7f530933 100644 --- a/components/script/dom/mod.rs +++ b/components/script/dom/mod.rs @@ -441,6 +441,7 @@ pub mod request; pub mod response; pub mod rtcicecandidate; pub mod rtcpeerconnection; +pub mod rtcpeerconnectioniceevent; pub mod rtcsessiondescription; pub mod screen; pub mod serviceworker; diff --git a/components/script/dom/rtcpeerconnection.rs b/components/script/dom/rtcpeerconnection.rs index 41381ba43eb..8fa6b58023d 100644 --- a/components/script/dom/rtcpeerconnection.rs +++ b/components/script/dom/rtcpeerconnection.rs @@ -22,11 +22,14 @@ use servo_media::webrtc::MediaStream as BackendMediaStream; use servo_media::webrtc::{IceCandidate, WebRtcController, WebRtcSignaller}; use servo_media::ServoMedia; +use std::cell::Cell; + #[dom_struct] pub struct RTCPeerConnection { eventtarget: EventTarget, #[ignore_malloc_size_of = "defined in servo-media"] controller: DomRefCell<Option<WebRtcController>>, + closed: Cell<bool>, } struct RTCSignaller { @@ -70,6 +73,7 @@ impl RTCPeerConnection { RTCPeerConnection { eventtarget: EventTarget::new_inherited(), controller: DomRefCell::new(None), + closed: Cell::new(false), } } diff --git a/components/script/dom/rtcpeerconnectioniceevent.rs b/components/script/dom/rtcpeerconnectioniceevent.rs new file mode 100644 index 00000000000..f77d0ec2ad9 --- /dev/null +++ b/components/script/dom/rtcpeerconnectioniceevent.rs @@ -0,0 +1,92 @@ +/* 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 crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods; +use crate::dom::bindings::codegen::Bindings::RTCPeerConnectionIceEventBinding; +use crate::dom::bindings::codegen::Bindings::RTCPeerConnectionIceEventBinding::RTCPeerConnectionIceEventInit; +use crate::dom::bindings::codegen::Bindings::RTCPeerConnectionIceEventBinding::RTCPeerConnectionIceEventMethods; +use crate::dom::bindings::error::Fallible; +use crate::dom::bindings::inheritance::Castable; +use crate::dom::bindings::reflector::reflect_dom_object; +use crate::dom::bindings::reflector::DomObject; +use crate::dom::bindings::root::{Dom, DomRoot}; +use crate::dom::bindings::str::DOMString; +use crate::dom::event::Event; +use crate::dom::globalscope::GlobalScope; +use crate::dom::rtcicecandidate::RTCIceCandidate; +use crate::dom::window::Window; +use dom_struct::dom_struct; +use servo_atoms::Atom; + +#[dom_struct] +pub struct RTCPeerConnectionIceEvent { + event: Event, + candidate: Option<Dom<RTCIceCandidate>>, + url: Option<DOMString>, +} + +impl RTCPeerConnectionIceEvent { + pub fn new_inherited( + candidate: Option<&RTCIceCandidate>, + url: Option<DOMString>, + ) -> RTCPeerConnectionIceEvent { + RTCPeerConnectionIceEvent { + event: Event::new_inherited(), + candidate: candidate.map(Dom::from_ref), + url, + } + } + + pub fn new( + global: &GlobalScope, + ty: Atom, + candidate: Option<&RTCIceCandidate>, + url: Option<DOMString>, + trusted: bool, + ) -> DomRoot<RTCPeerConnectionIceEvent> { + let e = reflect_dom_object( + Box::new(RTCPeerConnectionIceEvent::new_inherited(candidate, url)), + global, + RTCPeerConnectionIceEventBinding::Wrap, + ); + let evt = e.upcast::<Event>(); + evt.init_event(ty, false, false); // XXXManishearth bubbles/cancelable? + evt.set_trusted(trusted); + e + } + + pub fn Constructor( + window: &Window, + ty: DOMString, + init: &RTCPeerConnectionIceEventInit, + ) -> Fallible<DomRoot<RTCPeerConnectionIceEvent>> { + Ok(RTCPeerConnectionIceEvent::new( + &window.global(), + ty.into(), + init.candidate + .as_ref() + .and_then(|x| x.as_ref()) + .map(|x| &**x), + init.url.as_ref().and_then(|x| x.clone()), + false, + )) + } +} + +impl RTCPeerConnectionIceEventMethods for RTCPeerConnectionIceEvent { + /// https://www.w3.org/TR/webrtc/#dom-rtcpeerconnectioniceevent-candidate + fn GetCandidate(&self) -> Option<DomRoot<RTCIceCandidate>> { + self.candidate.as_ref().map(|x| DomRoot::from_ref(&**x)) + } + + /// https://www.w3.org/TR/webrtc/#dom-rtcpeerconnectioniceevent-url + fn GetUrl(&self) -> Option<DOMString> { + self.url.clone() + } + + /// https://dom.spec.whatwg.org/#dom-event-istrusted + fn IsTrusted(&self) -> bool { + self.event.IsTrusted() + } +} diff --git a/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl b/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl new file mode 100644 index 00000000000..26a3919b21f --- /dev/null +++ b/components/script/dom/webidls/RTCPeerConnectionIceEvent.webidl @@ -0,0 +1,17 @@ +/* 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/. */ + +// https://w3c.github.io/webrtc-pc/#rtcpeerconnectioniceevent + +[Constructor(DOMString type, optional RTCPeerConnectionIceEventInit eventInitDict), + Exposed=Window, Pref="dom.webrtc.enabled"] +interface RTCPeerConnectionIceEvent : Event { + readonly attribute RTCIceCandidate? candidate; + readonly attribute DOMString? url; +}; + +dictionary RTCPeerConnectionIceEventInit : EventInit { + RTCIceCandidate? candidate; + DOMString? url; +}; |