| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Writing out a document with form controls with values</title> |
| <link rel="author" href="mailto:bzbarsky@mit.edu"/> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <div id="log"></div> |
| <script> |
| function asyncHop(t, arg) { |
| return new Promise(res => t.step_timeout(res.bind(null, arg), 0)); |
| } |
| |
| function loadPromise(t, iframe) { |
| var p = new Promise(res => |
| iframe.addEventListener("load", res.bind(null, iframe), { once: true })); |
| // We need to do one trip through the event loop to make sure we're |
| // not still under the load event firing when we start doing our |
| // document.open bits. |
| return p.then(asyncHop.bind(null, t)); |
| } |
| |
| async function createIframe(t) { |
| var i = document.createElement("iframe"); |
| t.add_cleanup(() => i.remove()); |
| var p = loadPromise(t, i); |
| document.body.appendChild(i); |
| return p; |
| } |
| |
| async function replaceIframe(t, i, text) { |
| var p = loadPromise(t, i); |
| var doc = i.contentDocument; |
| doc.open(); |
| doc.write(text); |
| doc.close(); |
| return p; |
| } |
| |
| promise_test(async function(t) { |
| var i = await createIframe(t); |
| var str = "<textarea>123</textarea>"; |
| await replaceIframe(t, i, str); |
| i.contentDocument.querySelector("textarea").value = "abc"; |
| await replaceIframe(t, i, str); |
| assert_equals(i.contentDocument.querySelector("textarea").value, "123"); |
| }, "textarea state"); |
| |
| promise_test(async function(t) { |
| var i = await createIframe(t); |
| var str = "<input value='123'>"; |
| await replaceIframe(t, i, str); |
| i.contentDocument.querySelector("input").value = "abc"; |
| await replaceIframe(t, i, str); |
| assert_equals(i.contentDocument.querySelector("input").value, "123"); |
| }, "input state"); |
| </script> |
| </body> |
| </html> |