| <!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> |
| .container { |
| width: 100%; |
| display: -webkit-box; |
| } |
| |
| .container > div { |
| width: 100vw; |
| } |
| |
| .hidden { |
| overflow: hidden; |
| } |
| |
| input { |
| font-size: 18px; |
| } |
| |
| button { |
| margin: 1em; |
| } |
| |
| .translated { |
| transform: translate3d(-100vw, 0, 0); |
| } |
| </style> |
| <script> |
| jsTestIsAsync = true; |
| |
| async function waitForCaretToAppear() { |
| while (true) { |
| const rect = await UIHelper.getUICaretViewRect(); |
| if (rect && rect.width && rect.height) |
| return rect; |
| } |
| } |
| |
| addEventListener("load", async () => { |
| description("This test verifies that after focusing a visible input field in a body element that has been translated horizontally out of view, the caret is still visible. To run the test manually, first tap the input field and check that the caret shows up. Then, tap the button to apply the CSS transform, tap the input field again, and check that the caret is still visible."); |
| |
| transformButton = document.querySelector("button"); |
| transformButton.addEventListener("click", () => document.body.classList.add("translated")); |
| if (!window.testRunner) |
| return; |
| |
| // Tap the input and wait for the caret. |
| await UIHelper.activateAndWaitForInputSessionAt(20, 20); |
| caretBefore = await waitForCaretToAppear(); |
| shouldBe("caretBefore.left", "20"); |
| shouldBe("caretBefore.top", "14"); |
| shouldBe("caretBefore.width", "2"); |
| shouldBe("caretBefore.height", "23"); |
| |
| // Translate the body, tap the input again, and wait for the caret. |
| await UIHelper.activateElement(transformButton); |
| await UIHelper.waitForKeyboardToHide(); |
| await UIHelper.activateAndWaitForInputSessionAt(20, 20); |
| caretAfter = await waitForCaretToAppear(); |
| shouldBe("caretAfter.left", "20"); |
| shouldBe("caretAfter.top", "14"); |
| shouldBe("caretAfter.width", "2"); |
| shouldBe("caretAfter.height", "23"); |
| |
| document.activeElement.blur(); |
| await UIHelper.waitForKeyboardToHide(); |
| finishJSTest(); |
| }); |
| </script> |
| </head> |
| <body class="hidden"> |
| <div class="container"> |
| <div class="hidden"> |
| <input id="target"> |
| </div> |
| <div class="hidden"> |
| <input> |
| </div> |
| </div> |
| <button>Apply transform</button> |
| <div id="description"></div> |
| <div id="console"></div> |
| </body> |
| </html> |