summaryrefslogtreecommitdiffstats
path: root/dom/webidl/WebXR.webidl
diff options
context:
space:
mode:
Diffstat (limited to 'dom/webidl/WebXR.webidl')
-rw-r--r--dom/webidl/WebXR.webidl241
1 files changed, 241 insertions, 0 deletions
diff --git a/dom/webidl/WebXR.webidl b/dom/webidl/WebXR.webidl
new file mode 100644
index 0000000000..302c82156a
--- /dev/null
+++ b/dom/webidl/WebXR.webidl
@@ -0,0 +1,241 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * The origin of this IDL file is
+ * https://immersive-web.github.io/webxr/
+ */
+
+
+[Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRSystem : EventTarget {
+ // Methods
+ [NewObject]
+ Promise<boolean> isSessionSupported(XRSessionMode mode);
+ [NewObject, NeedsCallerType]
+ Promise<XRSession> requestSession(XRSessionMode mode, optional XRSessionInit options = {});
+
+ // Events
+ attribute EventHandler ondevicechange;
+};
+
+enum XRSessionMode {
+ "inline",
+ "immersive-vr",
+ "immersive-ar",
+};
+
+dictionary XRSessionInit {
+ sequence<any> requiredFeatures;
+ sequence<any> optionalFeatures;
+};
+
+enum XRVisibilityState {
+ "visible",
+ "visible-blurred",
+ "hidden",
+};
+
+[Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRSession : EventTarget {
+ // Attributes
+ readonly attribute XRVisibilityState visibilityState;
+ [SameObject] readonly attribute XRRenderState renderState;
+ [SameObject] readonly attribute XRInputSourceArray inputSources;
+ readonly attribute float? frameRate;
+ readonly attribute Float32Array? supportedFrameRates;
+
+ // Methods
+ [Throws]
+ undefined updateRenderState(optional XRRenderStateInit state = {});
+ [NewObject]
+ Promise<XRReferenceSpace> requestReferenceSpace(XRReferenceSpaceType type);
+ [NewObject]
+ Promise<undefined> updateTargetFrameRate(float rate);
+
+ [Throws]
+ long requestAnimationFrame(XRFrameRequestCallback callback);
+ [Throws]
+ undefined cancelAnimationFrame(long handle);
+
+ [NewObject]
+ Promise<undefined> end();
+
+ // Events
+ attribute EventHandler onend;
+ attribute EventHandler oninputsourceschange;
+ attribute EventHandler onselect;
+ attribute EventHandler onselectstart;
+ attribute EventHandler onselectend;
+ attribute EventHandler onsqueeze;
+ attribute EventHandler onsqueezestart;
+ attribute EventHandler onsqueezeend;
+ attribute EventHandler onvisibilitychange;
+};
+
+dictionary XRRenderStateInit {
+ double depthNear;
+ double depthFar;
+ double inlineVerticalFieldOfView;
+ XRWebGLLayer? baseLayer;
+};
+
+[Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRRenderState {
+ readonly attribute double depthNear;
+ readonly attribute double depthFar;
+ readonly attribute double? inlineVerticalFieldOfView;
+ readonly attribute XRWebGLLayer? baseLayer;
+};
+
+callback XRFrameRequestCallback = undefined (DOMHighResTimeStamp time, XRFrame frame);
+
+[ProbablyShortLivingWrapper, Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRFrame {
+ [SameObject] readonly attribute XRSession session;
+
+ [Throws] XRViewerPose? getViewerPose(XRReferenceSpace referenceSpace);
+ [Throws] XRPose? getPose(XRSpace space, XRSpace baseSpace);
+};
+
+[Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRSpace : EventTarget {
+
+};
+
+enum XRReferenceSpaceType {
+ "viewer",
+ "local",
+ "local-floor",
+ "bounded-floor",
+ "unbounded"
+};
+
+[Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRReferenceSpace : XRSpace {
+ [NewObject]
+ XRReferenceSpace getOffsetReferenceSpace(XRRigidTransform originOffset);
+
+ attribute EventHandler onreset;
+};
+
+[Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRBoundedReferenceSpace : XRReferenceSpace {
+ // TODO: Use FrozenArray once available. (Bug 1236777)
+ [Frozen, Cached, Pure]
+ readonly attribute sequence<DOMPointReadOnly> boundsGeometry;
+};
+
+enum XREye {
+ "none",
+ "left",
+ "right"
+};
+
+[ProbablyShortLivingWrapper, Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRView {
+ readonly attribute XREye eye;
+ [Throws]
+ readonly attribute Float32Array projectionMatrix;
+ [Throws, SameObject]
+ readonly attribute XRRigidTransform transform;
+};
+
+[ProbablyShortLivingWrapper, Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRViewport {
+ readonly attribute long x;
+ readonly attribute long y;
+ readonly attribute long width;
+ readonly attribute long height;
+};
+
+[ProbablyShortLivingWrapper, Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRRigidTransform {
+ [Throws]
+ constructor(optional DOMPointInit position = {}, optional DOMPointInit orientation = {});
+ [SameObject] readonly attribute DOMPointReadOnly position;
+ [SameObject] readonly attribute DOMPointReadOnly orientation;
+ [Throws]
+ readonly attribute Float32Array matrix;
+ [SameObject] readonly attribute XRRigidTransform inverse;
+};
+
+[ProbablyShortLivingWrapper, Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRPose {
+ [SameObject] readonly attribute XRRigidTransform transform;
+ readonly attribute boolean emulatedPosition;
+};
+
+[ProbablyShortLivingWrapper, Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRViewerPose : XRPose {
+ // TODO: Use FrozenArray once available. (Bug 1236777)
+ [Constant, Cached, Frozen]
+ readonly attribute sequence<XRView> views;
+};
+
+enum XRHandedness {
+ "none",
+ "left",
+ "right"
+};
+
+enum XRTargetRayMode {
+ "gaze",
+ "tracked-pointer",
+ "screen"
+};
+
+[Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRInputSource {
+ readonly attribute XRHandedness handedness;
+ readonly attribute XRTargetRayMode targetRayMode;
+ [SameObject] readonly attribute XRSpace targetRaySpace;
+ [SameObject] readonly attribute XRSpace? gripSpace;
+ // TODO: Use FrozenArray once available. (Bug 1236777)
+ [Constant, Cached, Frozen]
+ readonly attribute sequence<DOMString> profiles;
+ // https://immersive-web.github.io/webxr-gamepads-module/
+ [SameObject] readonly attribute Gamepad? gamepad;
+};
+
+
+[Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRInputSourceArray {
+ iterable<XRInputSource>;
+ readonly attribute unsigned long length;
+ getter XRInputSource(unsigned long index);
+};
+
+typedef (WebGLRenderingContext or
+ WebGL2RenderingContext) XRWebGLRenderingContext;
+
+dictionary XRWebGLLayerInit {
+ boolean antialias = true;
+ boolean depth = true;
+ boolean stencil = false;
+ boolean alpha = true;
+ boolean ignoreDepthValues = false;
+ double framebufferScaleFactor = 1.0;
+};
+
+[Pref="dom.vr.webxr.enabled", SecureContext, Exposed=Window]
+interface XRWebGLLayer {
+ [Throws]
+ constructor(XRSession session,
+ XRWebGLRenderingContext context,
+ optional XRWebGLLayerInit layerInit = {});
+ // Attributes
+ readonly attribute boolean antialias;
+ readonly attribute boolean ignoreDepthValues;
+
+ [SameObject] readonly attribute WebGLFramebuffer? framebuffer;
+ readonly attribute unsigned long framebufferWidth;
+ readonly attribute unsigned long framebufferHeight;
+
+ // Methods
+ XRViewport? getViewport(XRView view);
+
+ // Static Methods
+ static double getNativeFramebufferScaleFactor(XRSession session);
+};