Validate spaces passed to getViewerPose()

This commit is contained in:
Manish Goregaokar 2019-04-04 16:09:53 -07:00
parent e33896f3ec
commit 3d790278f1
3 changed files with 16 additions and 5 deletions

View file

@ -4,6 +4,8 @@
use crate::dom::bindings::codegen::Bindings::XRFrameBinding;
use crate::dom::bindings::codegen::Bindings::XRFrameBinding::XRFrameMethods;
use crate::dom::bindings::error::Error;
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot};
use crate::dom::globalscope::GlobalScope;
@ -50,13 +52,19 @@ impl XRFrameMethods for XRFrame {
}
/// https://immersive-web.github.io/webxr/#dom-xrframe-getviewerpose
fn GetViewerPose(&self, reference: &XRReferenceSpace) -> Option<DomRoot<XRViewerPose>> {
fn GetViewerPose(
&self,
reference: &XRReferenceSpace,
) -> Result<Option<DomRoot<XRViewerPose>>, Error> {
if self.session != reference.upcast::<XRSpace>().session() {
return Err(Error::InvalidState);
}
let pose = reference.get_viewer_pose(&self.data);
Some(XRViewerPose::new(
Ok(Some(XRViewerPose::new(
&self.global(),
&self.session,
pose,
&self.data,
))
)))
}
}