xrFrame_lifetime.https.html (2140B)
1 <!DOCTYPE html> 2 <body> 3 <script src=/resources/testharness.js></script> 4 <script src=/resources/testharnessreport.js></script> 5 <script src="resources/webxr_util.js"></script> 6 <script src="resources/webxr_test_constants.js"></script> 7 8 <script> 9 let immersiveTestName = "XRFrame methods throw exceptions outside of the " + 10 "requestAnimationFrame callback for immersive sessions"; 11 let nonImmersiveTestName = "XRFrame methods throw exceptions outside of the " + 12 "requestAnimationFrame callback for non-immersive sessions"; 13 14 let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; 15 16 let testFunction = (testSession, testController, t) => new Promise((resolve) => { 17 let staleFrame = null; 18 let currentReferenceSpace = null; 19 let currentViewerSpace = null; 20 21 function onFrame(time, xrFrame) { 22 t.step(() => { 23 assert_true(xrFrame instanceof XRFrame); 24 }); 25 26 staleFrame = xrFrame; 27 step_timeout(afterFrame, 0); 28 } 29 30 function afterFrame() { 31 t.step(() => { 32 // Attempting to call a method on the frame outside the callback that 33 // originally provided it should cause it to throw an exception. 34 assert_throws_dom('InvalidStateError', () => staleFrame.getViewerPose(currentReferenceSpace)); 35 assert_throws_dom('InvalidStateError', () => staleFrame.getPose(currentViewerSpace, currentReferenceSpace)); 36 }); 37 38 // Test does not complete until the this function has executed. 39 resolve(); 40 } 41 42 testSession.requestReferenceSpace('viewer').then((viewerSpace) => { 43 currentViewerSpace = viewerSpace; 44 testSession.requestReferenceSpace('local').then((referenceSpace) => { 45 currentReferenceSpace = referenceSpace; 46 testSession.requestAnimationFrame(onFrame); 47 }); 48 }); 49 }); 50 51 xr_session_promise_test(immersiveTestName, testFunction, 52 fakeDeviceInitParams, 'immersive-vr'); 53 xr_session_promise_test(nonImmersiveTestName, testFunction, 54 fakeDeviceInitParams, 'inline', { 'requiredFeatures': ['local'] }); 55 56 </script> 57 </body>