diff --git a/components/script/dom/webidls/XRFrame.webidl b/components/script/dom/webidls/XRFrame.webidl index a393acbc588..3c202d5e061 100644 --- a/components/script/dom/webidls/XRFrame.webidl +++ b/components/script/dom/webidls/XRFrame.webidl @@ -10,5 +10,5 @@ interface XRFrame { [Throws] XRViewerPose? getViewerPose(XRReferenceSpace referenceSpace); [Throws] XRPose? getPose(XRSpace space, XRSpace relativeTo); - // XRInputPose? getInputPose(XRInputSource inputSource, optional XRReferenceSpace referenceSpace); + sequence getHitTestResults(XRHitTestSource hitTestSource); }; diff --git a/components/script/dom/xrframe.rs b/components/script/dom/xrframe.rs index fc1351383bd..fdafd932e8a 100644 --- a/components/script/dom/xrframe.rs +++ b/components/script/dom/xrframe.rs @@ -8,6 +8,8 @@ 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; +use crate::dom::xrhittestresult::XRHitTestResult; +use crate::dom::xrhittestsource::XRHitTestSource; use crate::dom::xrpose::XRPose; use crate::dom::xrreferencespace::XRReferenceSpace; use crate::dom::xrsession::{ApiPose, XRSession}; @@ -109,4 +111,14 @@ impl XRFrameMethods for XRFrame { let pose = relative_to.inverse().pre_transform(&space); Ok(Some(XRPose::new(&self.global(), pose))) } + + /// https://immersive-web.github.io/hit-test/#dom-xrframe-gethittestresults + fn GetHitTestResults(&self, source: &XRHitTestSource) -> Vec> { + self.data + .hit_test_results + .iter() + .filter(|r| r.id == source.id()) + .map(|r| XRHitTestResult::new(&self.global(), *r, self)) + .collect() + } } diff --git a/components/script/dom/xrhittestsource.rs b/components/script/dom/xrhittestsource.rs index 8825c1e7e7c..a665a9f1b71 100644 --- a/components/script/dom/xrhittestsource.rs +++ b/components/script/dom/xrhittestsource.rs @@ -37,6 +37,10 @@ impl XRHitTestSource { global, ) } + + pub fn id(&self) -> HitTestId { + self.id + } } impl XRHitTestSourceMethods for XRHitTestSource {