diff options
-rw-r--r-- | components/script/dom/mediastream.rs | 23 | ||||
-rw-r--r-- | components/script/dom/webidls/MediaStream.webidl | 10 |
2 files changed, 28 insertions, 5 deletions
diff --git a/components/script/dom/mediastream.rs b/components/script/dom/mediastream.rs index a5edb458337..2ae573b290e 100644 --- a/components/script/dom/mediastream.rs +++ b/components/script/dom/mediastream.rs @@ -4,12 +4,14 @@ use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::MediaStreamBinding::{self, MediaStreamMethods}; +use crate::dom::bindings::error::Fallible; 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::eventtarget::EventTarget; use crate::dom::globalscope::GlobalScope; use crate::dom::mediastreamtrack::MediaStreamTrack; +use crate::dom::window::Window; use dom_struct::dom_struct; use servo_media::streams::MediaStreamType; use std::cell::Ref; @@ -36,6 +38,27 @@ impl MediaStream { ) } + pub fn Constructor(global: &Window) -> Fallible<DomRoot<MediaStream>> { + Ok(MediaStream::new(&global.global())) + } + + pub fn Constructor_(_: &Window, stream: &MediaStream) -> Fallible<DomRoot<MediaStream>> { + Ok(stream.Clone()) + } + + pub fn Constructor__( + global: &Window, + tracks: Vec<DomRoot<MediaStreamTrack>>, + ) -> Fallible<DomRoot<MediaStream>> { + let new = MediaStream::new(&global.global()); + for track in tracks { + // this is quadratic, but shouldn't matter much + // if this becomes a problem we can use a hash map + new.AddTrack(&track) + } + Ok(new) + } + pub fn get_tracks(&self) -> Ref<[Dom<MediaStreamTrack>]> { Ref::map(self.tracks.borrow(), |tracks| &**tracks) } diff --git a/components/script/dom/webidls/MediaStream.webidl b/components/script/dom/webidls/MediaStream.webidl index 7483cde2d36..b1d5664a7f7 100644 --- a/components/script/dom/webidls/MediaStream.webidl +++ b/components/script/dom/webidls/MediaStream.webidl @@ -4,11 +4,11 @@ // https://w3c.github.io/mediacapture-main/#dom-mediastream -// [Exposed=Window, -// Constructor, -// Constructor(MediaStream stream), -// Constructor(sequence<MediaStreamTrack> tracks)] -[Exposed=Window, Pref="dom.webrtc.enabled"] +[Exposed=Window, + Constructor, + Constructor(MediaStream stream), + Constructor(sequence<MediaStreamTrack> tracks), +Pref="dom.webrtc.enabled"] interface MediaStream : EventTarget { // readonly attribute DOMString id; sequence<MediaStreamTrack> getAudioTracks(); |