| <!DOCTYPE html> |
| <script src="../resources/testharness.js"></script> |
| <script src="../resources/testharnessreport.js"></script> |
| <script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script> |
| <script src="file:///gen/device/vr/public/mojom/vr_service.mojom.js"></script> |
| <script src="../external/wpt/resources/chromium/webxr-test.js"></script> |
| <script src="../external/wpt/webxr/resources/webxr_test_constants.js"></script> |
| <script src="../xr/resources/xr-test-utils.js"></script> |
| <canvas id="webgl-canvas"></canvas> |
| |
| <script> |
| function detachView(array_buffer_view) { |
| try { |
| postMessage('', '', [array_buffer_view.buffer]); |
| } catch { } |
| } |
| |
| let testFunction = function() { |
| in_canvas = document.body.appendChild(document.createElement('canvas')); |
| webgl = in_canvas.getContext('webgl', { xrCompatible: true }); |
| |
| return navigator.xr.requestSession('inline').then(session => { |
| session.updateRenderState({ |
| baseLayer: new XRWebGLLayer(session, webgl, { compositionDisabled: true }) |
| }); |
| |
| return session.requestReferenceSpace('viewer').then(space => { |
| return new Promise(resolve => { |
| counter = 0; |
| request_frame_callback = (t, frame) => { |
| webgl.canvas.height += counter % 2 * 2 - 1; |
| |
| pose = frame.getViewerPose(space); |
| |
| new ArrayBuffer(64); |
| new ArrayBuffer(64); |
| |
| if (++counter > 10) { |
| resolve(); |
| return; |
| } |
| |
| detached_array = pose.views[0].projectionMatrix; |
| detachView(detached_array); |
| |
| session.requestAnimationFrame(request_frame_callback); |
| } |
| session.requestAnimationFrame(request_frame_callback); |
| }); |
| }); |
| }); |
| } |
| |
| promise_test(() => testFunction(), "Test that xrview.projection being detached doesn't cause a crash."); |
| |
| </script> |