diff --git a/components/script/dom/xrinputsourcearray.rs b/components/script/dom/xrinputsourcearray.rs index d0d4a747052b..bf63e38e073b 100644 --- a/components/script/dom/xrinputsourcearray.rs +++ b/components/script/dom/xrinputsourcearray.rs @@ -2,21 +2,26 @@ * 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::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::XRInputSourceArrayBinding; -use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; -use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector}; +use crate::dom::bindings::root::{Dom, DomRoot}; use crate::dom::globalscope::GlobalScope; +use crate::dom::xrinputsource::XRInputSource; +use crate::dom::xrsession::XRSession; use dom_struct::dom_struct; #[dom_struct] pub struct XRInputSourceArray { reflector_: Reflector, + input_sources: DomRefCell>>, } impl XRInputSourceArray { fn new_inherited() -> XRInputSourceArray { XRInputSourceArray { reflector_: Reflector::new(), + input_sources: DomRefCell::new(vec![]), } } @@ -27,4 +32,17 @@ impl XRInputSourceArray { XRInputSourceArrayBinding::Wrap, ) } + + pub fn set_initial_inputs(&self, session: &XRSession) { + let mut input_sources = self.input_sources.borrow_mut(); + let global = self.global(); + session.with_session(|sess| { + for info in sess.initial_inputs() { + // XXXManishearth we should be able to listen for updates + // to the input sources + let input = XRInputSource::new(&global, &session, *info); + input_sources.push(Dom::from_ref(&input)); + } + }); + } }