blob: 37c73cee6c8e2657fcb0b07f1511eec52c3e98b6 [file] [log] [blame]
<!doctype html>
<!--
Tests that screen taps when using Cardboard are translated into controller
input, and that Daydream controller input is registered when using Daydream
View.
-->
<html>
<head>
<link rel="stylesheet" type="text/css" href="../resources/webxr_e2e.css">
</head>
<body>
<canvas id="webgl-canvas"></canvas>
<script src="../../../../../../third_party/blink/web_tests/resources/testharness.js"></script>
<script src="../resources/webxr_e2e.js"></script>
<script src="../resources/webvr_boilerplate.js"></script>
<script>
var t = async_test("Screen taps/clicks registered when in VR");
var pressed = false;
var index = -1;
var canStartTest = false;
var frameCounter = 0;
var lastInputChangeFrame = 0;
var lastInputValue = false;
window.addEventListener("gamepadconnected", function(e) {
t.step( () => {
assert_equals(index, -1, "Should only have one connected controller");
});
index = e.gamepad.index;
});
// GVR can very briefly disconnect then reconnect the controller, so
// handle that case.
window.addEventListener("gamepaddisconnected", function(e) {
index = -1;
});
// Returns true if no input has been received for 60 frames.
function isInputDrained() {
return frameCounter - lastInputChangeFrame > 60;
}
onPresentingAnimationFrameCallback = function() {
if (index == -1) return;
frameCounter++;
var gp = navigator.getGamepads()[index];
// This can happen if the controller has been briefly disconnected.
if (gp === null) return;
if (!canStartTest) {
if (gp.buttons[0].pressed != lastInputValue) {
lastInputChangeFrame = frameCounter;
}
lastInputValue = gp.buttons[0].pressed;
return;
}
if (!pressed && gp.buttons[0].pressed == true) {
pressed = true;
finishJavaScriptStep();
}
if (pressed && gp.buttons[0].pressed == false) {
t.done();
}
}
</script>
</body>
</html>