From 229ce3643156eff39b119429e6c579d32634eb5c Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Tue, 7 May 2019 14:56:46 -0700 Subject: [PATCH] Add {MediaStream, MediaStreamTrack}.clone() --- components/script/dom/mediastream.rs | 11 ++++++++++- components/script/dom/mediastreamtrack.rs | 7 ++++++- components/script/dom/webidls/MediaStream.webidl | 2 +- components/script/dom/webidls/MediaStreamTrack.webidl | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/components/script/dom/mediastream.rs b/components/script/dom/mediastream.rs index 38a9ce5f652..a5edb458337 100644 --- a/components/script/dom/mediastream.rs +++ b/components/script/dom/mediastream.rs @@ -4,7 +4,7 @@ use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::MediaStreamBinding::{self, MediaStreamMethods}; -use crate::dom::bindings::reflector::reflect_dom_object; +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; @@ -98,4 +98,13 @@ impl MediaStreamMethods for MediaStream { fn RemoveTrack(&self, track: &MediaStreamTrack) { self.tracks.borrow_mut().retain(|x| *x != track); } + + /// https://w3c.github.io/mediacapture-main/#dom-mediastream-clone + fn Clone(&self) -> DomRoot { + let new = MediaStream::new(&self.global()); + for track in &*self.tracks.borrow() { + new.add_track(&track) + } + new + } } diff --git a/components/script/dom/mediastreamtrack.rs b/components/script/dom/mediastreamtrack.rs index 79da91e0e45..2cc0bde7442 100644 --- a/components/script/dom/mediastreamtrack.rs +++ b/components/script/dom/mediastreamtrack.rs @@ -5,7 +5,7 @@ use crate::dom::bindings::codegen::Bindings::MediaStreamTrackBinding::{ self, MediaStreamTrackMethods, }; -use crate::dom::bindings::reflector::reflect_dom_object; +use crate::dom::bindings::reflector::{reflect_dom_object, DomObject}; use crate::dom::bindings::root::DomRoot; use crate::dom::bindings::str::DOMString; use crate::dom::eventtarget::EventTarget; @@ -66,4 +66,9 @@ impl MediaStreamTrackMethods for MediaStreamTrack { fn Id(&self) -> DOMString { self.id.id().to_string().into() } + + /// https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-clone + fn Clone(&self) -> DomRoot { + MediaStreamTrack::new(&self.global(), self.id, self.ty) + } } diff --git a/components/script/dom/webidls/MediaStream.webidl b/components/script/dom/webidls/MediaStream.webidl index 5b991f2e53a..7483cde2d36 100644 --- a/components/script/dom/webidls/MediaStream.webidl +++ b/components/script/dom/webidls/MediaStream.webidl @@ -17,7 +17,7 @@ interface MediaStream : EventTarget { MediaStreamTrack? getTrackById(DOMString trackId); void addTrack(MediaStreamTrack track); void removeTrack(MediaStreamTrack track); - // MediaStream clone(); + MediaStream clone(); // readonly attribute boolean active; // attribute EventHandler onaddtrack; // attribute EventHandler onremovetrack; diff --git a/components/script/dom/webidls/MediaStreamTrack.webidl b/components/script/dom/webidls/MediaStreamTrack.webidl index 7fecc681b7b..2f8bfb0bbec 100644 --- a/components/script/dom/webidls/MediaStreamTrack.webidl +++ b/components/script/dom/webidls/MediaStreamTrack.webidl @@ -15,7 +15,7 @@ interface MediaStreamTrack : EventTarget { // attribute EventHandler onunmute; // readonly attribute MediaStreamTrackState readyState; // attribute EventHandler onended; - // MediaStreamTrack clone(); + MediaStreamTrack clone(); // void stop(); // MediaTrackCapabilities getCapabilities(); // MediaTrackConstraints getConstraints();