aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrsession.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/xrsession.rs')
-rw-r--r--components/script/dom/xrsession.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs
index 997d88b34bf..4c8ac610a78 100644
--- a/components/script/dom/xrsession.rs
+++ b/components/script/dom/xrsession.rs
@@ -7,17 +7,23 @@ use crate::dom::bindings::codegen::Bindings::XRBinding::XRSessionMode;
use crate::dom::bindings::codegen::Bindings::XRSessionBinding;
use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XREnvironmentBlendMode;
use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRFrameRequestCallback;
+use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRReferenceSpaceOptions;
+use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRReferenceSpaceType;
use crate::dom::bindings::codegen::Bindings::XRSessionBinding::XRSessionMethods;
use crate::dom::bindings::codegen::Bindings::XRWebGLLayerBinding::XRWebGLLayerMethods;
+use crate::dom::bindings::error::Error;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
use crate::dom::bindings::reflector::reflect_dom_object;
+use crate::dom::bindings::reflector::DomObject;
use crate::dom::bindings::root::{Dom, DomRoot, MutNullableDom};
use crate::dom::eventtarget::EventTarget;
use crate::dom::globalscope::GlobalScope;
use crate::dom::promise::Promise;
use crate::dom::vrdisplay::VRDisplay;
use crate::dom::xrlayer::XRLayer;
+use crate::dom::xrreferencespace::XRReferenceSpace;
+use crate::dom::xrstationaryreferencespace::XRStationaryReferenceSpace;
use crate::dom::xrwebgllayer::XRWebGLLayer;
use dom_struct::dom_struct;
use std::rc::Rc;
@@ -111,4 +117,39 @@ impl XRSessionMethods for XRSession {
fn EnvironmentBlendMode(&self) -> XREnvironmentBlendMode {
self.blend_mode
}
+
+ /// https://immersive-web.github.io/webxr/#dom-xrsession-requestreferencespace
+ fn RequestReferenceSpace(&self, options: &XRReferenceSpaceOptions) -> Rc<Promise> {
+ let p = Promise::new(&self.global());
+
+ // https://immersive-web.github.io/webxr/#create-a-reference-space
+
+ match options.type_ {
+ XRReferenceSpaceType::Identity => {
+ p.resolve_native(&XRReferenceSpace::identity(
+ &self.global().as_window(),
+ self,
+ ));
+ },
+ XRReferenceSpaceType::Stationary => {
+ if let Some(subtype) = options.subtype {
+ p.resolve_native(&XRStationaryReferenceSpace::new(
+ &self.global().as_window(),
+ self,
+ subtype,
+ ));
+ } else {
+ p.reject_error(Error::Type(format!(
+ "stationary XRReferenceSpaces must specify a subtype"
+ )))
+ }
+ },
+ XRReferenceSpaceType::Bounded | XRReferenceSpaceType::Unbounded => {
+ // XXXManishearth eventually support these
+ p.reject_error(Error::NotSupported)
+ },
+ }
+
+ p
+ }
}