<!doctype html> <meta charset=utf-8> <meta name="variant" content="?editor=input&hide-target=editor"> <meta name="variant" content="?editor=textarea&hide-target=editor"> <meta name="variant" content="?editor=input&hide-target=parent"> <meta name="variant" content="?editor=textarea&hide-target=parent"> <title>Testing edit action in zombie editor</title> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> <script src="/resources/testdriver-actions.js"></script> <body> <script> "use strict"; const params = new URLSearchParams(location.search); /** * The expected results is based on Chrome 93. * The behavior is reasonable because JS API which does not require focus keeps * working even if it's hidden. */ function init() { const div = document.createElement("div"); const editor = document.createElement(params.get("editor")); const hideTarget = params.get("hide-target") == "editor" ? editor : div; editor.value = "default value"; div.appendChild(editor); document.body.appendChild(div); return [ hideTarget, editor ]; } function finalize(editor) { editor.blur(); editor.parentNode.remove(); document.body.getBoundingClientRect(); } promise_test(async () => { await new Promise(resolve => addEventListener("load", resolve, {once: true})); }, "Wait for load event"); promise_test(async () => { const [hideTarget, editor] = init(); try { hideTarget.style.display = "none"; editor.value = "new value"; assert_equals(editor.value, "new value", "The value should be set properly"); } finally { finalize(editor); } }, `<${params.get("editor")}>.value = "new value" (without focus)`); promise_test(async () => { const [hideTarget, editor] = init(); try { editor.focus(); hideTarget.style.display = "none"; editor.value = "new value"; assert_equals(editor.value, "new value", "The value should be set properly"); } finally { finalize(editor); } }, `<${params.get("editor")}>.value = "new value" (with focus)`); promise_test(async () => { const [hideTarget, editor] = init(); try { editor.focus(); editor.blur(); hideTarget.style.display = "none"; editor.value = "new value"; assert_equals(editor.value, "new value", "The value should be set properly"); } finally { finalize(editor); } }, `<${params.get("editor")}>.value = "new value" (after blur)`); promise_test(async () => { const [hideTarget, editor] = init(); try { hideTarget.style.display = "none"; editor.setRangeText("new", 0, "default".length); assert_equals(editor.value, "new value", "The value should be set properly by setRangeText"); } finally { finalize(editor); } }, `<${params.get("editor")}>.setRangeText("new", 0, "default".length) (without focus)`); promise_test(async () => { const [hideTarget, editor] = init(); try { editor.focus(); hideTarget.style.display = "none"; editor.setRangeText("new", 0, "default".length); assert_equals(editor.value, "new value", "The value should be set properly by setRangeText"); } finally { finalize(editor); } }, `<${params.get("editor")}>.setRangeText("new", 0, "default".length) (with focus)`); promise_test(async () => { const [hideTarget, editor] = init(); try { editor.focus(); editor.blur(); hideTarget.style.display = "none"; editor.setRangeText("new", 0, "default".length); assert_equals(editor.value, "new value", "The value should be set properly by setRangeText"); } finally { finalize(editor); } }, `<${params.get("editor")}>.setRangeText("new", 0, "default".length) (after blur)`); </script> </body>