blob: d92e2fb498e8b2713b8d995588ebaf81b028eb77 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<script src="../../../resources/js-test.js"></script>
<script src="../../../resources/ui-helper.js"></script>
</head>
<body>
<input inputmode="none">
<div id="countdown"></div>
<script>
jsTestIsAsync = true;
description('This tests updating inputmode of an input element from "none" to "text". The software keyboard should be brought up after pointerup.<br>'
+ 'To manually test, tap on the input element below. The software keyboard should be brought up');
const input = document.querySelector("input");
input.focus();
let originalVisualViewportHeight;
let logs = [];
async function runTest() {
if (window.testRunner)
await UIHelper.setHardwareKeyboardAttached(false);
originalVisualViewportHeight = window.visualViewport.height;
let didResize = () => { };
window.visualViewport.addEventListener('resize', () => didResize());
input.addEventListener('pointerdown', (event) => {
input.inputMode = 'text';
logs.push({event, visualViewportHeight: visualViewport.height});
}, {once: true});
input.addEventListener('pointerup', (event) => {
logs.push({event, visualViewportHeight: visualViewport.height});
}, {once: true});
if (window.testRunner) {
await UIHelper.activateFormControl(input);
window.keyboardRect = await UIHelper.inputViewBounds();
shouldBeTrue('textHeight = keyboardRect.height; keyboardRect.height > 0');
} else {
await new Promise((resolve) => { didResize = resolve; });
shouldBeTrue('textHeight = document.documentElement.clientHeight - visualViewport.height; document.documentElement.clientHeight - visualViewport.height < 100');
}
shouldBe('logs.length', '2');
shouldBeEqualToString('logs[0].event.type', 'pointerdown');
shouldBe('logs[0].visualViewportHeight', 'originalVisualViewportHeight');
shouldBeEqualToString('logs[1].event.type', 'pointerup');
shouldBe('logs[1].visualViewportHeight', 'originalVisualViewportHeight');
finishJSTest();
}
window.onload = () => setTimeout(runTest, 0);
</script>
</body>
</html>