aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2019-05-07 15:14:42 -0700
committerManish Goregaokar <manishsmail@gmail.com>2019-05-08 08:15:01 -0700
commit318c6857a9d8a8716b214dad1eb4ef27704f520c (patch)
tree052aee13e9ed2a339b7b81057f20f7810b6fc480
parent229ce3643156eff39b119429e6c579d32634eb5c (diff)
downloadservo-318c6857a9d8a8716b214dad1eb4ef27704f520c.tar.gz
servo-318c6857a9d8a8716b214dad1eb4ef27704f520c.zip
Add RTCTrackEvent
-rw-r--r--components/script/dom/mod.rs1
-rw-r--r--components/script/dom/rtctrackevent.rs78
-rw-r--r--components/script/dom/webidls/RTCTrackEvent.webidl23
3 files changed, 102 insertions, 0 deletions
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs
index 576c288d6f4..00274c3b86b 100644
--- a/components/script/dom/mod.rs
+++ b/components/script/dom/mod.rs
@@ -451,6 +451,7 @@ pub mod rtcicecandidate;
pub mod rtcpeerconnection;
pub mod rtcpeerconnectioniceevent;
pub mod rtcsessiondescription;
+pub mod rtctrackevent;
pub mod screen;
pub mod serviceworker;
pub mod serviceworkercontainer;
diff --git a/components/script/dom/rtctrackevent.rs b/components/script/dom/rtctrackevent.rs
new file mode 100644
index 00000000000..9c5d7bec362
--- /dev/null
+++ b/components/script/dom/rtctrackevent.rs
@@ -0,0 +1,78 @@
+/* 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::EventBinding::EventMethods;
+use crate::dom::bindings::codegen::Bindings::RTCTrackEventBinding::{self, RTCTrackEventMethods};
+use crate::dom::bindings::error::Fallible;
+use crate::dom::bindings::inheritance::Castable;
+use crate::dom::bindings::reflector::{reflect_dom_object, 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::mediastreamtrack::MediaStreamTrack;
+use crate::dom::window::Window;
+use dom_struct::dom_struct;
+use servo_atoms::Atom;
+
+#[dom_struct]
+pub struct RTCTrackEvent {
+ event: Event,
+ track: Dom<MediaStreamTrack>,
+}
+
+impl RTCTrackEvent {
+ #[allow(unrooted_must_root)]
+ fn new_inherited(track: &MediaStreamTrack) -> RTCTrackEvent {
+ RTCTrackEvent {
+ event: Event::new_inherited(),
+ track: Dom::from_ref(track),
+ }
+ }
+
+ pub fn new(
+ global: &GlobalScope,
+ type_: Atom,
+ bubbles: bool,
+ cancelable: bool,
+ track: &MediaStreamTrack,
+ ) -> DomRoot<RTCTrackEvent> {
+ let trackevent = reflect_dom_object(
+ Box::new(RTCTrackEvent::new_inherited(&track)),
+ global,
+ RTCTrackEventBinding::Wrap,
+ );
+ {
+ let event = trackevent.upcast::<Event>();
+ event.init_event(type_, bubbles, cancelable);
+ }
+ trackevent
+ }
+
+ pub fn Constructor(
+ window: &Window,
+ type_: DOMString,
+ init: &RTCTrackEventBinding::RTCTrackEventInit,
+ ) -> Fallible<DomRoot<RTCTrackEvent>> {
+ Ok(RTCTrackEvent::new(
+ &window.global(),
+ Atom::from(type_),
+ init.parent.bubbles,
+ init.parent.cancelable,
+ &init.track,
+ ))
+ }
+}
+
+impl RTCTrackEventMethods for RTCTrackEvent {
+ // https://w3c.github.io/webrtc-pc/#dom-rtctrackevent-track
+ fn Track(&self) -> DomRoot<MediaStreamTrack> {
+ DomRoot::from_ref(&*self.track)
+ }
+
+ // https://dom.spec.whatwg.org/#dom-event-istrusted
+ fn IsTrusted(&self) -> bool {
+ self.event.IsTrusted()
+ }
+}
diff --git a/components/script/dom/webidls/RTCTrackEvent.webidl b/components/script/dom/webidls/RTCTrackEvent.webidl
new file mode 100644
index 00000000000..6eafd2a514e
--- /dev/null
+++ b/components/script/dom/webidls/RTCTrackEvent.webidl
@@ -0,0 +1,23 @@
+/* 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/#dom-rtctrackevent
+
+[Constructor(DOMString type, RTCTrackEventInit eventInitDict),
+ Exposed=Window]
+interface RTCTrackEvent : Event {
+ // readonly attribute RTCRtpReceiver receiver;
+ readonly attribute MediaStreamTrack track;
+ // [SameObject]
+ // readonly attribute FrozenArray<MediaStream> streams;
+ // readonly attribute RTCRtpTransceiver transceiver;
+};
+
+// https://www.w3.org/TR/webrtc/#dom-rtctrackeventinit
+dictionary RTCTrackEventInit : EventInit {
+ // required RTCRtpReceiver receiver;
+ required MediaStreamTrack track;
+ // sequence<MediaStream> streams = [];
+ // required RTCRtpTransceiver transceiver;
+};