aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2019-05-07 15:59:54 -0700
committerManish Goregaokar <manishsmail@gmail.com>2019-05-08 08:15:01 -0700
commitb4ddf6837f53f126f4b26dea5fedc07ca826ff6f (patch)
tree8cf197cd42e2dcf89762dfc1b820e2320ec4e095
parent72701d96c4d59a07e03746842ed317632c34d253 (diff)
downloadservo-b4ddf6837f53f126f4b26dea5fedc07ca826ff6f.tar.gz
servo-b4ddf6837f53f126f4b26dea5fedc07ca826ff6f.zip
Add constructors for MediaStream
-rw-r--r--components/script/dom/mediastream.rs23
-rw-r--r--components/script/dom/webidls/MediaStream.webidl10
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();