| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="support/helper.sub.js"></script> |
| |
| <meta http-equiv="Content-Security-Policy" content="trusted-types *"> |
| </head> |
| <body> |
| <div id="container"></div> |
| <script> |
| var container = document.querySelector('#container'); |
| |
| // Trusted HTML assignments do not throw. |
| test(t => { |
| let p = createHTML_policy(window, 1); |
| let html = p.createHTML(INPUTS.HTML); |
| let before = 'before'; |
| let after = 'after'; |
| let htmlBefore = p.createHTML(before); |
| let htmlAfter = p.createHTML(after); |
| |
| var d = document.createElement('div'); |
| container.appendChild(d); |
| |
| d.insertAdjacentHTML('beforebegin', html); |
| assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE); |
| assert_equals(d.previousSibling.data, RESULTS.HTML); |
| |
| d.insertAdjacentHTML('afterbegin', htmlBefore); |
| d.insertAdjacentHTML('beforeend', htmlAfter); |
| assert_equals(d.innerHTML, before + after); |
| |
| d.insertAdjacentHTML('afterend', html); |
| assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE); |
| assert_equals(d.nextSibling.data, RESULTS.HTML); |
| |
| while (container.firstChild) |
| container.firstChild.remove(); |
| }, "insertAdjacentHTML with html assigned via policy (successful HTML transformation)."); |
| |
| // String assignments throw. |
| test(t => { |
| var d = document.createElement('div'); |
| container.appendChild(d); |
| |
| assert_throws(new TypeError(), _ => { |
| d.insertAdjacentHTML('beforebegin', "<p>Fail</p>"); |
| }); |
| assert_throws(new TypeError(), _ => { |
| d.insertAdjacentHTML('afterbegin', "<p>Fail</p>"); |
| }); |
| assert_throws(new TypeError(), _ => { |
| d.insertAdjacentHTML('beforeend', "<p>Fail</p>"); |
| }); |
| assert_throws(new TypeError(), _ => { |
| d.insertAdjacentHTML('afterend', "<p>Fail</p>"); |
| }); |
| |
| assert_equals(d.previousSibling, null); |
| assert_equals(d.firstChild, null); |
| assert_equals(d.lastChild, null); |
| assert_equals(d.nextSibling, null); |
| |
| while (container.firstChild) |
| container.firstChild.remove(); |
| }, "`insertAdjacentHTML(string)` throws."); |
| |
| // Null assignment throws. |
| test(t => { |
| var d = document.createElement('div'); |
| container.appendChild(d); |
| |
| assert_throws(new TypeError(), _ => { |
| d.insertAdjacentHTML('beforebegin', null); |
| }); |
| assert_throws(new TypeError(), _ => { |
| d.insertAdjacentHTML('afterbegin', null); |
| }); |
| assert_throws(new TypeError(), _ => { |
| d.insertAdjacentHTML('beforeend', null); |
| }); |
| assert_throws(new TypeError(), _ => { |
| d.insertAdjacentHTML('afterend', null); |
| }); |
| |
| assert_equals(d.previousSibling, null); |
| assert_equals(d.firstChild, null); |
| assert_equals(d.lastChild, null); |
| assert_equals(d.nextSibling, null); |
| }, "`insertAdjacentHTML(null)` throws."); |
| |
| // After default policy creation string assignment implicitly calls createHTML. |
| test(t => { |
| let p = window.TrustedTypes.createPolicy("default", { createHTML: createHTMLJS }, true); |
| |
| var d = document.createElement('div'); |
| container.appendChild(d); |
| |
| d.insertAdjacentHTML('beforebegin', INPUTS.HTML); |
| assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE); |
| assert_equals(d.previousSibling.data, RESULTS.HTML); |
| |
| d.insertAdjacentHTML('afterbegin', INPUTS.HTML); |
| assert_equals(d.firstChild.nodeType, Node.TEXT_NODE); |
| assert_equals(d.firstChild.data, RESULTS.HTML); |
| |
| d.insertAdjacentHTML('beforeend', INPUTS.HTML); |
| assert_equals(d.lastChild.nodeType, Node.TEXT_NODE); |
| assert_equals(d.lastChild.data, RESULTS.HTML); |
| |
| d.insertAdjacentHTML('afterend', INPUTS.HTML); |
| assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE); |
| assert_equals(d.nextSibling.data, RESULTS.HTML); |
| |
| while (container.firstChild) |
| container.firstChild.remove(); |
| }, "`insertAdjacentHTML(string)` assigned via default policy (successful HTML transformation)."); |
| |
| // After default policy creation null assignment implicitly calls createHTML. |
| test(t => { |
| var d = document.createElement('div'); |
| container.appendChild(d); |
| |
| d.insertAdjacentHTML('beforebegin', null); |
| assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE); |
| assert_equals(d.previousSibling.data, "null"); |
| |
| d.insertAdjacentHTML('afterbegin', null); |
| assert_equals(d.firstChild.nodeType, Node.TEXT_NODE); |
| assert_equals(d.firstChild.data, "null"); |
| |
| d.insertAdjacentHTML('beforeend', null); |
| assert_equals(d.lastChild.nodeType, Node.TEXT_NODE); |
| assert_equals(d.lastChild.data, "null"); |
| |
| d.insertAdjacentHTML('afterend', null); |
| assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE); |
| assert_equals(d.nextSibling.data, "null"); |
| |
| while (container.firstChild) |
| container.firstChild.remove(); |
| }, "`insertAdjacentHTML(null)` assigned via default policy does not throw."); |
| </script> |
| </body> |
| </html> |