blob: 1d0230a2abf5cc59219690a4ae372470a17695fa [file] [log] [blame]
<!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>