diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2019-01-28 13:23:25 -0800 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2019-01-29 11:37:00 -0800 |
commit | 8b0719a6f2dd9cfefa33ddd10800399cd59f36e5 (patch) | |
tree | 75ce0c0669265205634b4ae8d1b5930f2770de10 /components/script/dom/mediadevices.rs | |
parent | eee183d7f4dc38194e77200d655a40c00a02e5c3 (diff) | |
download | servo-8b0719a6f2dd9cfefa33ddd10800399cd59f36e5.tar.gz servo-8b0719a6f2dd9cfefa33ddd10800399cd59f36e5.zip |
Add MediaDevices::GetUserMedia
Diffstat (limited to 'components/script/dom/mediadevices.rs')
-rw-r--r-- | components/script/dom/mediadevices.rs | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/components/script/dom/mediadevices.rs b/components/script/dom/mediadevices.rs index 5897ad576eb..e018087a86c 100644 --- a/components/script/dom/mediadevices.rs +++ b/components/script/dom/mediadevices.rs @@ -2,15 +2,18 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -use crate::dom::bindings::codegen::Bindings::MediaDevicesBinding; -use crate::dom::bindings::error::Fallible; +use crate::dom::bindings::codegen::Bindings::MediaDevicesBinding::MediaStreamConstraints; +use crate::dom::bindings::codegen::Bindings::MediaDevicesBinding::{self, MediaDevicesMethods}; use crate::dom::bindings::reflector::reflect_dom_object; use crate::dom::bindings::reflector::DomObject; use crate::dom::bindings::root::DomRoot; use crate::dom::eventtarget::EventTarget; use crate::dom::globalscope::GlobalScope; -use crate::dom::window::Window; +use crate::dom::mediastream::MediaStream; +use crate::dom::promise::Promise; use dom_struct::dom_struct; +use servo_media::ServoMedia; +use std::rc::Rc; #[dom_struct] pub struct MediaDevices { @@ -32,3 +35,25 @@ impl MediaDevices { ) } } + +impl MediaDevicesMethods for MediaDevices { + /// https://w3c.github.io/mediacapture-main/#dom-mediadevices-getusermedia + fn GetUserMedia(&self, constraints: &MediaStreamConstraints) -> Rc<Promise> { + let p = Promise::new(&self.global()); + let media = ServoMedia::get().unwrap(); + let mut tracks = vec![]; + if constraints.audio { + if let Some(audio) = media.create_audioinput_stream() { + tracks.push(audio) + } + } + if constraints.video { + if let Some(video) = media.create_videoinput_stream() { + tracks.push(video) + } + } + let stream = MediaStream::new(&self.global(), tracks); + p.resolve_native(&stream); + p + } +} |