From b4ddf6837f53f126f4b26dea5fedc07ca826ff6f Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Tue, 7 May 2019 15:59:54 -0700 Subject: [PATCH] Add constructors for MediaStream --- components/script/dom/mediastream.rs | 23 +++++++++++++++++++ .../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> { + Ok(MediaStream::new(&global.global())) + } + + pub fn Constructor_(_: &Window, stream: &MediaStream) -> Fallible> { + Ok(stream.Clone()) + } + + pub fn Constructor__( + global: &Window, + tracks: Vec>, + ) -> Fallible> { + 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]> { 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 tracks)] -[Exposed=Window, Pref="dom.webrtc.enabled"] +[Exposed=Window, + Constructor, + Constructor(MediaStream stream), + Constructor(sequence tracks), +Pref="dom.webrtc.enabled"] interface MediaStream : EventTarget { // readonly attribute DOMString id; sequence getAudioTracks();