diff --git a/components/script/dom/mediastream.rs b/components/script/dom/mediastream.rs index 8cf68e80490..395abd95ab6 100644 --- a/components/script/dom/mediastream.rs +++ b/components/script/dom/mediastream.rs @@ -6,6 +6,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::root::{Dom, DomRoot}; +use crate::dom::bindings::str::DOMString; use crate::dom::eventtarget::EventTarget; use crate::dom::globalscope::GlobalScope; use crate::dom::mediastreamtrack::MediaStreamTrack; @@ -73,4 +74,13 @@ impl MediaStreamMethods for MediaStream { .map(|x| DomRoot::from_ref(&**x)) .collect() } + + /// https://w3c.github.io/mediacapture-main/#dom-mediastream-gettrackbyid + fn GetTrackById(&self, id: DOMString) -> Option> { + self.tracks + .borrow() + .iter() + .find(|x| x.id().id().to_string() == &*id) + .map(|x| DomRoot::from_ref(&**x)) + } } diff --git a/components/script/dom/webidls/MediaStream.webidl b/components/script/dom/webidls/MediaStream.webidl index 650ad1ed95d..10b151225de 100644 --- a/components/script/dom/webidls/MediaStream.webidl +++ b/components/script/dom/webidls/MediaStream.webidl @@ -14,7 +14,7 @@ interface MediaStream : EventTarget { sequence getAudioTracks(); sequence getVideoTracks(); sequence getTracks(); - // MediaStreamTrack? getTrackById(DOMString trackId); + MediaStreamTrack? getTrackById(DOMString trackId); // void addTrack(MediaStreamTrack track); // void removeTrack(MediaStreamTrack track); // MediaStream clone();