chromium/chrome/test/data/xr/e2e_test_files/html/webxr_test_controller_poses.html

<!doctype html>
<!--
Tests that WebXR controller poses are properly surfaced.
-->
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="../resources/webxr_e2e.css">
  </head>
  <body>
    <canvas id="webgl-canvas"></canvas>
    <script src="../resources/webxr_e2e.js"></script>
    <script src="../resources/webxr_boilerplate.js"></script>
    <script>
      let expectedMatrix = null;
      let expectedIndex = -1;

      function matricesApproximatelyEqual(a, b) {
        console.error('Given ' + JSON.stringify(a));
        console.error('Expecting ' + JSON.stringify(b));
        if (a === null || b === null) {
          return false;
        }
        if (a.length != b.length) {
          return false;
        }
        for (let i = 0; i < a.length; ++i) {
          if (Math.abs(a[i] - b[i]) > 0.00001){
            return false;
          }
        }
        return true;
      }

      function stepWaitForMatchingPose(index, m) {
        expectedMatrix = m;
        expectedIndex = index;
        onImmersiveXRFrameCallback = function(session, frame) {
          console.log('Got immersive frame');
          let inputSources = session.inputSources;
          if (inputSources.length <= expectedIndex)
            return
          let inputSource = inputSources[expectedIndex];
          if (!inputSource.gripSpace)
            return
          let refSpace = sessionInfos[getSessionType(session)].currentRefSpace;
          let pose = frame.getPose(inputSource.gripSpace, refSpace);
          if (!pose)
            return
          if (matricesApproximatelyEqual(
              pose.transform.matrix, expectedMatrix)) {
            onImmersiveXRFrameCallback = null;
            finishJavaScriptStep();
          }
        }
      }
    </script>
  </body>
</html>