From 5c8132c379a2d5612d5c904c7fe65b54d7f8ec70 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Mon, 29 Apr 2019 19:15:27 -0700 Subject: [PATCH] Use initialized input sources in getInputSources() --- components/script/dom/vrdisplay.rs | 11 ++++++++++- components/script/dom/webidls/XRSession.webidl | 3 +++ components/script/dom/xrsession.rs | 6 ++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/components/script/dom/vrdisplay.rs b/components/script/dom/vrdisplay.rs index c00d1c75e647..1f7480e2ef0d 100644 --- a/components/script/dom/vrdisplay.rs +++ b/components/script/dom/vrdisplay.rs @@ -926,7 +926,7 @@ impl VRDisplay { /// Initialize XRInputSources fn initialize_inputs(&self) { if self.initialized_inputs.get() { - return + return; } self.initialized_inputs.set(true); @@ -955,6 +955,15 @@ impl VRDisplay { Err(_) => {}, } } + + pub fn get_input_sources(&self) -> Vec> { + self.initialize_inputs(); + self.input_sources + .borrow() + .iter() + .map(|(_, x)| DomRoot::from_ref(&**x)) + .collect() + } } // WebVR Spec: If the number of values in the leftBounds/rightBounds arrays diff --git a/components/script/dom/webidls/XRSession.webidl b/components/script/dom/webidls/XRSession.webidl index f22918d469d7..798a8f7b7ae4 100644 --- a/components/script/dom/webidls/XRSession.webidl +++ b/components/script/dom/webidls/XRSession.webidl @@ -25,7 +25,10 @@ interface XRSession : EventTarget { // // Methods Promise requestReferenceSpace(XRReferenceSpaceOptions options); + // workaround until we have FrozenArray + // see https://github.com/servo/servo/issues/10427#issuecomment-449593626 // FrozenArray getInputSources(); + sequence getInputSources(); Promise updateRenderState(optional XRRenderStateInit state); long requestAnimationFrame(XRFrameRequestCallback callback); diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs index 4b855cba4c84..67c7a10e36ca 100644 --- a/components/script/dom/xrsession.rs +++ b/components/script/dom/xrsession.rs @@ -19,6 +19,7 @@ use crate::dom::eventtarget::EventTarget; use crate::dom::globalscope::GlobalScope; use crate::dom::promise::Promise; use crate::dom::vrdisplay::VRDisplay; +use crate::dom::xrinputsource::XRInputSource; use crate::dom::xrlayer::XRLayer; use crate::dom::xrreferencespace::XRReferenceSpace; use crate::dom::xrrenderstate::XRRenderState; @@ -153,4 +154,9 @@ impl XRSessionMethods for XRSession { p } + + /// https://immersive-web.github.io/webxr/#dom-xrsession-getinputsources + fn GetInputSources(&self) -> Vec> { + self.display.get_input_sources() + } }