1
0
Fork 0
firefox/testing/web-platform/tests/webxr/exclusive_requestFrame_nolayer.https.html
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

56 lines
1.9 KiB
HTML

<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/webxr_util.js"></script>
<script src="resources/webxr_test_constants.js"></script>
<script>
let immersiveTestName = "XRSession requestAnimationFrame must fail if the session has "
+ "no baseLayer for immersive";
let nonImmersiveTestName = "XRSession requestAnimationFrame must fail if the session has "
+ "no baseLayer for non immersive";
let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
let testFunction = (session, controller, t, sessionObjects) => new Promise((resolve, reject) => {
// Clear the base layer that the boilerplate sets. This ensures that the rAF
// won't fire. If the fire *does* fire, it will fail because the baseLayer
// won't match the new baselayer we later create.
session.updateRenderState({
baseLayer: null
});
let gl = sessionObjects.gl;
// Session must have a baseLayer or frame requests will be ignored.
let webglLayer = new XRWebGLLayer(session, gl);
function onEarlyFrame(time, vrFrame) {
// We shouldn't be allowed to reach this callback with no baseLayer
t.step(() => {
assert_equals(session.renderState.baseLayer, webglLayer);
});
resolve();
}
// This callback shouldn't go through, since the session doesn't
// have a baseLayer when this call is made.
let handle = session.requestAnimationFrame(onEarlyFrame);
// Should still give us a valid handle, though.
assert_not_equals(handle, 0);
// Wait for a bit and set the baseLayer.
t.step_timeout(() => {
// Once the base layer is set the previously registered callback should run.
session.updateRenderState({
baseLayer: webglLayer
});
}, 300);
});
xr_session_promise_test(
immersiveTestName, testFunction, fakeDeviceInitParams, 'immersive-vr');
xr_session_promise_test(
nonImmersiveTestName, testFunction, fakeDeviceInitParams, 'inline');
</script>