From 5c64e76e4c6c2f17b25218dbeee3aef3d53bd4be Mon Sep 17 00:00:00 2001 From: Joey Arhar Date: Mon, 16 Oct 2023 10:11:46 -0700 Subject: [PATCH] Implement parseHTMLUnsafe and setHTMLUnsafe I am speccing this here: https://github.com/whatwg/html/pull/9538 Bug: 1478969 Change-Id: Ie55827cebdf349aadae13fbf1086baf6177bbff2 --- ...nt-parseHTMLUnsafe-encoding.tentative.html | 35 +++++++++ ...eHTMLUnsafe-style-attribute.tentative.html | 54 +++++++++++++ ...MLUnsafe-url-base-pushstate.tentative.html | 15 ++++ ...nt-parseHTMLUnsafe-url-base.tentative.html | 10 +++ ...rseHTMLUnsafe-url-moretests.tentative.html | 42 ++++++++++ ...rseHTMLUnsafe-url-pushstate.tentative.html | 14 ++++ ...ocument-parseHTMLUnsafe-url.tentative.html | 9 +++ .../Document-parseHTMLUnsafe.tentative.html | 77 +++++++++++++++++++ .../Element-setHTMLUnsafe-04.tentative.html | 25 ++++++ ...parseHTMLUnsafe-iframe-base-pushstate.html | 10 +++ .../parseHTMLUnsafe-iframe-base.html | 6 ++ .../parseHTMLUnsafe-iframe-pushstate.html | 9 +++ .../resources/parseHTMLUnsafe-iframe.html | 4 + .../resources/parseHTMLUnsafe-iframe.js | 3 + .../resources/parseHTMLUnsafe-url-tests.js | 36 +++++++++ .../setHTMLUnsafe.tentative.html | 55 +++++++++++++ .../declarative-shadow-dom-attachment.html | 2 +- .../declarative-shadow-dom-basic.html | 13 ++-- shadow-dom/declarative/support/helpers.js | 4 - 19 files changed, 411 insertions(+), 12 deletions(-) create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-encoding.tentative.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-style-attribute.tentative.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-base-pushstate.tentative.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-base.tentative.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-moretests.tentative.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-pushstate.tentative.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url.tentative.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe.tentative.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Element-setHTMLUnsafe-04.tentative.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-base-pushstate.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-base.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-pushstate.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe.html create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe.js create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-url-tests.js create mode 100644 html/webappapis/dynamic-markup-insertion/html-unsafe-methods/setHTMLUnsafe.tentative.html delete mode 100644 shadow-dom/declarative/support/helpers.js diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-encoding.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-encoding.tentative.html new file mode 100644 index 00000000000000..1debcafa3b5340 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-encoding.tentative.html @@ -0,0 +1,35 @@ + + + + + + + + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-style-attribute.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-style-attribute.tentative.html new file mode 100644 index 00000000000000..cd092a6034602a --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-style-attribute.tentative.html @@ -0,0 +1,54 @@ + + + + +Style attribute in HTML + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-base-pushstate.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-base-pushstate.tentative.html new file mode 100644 index 00000000000000..a8eab595116f0c --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-base-pushstate.tentative.html @@ -0,0 +1,15 @@ + + + +parseHTMLUnsafe test of how the document's URL is set (base, pushstate) + + + + + + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-base.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-base.tentative.html new file mode 100644 index 00000000000000..62b2c09aaec5ec --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-base.tentative.html @@ -0,0 +1,10 @@ + + + +parseHTMLUnsafe test of how the document's URL is set (base, no pushstate) + + + + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-moretests.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-moretests.tentative.html new file mode 100644 index 00000000000000..41335ef035fae4 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-moretests.tentative.html @@ -0,0 +1,42 @@ + + + + +Document.parseHTMLUnsafe: Document's url + + +
+ diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-pushstate.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-pushstate.tentative.html new file mode 100644 index 00000000000000..7930bf0ddbf12a --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url-pushstate.tentative.html @@ -0,0 +1,14 @@ + + + +parseHTMLUnsafe test of how the document's URL is set (no base, pushstate) + + + + + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url.tentative.html new file mode 100644 index 00000000000000..911e1837063ab4 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe-url.tentative.html @@ -0,0 +1,9 @@ + + + +parseHTMLUnsafe test of how the document's URL is set (no pushstate, no base) + + + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe.tentative.html new file mode 100644 index 00000000000000..2a89370825b693 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Document-parseHTMLUnsafe.tentative.html @@ -0,0 +1,77 @@ + + + +parseHTMLUnsafe basic test of HTML parsing + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Element-setHTMLUnsafe-04.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Element-setHTMLUnsafe-04.tentative.html new file mode 100644 index 00000000000000..4a9e300afc2f93 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/Element-setHTMLUnsafe-04.tentative.html @@ -0,0 +1,25 @@ + +setHTMLUnsafe in HTML + + + + + +
+ diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-base-pushstate.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-base-pushstate.html new file mode 100644 index 00000000000000..53b855968c866e --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-base-pushstate.html @@ -0,0 +1,10 @@ + + +An iframe that does parseHTMLUnsafe stuff with base and pushstates itself + + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-base.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-base.html new file mode 100644 index 00000000000000..6977e938119561 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-base.html @@ -0,0 +1,6 @@ + + +An iframe that does parseHTMLUnsafe stuff with base + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-pushstate.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-pushstate.html new file mode 100644 index 00000000000000..5e1fae04413cdf --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe-pushstate.html @@ -0,0 +1,9 @@ + + +An iframe that does parseHTMLUnsafe stuff and pushstates itself + + + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe.html new file mode 100644 index 00000000000000..f47d9605fc8596 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe.html @@ -0,0 +1,4 @@ + + +An iframe that does parseHTMLUnsafe stuff + diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe.js b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe.js new file mode 100644 index 00000000000000..4a0b56869beb56 --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-iframe.js @@ -0,0 +1,3 @@ +window.doParse = (html) => { + return Document.parseHTMLUnsafe(html); +}; diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-url-tests.js b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-url-tests.js new file mode 100644 index 00000000000000..88344d127cee3c --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/resources/parseHTMLUnsafe-url-tests.js @@ -0,0 +1,36 @@ +const loadPromise = new Promise(resolve => { window.resolveLoadPromise = resolve; }); + +function assertURL(doc) { + assert_equals(doc.URL, "about:blank", "document.URL"); + assert_equals(doc.documentURI, "about:blank", "document.documentURI"); + assert_equals(doc.baseURI, "about:blank", "document.baseURI"); +} + +const inputs = { + valid: "", + "invalid XML": `1` +}; + +for (const [inputName, input] of Object.entries(inputs)) { + test(() => { + const doc = Document.parseHTMLUnsafe(input); + + assertURL(doc); + }, `${inputName}: created normally`); + + promise_test(async () => { + await loadPromise; + + const doc = frames[0].Document.parseHTMLUnsafe(input); + + assertURL(doc); + }, `${inputName}: created using another iframe's parseHTMLUnsafe from this frame`); + + promise_test(async () => { + await loadPromise; + + const doc = frames[0].doParse(input); + + assertURL(doc); + }, `${inputName}: created using another iframe's parseHTMLUnsafe from that frame`); +} diff --git a/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/setHTMLUnsafe.tentative.html b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/setHTMLUnsafe.tentative.html new file mode 100644 index 00000000000000..1c0b1155691cbc --- /dev/null +++ b/html/webappapis/dynamic-markup-insertion/html-unsafe-methods/setHTMLUnsafe.tentative.html @@ -0,0 +1,55 @@ + + + + + + + + diff --git a/shadow-dom/declarative/declarative-shadow-dom-attachment.html b/shadow-dom/declarative/declarative-shadow-dom-attachment.html index d752b62d31d47f..dcee6cf8a103ac 100644 --- a/shadow-dom/declarative/declarative-shadow-dom-attachment.html +++ b/shadow-dom/declarative/declarative-shadow-dom-attachment.html @@ -19,7 +19,7 @@ const declarativeString = `<${elementType} id=theelement>${getDeclarativeContent(mode, delegatesFocus)} ${lightDomTextContent}`; const wrapper = document.createElement('div'); - setInnerHTML(wrapper, declarativeString); + wrapper.setHTMLUnsafe(declarativeString); const element = wrapper.querySelector('#theelement'); return {wrapper: wrapper, element: element}; } diff --git a/shadow-dom/declarative/declarative-shadow-dom-basic.html b/shadow-dom/declarative/declarative-shadow-dom-basic.html index b71f7d1a3778e7..5d59c9bb2f70c3 100644 --- a/shadow-dom/declarative/declarative-shadow-dom-basic.html +++ b/shadow-dom/declarative/declarative-shadow-dom-basic.html @@ -5,7 +5,6 @@ -