| <!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] --> |
| <html> |
| <head> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <script src="../../../resources/js-test.js"></script> |
| <script src="../../../resources/ui-helper.js"></script> |
| <style> |
| input { |
| font-size: 20px; |
| } |
| </style> |
| </head> |
| <body> |
| <div><input id="create-new-page"></input></div> |
| <div><input id="normal-input"></input></div> |
| </body> |
| <script> |
| jsTestIsAsync = true; |
| createNewPageInput = document.getElementById("create-new-page"); |
| normalInput = document.getElementById("normal-input"); |
| |
| async function activateAndWaitForInputSessionWithNewPageHandler(element) |
| { |
| const x = element.offsetLeft + element.offsetWidth / 2; |
| const y = element.offsetTop + element.offsetHeight / 2; |
| await new Promise(resolve => { |
| testRunner.runUIScript(` |
| (function() { |
| uiController.willCreateNewPageCallback = () => { |
| uiController.removeViewFromWindow(); |
| uiController.addViewToWindow(); |
| uiController.becomeFirstResponder(); |
| }; |
| uiController.didShowKeyboardCallback = () => uiController.uiScriptComplete(); |
| uiController.singleTapAtPoint(${x}, ${y}, function() { }); |
| })()`, resolve); |
| }); |
| } |
| |
| createNewPageInput.addEventListener("focus", () => open("about:blank"), { "once" : true }); |
| |
| addEventListener("load", async () => { |
| description("This test verifies that unparenting, reparenting and then making the web view first responder while immediately after focusing an input field does not either cause a crash, or a hang when subsequently attempting to interact with the page. To test manually, tap the top field, dismiss the keyboard, and then tap the bottom field. The test passes if the UI process does not crash or hang."); |
| |
| if (!window.testRunner) |
| return; |
| |
| await activateAndWaitForInputSessionWithNewPageHandler(createNewPageInput); |
| createNewPageInput.blur(); |
| await UIHelper.waitForKeyboardToHide(); |
| |
| await UIHelper.activateElementAndWaitForInputSession(normalInput); |
| shouldBe("document.activeElement", "normalInput"); |
| normalInput.blur(); |
| await UIHelper.waitForKeyboardToHide(); |
| |
| finishJSTest(); |
| }); |
| </script> |
| </html> |