From 0d137d276a3a2ad3749750c0e34ebbfd91511106 Mon Sep 17 00:00:00 2001 From: Daniel Adams <70986246+msub2@users.noreply.github.com> Date: Mon, 12 Aug 2024 18:28:40 -1000 Subject: [PATCH] webxr: Add missing IDL members from AR Module (#33007) * Add missing IDL members from AR module Signed-off-by: Daniel Adams * Update test expectations Signed-off-by: Daniel Adams * ./mach fmt Signed-off-by: Daniel Adams --------- Signed-off-by: Daniel Adams --- .../script/dom/webidls/XRSession.webidl | 25 +++++++++++++------ components/script/dom/webidls/XRView.webidl | 3 +++ components/script/dom/xrsession.rs | 10 +++++++- components/script/dom/xrview.rs | 6 +++++ .../ar-module/idlharness.https.window.js.ini | 7 ------ .../xrSession_interactionMode.https.html.ini | 6 ----- .../ar-module/idlharness.https.window.js.ini | 7 ------ 7 files changed, 35 insertions(+), 29 deletions(-) diff --git a/components/script/dom/webidls/XRSession.webidl b/components/script/dom/webidls/XRSession.webidl index 89e6dc5c68c..1f78d45024c 100644 --- a/components/script/dom/webidls/XRSession.webidl +++ b/components/script/dom/webidls/XRSession.webidl @@ -16,18 +16,21 @@ enum XRVisibilityState { "hidden", }; +enum XRInteractionMode { + "screen-space", + "world-space", +}; + callback XRFrameRequestCallback = undefined (DOMHighResTimeStamp time, XRFrame frame); [SecureContext, Exposed=Window, Pref="dom.webxr.enabled"] interface XRSession : EventTarget { - // // Attributes - readonly attribute XREnvironmentBlendMode environmentBlendMode; - + // Attributes readonly attribute XRVisibilityState visibilityState; [SameObject] readonly attribute XRRenderState renderState; [SameObject] readonly attribute XRInputSourceArray inputSources; - // // Methods + // Methods [Throws] undefined updateRenderState(optional XRRenderStateInit state = {}); Promise requestReferenceSpace(XRReferenceSpaceType type); @@ -36,10 +39,7 @@ interface XRSession : EventTarget { Promise end(); - // hit test module - Promise requestHitTestSource(XRHitTestOptionsInit options); - - // // Events + // Events attribute EventHandler onend; attribute EventHandler onselect; attribute EventHandler onsqueeze; @@ -49,4 +49,13 @@ interface XRSession : EventTarget { attribute EventHandler onsqueezestart; attribute EventHandler onsqueezeend; attribute EventHandler onvisibilitychange; + + // AR Module + // Attributes + readonly attribute XREnvironmentBlendMode environmentBlendMode; + readonly attribute XRInteractionMode interactionMode; + + // Hit Test Module + // Methods + Promise requestHitTestSource(XRHitTestOptionsInit options); }; diff --git a/components/script/dom/webidls/XRView.webidl b/components/script/dom/webidls/XRView.webidl index 7f433425a8b..2b4bf5f5f0a 100644 --- a/components/script/dom/webidls/XRView.webidl +++ b/components/script/dom/webidls/XRView.webidl @@ -15,4 +15,7 @@ interface XRView { readonly attribute XREye eye; readonly attribute Float32Array projectionMatrix; readonly attribute XRRigidTransform transform; + + // AR Module + readonly attribute boolean isFirstPersonObserver; }; diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs index 2b189002a80..9b42c146a0f 100644 --- a/components/script/dom/xrsession.rs +++ b/components/script/dom/xrsession.rs @@ -33,7 +33,8 @@ use crate::dom::bindings::codegen::Bindings::XRRenderStateBinding::{ XRRenderStateInit, XRRenderStateMethods, }; use crate::dom::bindings::codegen::Bindings::XRSessionBinding::{ - XREnvironmentBlendMode, XRFrameRequestCallback, XRSessionMethods, XRVisibilityState, + XREnvironmentBlendMode, XRFrameRequestCallback, XRInteractionMode, XRSessionMethods, + XRVisibilityState, }; use crate::dom::bindings::codegen::Bindings::XRSystemBinding::XRSessionMode; use crate::dom::bindings::error::{Error, ErrorResult}; @@ -873,6 +874,13 @@ impl XRSessionMethods for XRSession { p } + + /// + fn InteractionMode(&self) -> XRInteractionMode { + // Until Servo supports WebXR sessions on mobile phones or similar non-XR devices, + // this should always be world space + XRInteractionMode::World_space + } } // The pose of an object in native-space. Should never be exposed. diff --git a/components/script/dom/xrview.rs b/components/script/dom/xrview.rs index 58a4b374f3b..f26bf0f126d 100644 --- a/components/script/dom/xrview.rs +++ b/components/script/dom/xrview.rs @@ -106,4 +106,10 @@ impl XRViewMethods for XRView { fn Transform(&self) -> DomRoot { DomRoot::from_ref(&self.transform) } + + /// + fn IsFirstPersonObserver(&self) -> bool { + // Servo is not currently supported anywhere that supports this, so return false + false + } } diff --git a/tests/wpt/meta-legacy-layout/webxr/ar-module/idlharness.https.window.js.ini b/tests/wpt/meta-legacy-layout/webxr/ar-module/idlharness.https.window.js.ini index 8d851f3188c..9e911137049 100644 --- a/tests/wpt/meta-legacy-layout/webxr/ar-module/idlharness.https.window.js.ini +++ b/tests/wpt/meta-legacy-layout/webxr/ar-module/idlharness.https.window.js.ini @@ -1,7 +1,4 @@ [idlharness.https.window.html] - [XRSession interface: attribute interactionMode] - expected: FAIL - [idl_test setup] expected: FAIL @@ -10,7 +7,3 @@ [XRSession interface: xrSession must inherit property "interactionMode" with the proper type] expected: FAIL - - [XRView interface: attribute isFirstPersonObserver] - expected: FAIL - diff --git a/tests/wpt/meta-legacy-layout/webxr/ar-module/xrSession_interactionMode.https.html.ini b/tests/wpt/meta-legacy-layout/webxr/ar-module/xrSession_interactionMode.https.html.ini index f71c95cd14d..c810351c465 100644 --- a/tests/wpt/meta-legacy-layout/webxr/ar-module/xrSession_interactionMode.https.html.ini +++ b/tests/wpt/meta-legacy-layout/webxr/ar-module/xrSession_interactionMode.https.html.ini @@ -8,12 +8,6 @@ [Tests interactionMode for an AR_SCREEN_DEVICE] expected: FAIL - [Tests interactionMode for an AR_HMD_DEVICE] - expected: FAIL - - [Tests interactionMode for an VR_HMD_DEVICE] - expected: FAIL - [Tests interactionMode for an AR_HMD_DEVICE - webgl] expected: FAIL diff --git a/tests/wpt/meta/webxr/ar-module/idlharness.https.window.js.ini b/tests/wpt/meta/webxr/ar-module/idlharness.https.window.js.ini index 8d851f3188c..9e911137049 100644 --- a/tests/wpt/meta/webxr/ar-module/idlharness.https.window.js.ini +++ b/tests/wpt/meta/webxr/ar-module/idlharness.https.window.js.ini @@ -1,7 +1,4 @@ [idlharness.https.window.html] - [XRSession interface: attribute interactionMode] - expected: FAIL - [idl_test setup] expected: FAIL @@ -10,7 +7,3 @@ [XRSession interface: xrSession must inherit property "interactionMode" with the proper type] expected: FAIL - - [XRView interface: attribute isFirstPersonObserver] - expected: FAIL -