blob: 4f267304263f49e2e4e70b55d9e49abd71d7e590 [file] [log] [blame]
<!DOCTYPE html><!-- webkit-test-runner [ useFlexibleViewport=true ] -->
<html>
<head>
<meta name="viewport" content="initial-scale=1, user-scalable=no">
</head>
<body onload="runTest()">
<input type="text" onclick="didFocus()" placeholder="Tap here to open keyboard">
<script src="../../../resources/ui-helper.js"></script>
<script src="../../../resources/js-test.js"></script>
<script>
description('This tests "resize" event on window.visualViewport and height getting updated upon keyboard showing up on iOS<br>'
+ 'To manually test, tap the text field below to show the software keyboard then dismiss it.');
jsTestIsAsync = true;
function didFocus() { }
async function runTest() {
if (window.testRunner)
await UIHelper.ensurePresentationUpdate();
window.originalWidth = window.visualViewport.width;
window.originalHeight = window.visualViewport.height;
window.resizeCount = 0;
window.visualViewport.addEventListener('resize', () => {
resizeCount++;
});
shouldBe('resizeCount', '0');
const rect = document.querySelector('input').getBoundingClientRect();
if (window.testRunner) {
await UIHelper.activateAndWaitForInputSessionAt(rect.left + 5, rect.top + 5);
await UIHelper.ensurePresentationUpdate();
} else {
await new Promise((resolve) => {
window.didFocus = () => setTimeout(resolve, 500);
});
}
shouldBe('resizeCount', '1');
shouldBe('originalWidth', 'window.visualViewport.width');
shouldNotBe('window.visualViewport.height', 'originalHeight');
shouldBeTrue('window.visualViewport.height < originalHeight');
document.querySelector('input').blur();
if (window.testRunner) {
await UIHelper.waitForKeyboardToHide();
await UIHelper.ensurePresentationUpdate();
} else {
await new Promise((resolve) => {
setTimeout(resolve, 500);
});
}
shouldBe('resizeCount', '2');
shouldBe('originalWidth', 'window.visualViewport.width');
shouldBe('window.visualViewport.height', 'originalHeight');
shouldBeFalse('window.visualViewport.height < originalHeight');
finishJSTest();
}
</script>
</body>
</html>