blob: 5084ffe5ad7f5e4f9bcf4af5fc88736b31382310 [file] [log] [blame]
<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
<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>
<style>
.hidden {
height: 0;
overflow: hidden;
}
iframe {
width: 100px;
height: 44px;
position: absolute;
border: none;
}
#frame2 {
top: 100px;
}
#frame3 {
position: relative;
}
input {
position: fixed;
}
</style>
<script>
jsTestIsAsync = true;
async function ensureCaretIsVisible(isVisible)
{
if (isVisible)
debug("Waiting for caret to show.");
else
debug("Waiting for caret to hide.");
let rect = null;
while (!rect || (!isVisible && rect.width && rect.height) || (isVisible && (!rect.width || !rect.height)))
rect = await UIHelper.getUICaretViewRect();
if (isVisible)
testPassed("Caret was shown.");
else
testPassed("Caret was hidden.");
}
addEventListener("load", async () => {
description("Verifies that native selection UI is not suppressed when focusing an input that is inside an empty container with `overflow: hidden`, but is positioned absolutely such that it is still visible. To manually verify, click on each of the four buttons to move focus into editable areas. After tapping the first and third buttons, you should not see a caret view; after tapping the second and fourth buttons, you should see a caret view.");
if (!window.testRunner)
return;
for (const testCase of [[first, false], [second, true], [third, false], [fourth, true]]) {
const [buttonToTap, expectedVisibility] = testCase;
await UIHelper.activateElementAndWaitForInputSession(buttonToTap);
await ensureCaretIsVisible(expectedVisibility);
document.activeElement.blur();
}
await UIHelper.waitForKeyboardToHide();
finishJSTest();
});
</script>
</head>
<body class="hidden">
<button id="first">First field</button>
<button id="second">Second field</button>
<button id="third">Third field</button>
<button id="fourth">Fourth field</button>
<iframe id="frame1" srcdoc="
<div style='overflow: hidden; height: 0; box-sizing: border-box; border: none; padding: 0;'>
<input></input>
</div>"></iframe>
<div class="hidden">
<iframe id="frame2" srcdoc="<input></input>"></iframe>
<iframe id="frame3" srcdoc="<input></input>"></iframe>
<input></input>
</div>
<div id="description"></div>
<div id="console"></div>
</body>
<script>
function createFrameFocusHandler(identifier) {
return (event) => {
const frame = document.getElementById(identifier);
frame.focus();
frame.contentDocument.querySelector("input").focus();
event.preventDefault();
};
}
first.addEventListener("click", createFrameFocusHandler("frame1"));
second.addEventListener("click", createFrameFocusHandler("frame2"));
third.addEventListener("click", createFrameFocusHandler("frame3"));
fourth.addEventListener("click", event => {
document.querySelector("input").focus();
event.preventDefault();
});
</script>
</html>