diff options
Diffstat (limited to 'testing/web-platform/tests/webxr/exclusive_requestFrame_nolayer.https.html')
-rw-r--r-- | testing/web-platform/tests/webxr/exclusive_requestFrame_nolayer.https.html | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webxr/exclusive_requestFrame_nolayer.https.html b/testing/web-platform/tests/webxr/exclusive_requestFrame_nolayer.https.html new file mode 100644 index 0000000000..c1c52f0374 --- /dev/null +++ b/testing/web-platform/tests/webxr/exclusive_requestFrame_nolayer.https.html @@ -0,0 +1,56 @@ +<!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> |