aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/mod.rs1
-rw-r--r--components/script/dom/xrframe.rs12
-rw-r--r--components/script/dom/xrspace.rs6
3 files changed, 14 insertions, 5 deletions
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs
index d6a6c30b823..598832403e0 100644
--- a/components/script/dom/mod.rs
+++ b/components/script/dom/mod.rs
@@ -549,6 +549,7 @@ pub mod xmlserializer;
pub mod xr;
pub mod xrframe;
pub mod xrinputsource;
+pub mod xrinputsourceevent;
pub mod xrpose;
pub mod xrreferencespace;
pub mod xrrenderstate;
diff --git a/components/script/dom/xrframe.rs b/components/script/dom/xrframe.rs
index 29572c02300..6c67d896f81 100644
--- a/components/script/dom/xrframe.rs
+++ b/components/script/dom/xrframe.rs
@@ -93,8 +93,16 @@ impl XRFrameMethods for XRFrame {
if !self.active.get() {
return Err(Error::InvalidState);
}
- let space = space.get_pose(&self.data);
- let relative_to = relative_to.get_pose(&self.data);
+ let space = if let Some(space) = space.get_pose(&self.data) {
+ space
+ } else {
+ return Ok(None);
+ };
+ let relative_to = if let Some(r) = relative_to.get_pose(&self.data) {
+ r
+ } else {
+ return Ok(None);
+ };
let pose = relative_to.inverse().pre_transform(&space);
Ok(Some(XRPose::new(&self.global(), pose)))
}
diff --git a/components/script/dom/xrspace.rs b/components/script/dom/xrspace.rs
index 6fa00d1cffe..8162a558542 100644
--- a/components/script/dom/xrspace.rs
+++ b/components/script/dom/xrspace.rs
@@ -57,9 +57,9 @@ impl XRSpace {
/// The reference origin used is common between all
/// get_pose calls for spaces from the same device, so this can be used to compare
/// with other spaces
- pub fn get_pose(&self, base_pose: &Frame) -> ApiPose {
+ pub fn get_pose(&self, base_pose: &Frame) -> Option<ApiPose> {
if let Some(reference) = self.downcast::<XRReferenceSpace>() {
- reference.get_pose(base_pose)
+ Some(reference.get_pose(base_pose))
} else if let Some(source) = self.input_source.get() {
// XXXManishearth we should be able to request frame information
// for inputs when necessary instead of always loading it
@@ -72,7 +72,7 @@ impl XRSpace {
.iter()
.find(|i| i.id == id)
.expect("no input found");
- cast_transform(frame.target_ray_origin)
+ Some(cast_transform(frame.target_ray_origin))
} else {
unreachable!()
}