// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://immersive-web.github.io/webxr/#xrsession-interface
enum XRSessionMode {
"inline",
"immersive-vr",
"immersive-ar",
};
enum XREnvironmentBlendMode {
"opaque",
"additive",
"alpha-blend",
};
enum XRVisibilityState {
"visible",
"visible-blurred",
"hidden",
};
enum XRInteractionMode {
"screen-space",
"world-space"
};
enum XRImageTrackingScore {
"untrackable",
"trackable",
};
enum XRReflectionFormat {
"srgba8",
"rgba16f",
};
[
ActiveScriptWrappable,
SecureContext,
Exposed=Window,
RuntimeEnabled=WebXR
] interface XRSession : EventTarget {
readonly attribute XREnvironmentBlendMode environmentBlendMode;
readonly attribute XRInteractionMode interactionMode;
readonly attribute XRVisibilityState visibilityState;
[RuntimeEnabled=WebXRFrameRate] readonly attribute float? frameRate;
[RuntimeEnabled=WebXRFrameRate] readonly attribute Float32Array? supportedFrameRates;
[SameObject] readonly attribute XRRenderState renderState;
[CallWith=ScriptState, MeasureAs=XRSessionGetInputSources, SameObject] readonly attribute XRInputSourceArray inputSources;
[SameObject] readonly attribute XRDOMOverlayState domOverlayState;
readonly attribute XRReflectionFormat preferredReflectionFormat;
[RuntimeEnabled=WebXREnabledFeatures] readonly attribute FrozenArray<DOMString> enabledFeatures;
[RuntimeEnabled=WebXRSpecParity] readonly attribute boolean isSystemKeyboardSupported;
attribute EventHandler onend;
attribute EventHandler onselect;
attribute EventHandler oninputsourceschange;
attribute EventHandler onselectstart;
attribute EventHandler onselectend;
attribute EventHandler onvisibilitychange;
attribute EventHandler onsqueeze;
attribute EventHandler onsqueezestart;
attribute EventHandler onsqueezeend;
[RuntimeEnabled=WebXRFrameRate] attribute EventHandler onframeratechange;
[RaisesException] void updateRenderState(optional XRRenderStateInit init = {});
[RuntimeEnabled=WebXRFrameRate, RaisesException] Promise<undefined> updateTargetFrameRate(float rate);
[CallWith=ScriptState, RaisesException] Promise<XRReferenceSpace> requestReferenceSpace(XRReferenceSpaceType type);
long requestAnimationFrame(XRFrameRequestCallback callback);
void cancelAnimationFrame(long handle);
[CallWith=ScriptState, Measure, RaisesException] Promise<undefined> end();
// https://github.com/immersive-web/hit-test/blob/master/hit-testing-explainer.md
[CallWith=ScriptState, MeasureAs=XRSessionRequestHitTestSource, RaisesException]
Promise<XRHitTestSource> requestHitTestSource(XRHitTestOptionsInit options);
[CallWith=ScriptState, MeasureAs=XRSessionRequestHitTestSourceForTransientInput, RaisesException]
Promise<XRTransientInputHitTestSource> requestHitTestSourceForTransientInput(XRTransientInputHitTestOptionsInit options);
[CallWith=ScriptState, MeasureAs=XRSessionRequestLightProbe, RaisesException]
Promise<XRLightProbe> requestLightProbe(optional XRLightProbeInit options = {});
[RuntimeEnabled=WebXRImageTracking, CallWith=ScriptState, MeasureAs=XRSessionGetTrackedImageScores, RaisesException]
Promise<FrozenArray<XRImageTrackingScore>> getTrackedImageScores();
[RaisesException]
readonly attribute XRDepthUsage? depthUsage;
[RaisesException]
readonly attribute XRDepthDataFormat? depthDataFormat;
};