| Summary: | HTML foster-parenting algorithm no longer requires foster parents to be elements | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | Adam Klein <adamk> |
| Component: | DOM | Assignee: | Ryosuke Niwa <rniwa> |
| Status: | RESOLVED FIXED | ||
| Severity: | Normal | CC: | ahmad.saleem792, ap, bfulgham, rniwa, webkit-bug-importer |
| Priority: | P2 | Keywords: | InRadar |
| Version: | 528+ (Nightly build) | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
Safari pass all WPT tests related to foster parenting: https://wpt.fyi/results/html/syntax/parsing/template/additions-to-foster-parenting?label=master&label=experimental&aligned&view=subtest&q=foster%20parent rniwa@webkit.org - Is this still needed? Thanks! Yes, WebKit's behavior matches that of Gecko, and differs from that of Blink. It's probably better to align ourselves with the spec & Blink at this point. Pull request: https://github.com/WebKit/WebKit/pull/3295 Committed 253504@main (3363325609a1): <https://commits.webkit.org/253504@main> Reviewed commits have been landed. Closing PR #3295 and removing active labels. |
Consider the following HTML page: <body> <table> <script> var fragment = document.createDocumentFragment(); fragment.appendChild(document.querySelector('table')); </script> <div></div> </table> </body> According to the current HTML spec, this should end up foster-parenting the <div> into the document fragment (since it's the <table>'s parent when the foster-parenting algorithm runs). But the spec used to require foster parents to be elements, and so WebKit and Blink put the div, instead, as a child of <body>. In Blink, I'm about to land https://codereview.chromium.org/640433002, which changes that behavior to match the spec (it was changed to support the <template> element, according to Hixie on #whatwg). It'd be nice to keep us compatible, so if you think this is the wrong way to go, please let me know. Alternatively, it should be easy to update your parser to match the spec (see step 2 of https://html.spec.whatwg.org/#appropriate-place-for-inserting-a-node).