Skip to content

Commit

Permalink
State-preserving atomic move integration
Browse files Browse the repository at this point in the history
  • Loading branch information
domfarolino committed Sep 29, 2024
1 parent b8ea975 commit 28cc642
Showing 1 changed file with 44 additions and 3 deletions.
47 changes: 44 additions & 3 deletions source
Original file line number Diff line number Diff line change
Expand Up @@ -3218,6 +3218,7 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
<li><dfn data-x="dom-Node-append" data-x-href="https://dom.spec.whatwg.org/#dom-node-append"><code>append()</code></dfn> method</li>
<li><dfn data-x="dom-Node-appendChild" data-x-href="https://dom.spec.whatwg.org/#dom-node-appendchild"><code>appendChild()</code></dfn> method</li>
<li><dfn data-x="dom-Node-cloneNode" data-x-href="https://dom.spec.whatwg.org/#dom-node-clonenode"><code>cloneNode()</code></dfn> method</li>
<li><dfn data-x="dom-Node-moveBefore" data-x-href="https://dom.spec.whatwg.org/#dom-node-moveBefore"><code>moveBefore()</code></dfn> method</li>
<li><dfn data-x="dom-Document-importNode" data-x-href="https://dom.spec.whatwg.org/#dom-document-importnode"><code>importNode()</code></dfn> method</li>
<li><dfn data-x="dom-Event-preventDefault" data-x-href="https://dom.spec.whatwg.org/#dom-event-preventdefault"><code>preventDefault()</code></dfn> method</li>
<li><dfn data-x="dom-Element-id" data-x-href="https://dom.spec.whatwg.org/#dom-element-id"><code>id</code></dfn> attribute</li>
Expand Down Expand Up @@ -10820,6 +10821,17 @@ partial interface <dfn id="document" data-lt="">Document</dfn> {
<span>set</span> of <span data-x="nrr-details-struct">not restored reason details</span>,
initially empty.</p>

<p>Each <code>Document</code> has a <dfn
data-x="concept-document-state-preserving-atomic-move-in-progress" export
for="Document">state-preserving atomic move in progress</dfn> boolean, which is initially
false.</p>

<p class="note">This is set by <code data-x="dom-Node-moveBefore">moveBefore()</code> when a
<code>Document</code> is performing a state-preserving atomic move; it is used to exempt certain
<span data-x="concept-node-insert-ext">insertion steps</span> and <span
data-x="concept-node-remove-ext">removing steps</span> (and their kin), from running, if they
would ordinarily reset state that needs to be preserved.</p>

<h4>The <code>DocumentOrShadowRoot</code> interface</h4>

<p><cite>DOM</cite> defines the <code data-x="DOM
Expand Down Expand Up @@ -29024,6 +29036,10 @@ interface <dfn interface>HTMLSourceElement</dfn> : <span>HTMLElement</span> {
steps</span>, given <var>insertedNode</var>, are:</p>

<ol>
<li><p>If <var>insertedNode</var>'s <span>node document</span>'s <span
data-x="concept-document-state-preserving-atomic-move-in-progress">state-preserving atomic move
in progress</span> is true, then return.</p></li>

<li><p>If <var>insertedNode</var>'s parent is a <span>media element</span> that has no <code
data-x="attr-media-src">src</code> attribute and whose <code
data-x="dom-media-networkState">networkState</code> has the value <code
Expand All @@ -29040,6 +29056,10 @@ interface <dfn interface>HTMLSourceElement</dfn> : <span>HTMLElement</span> {
steps</span>, given <var>removedNode</var> and <var>oldParent</var>, are:</p>

<ol>
<li><p>If <var>insertedNode</var>'s <span>node document</span>'s <span
data-x="concept-document-state-preserving-atomic-move-in-progress">state-preserving atomic move
in progress</span> is true, then return.</p></li>

<li><p>If <var>removedNode</var>'s next sibling was an <code>img</code> element and
<var>oldParent</var> is a <code>picture</code> element, then, count this as a <span
data-x="relevant mutations">relevant mutation</span> for the <code>img</code> element.</p></li>
Expand Down Expand Up @@ -29301,6 +29321,10 @@ interface <dfn interface>HTMLImageElement</dfn> : <span>HTMLElement</span> {
steps</span>, given <var>insertedNode</var>, are:</p>

<ol>
<li><p>If <var>insertedNode</var>'s <span>node document</span>'s <span
data-x="concept-document-state-preserving-atomic-move-in-progress">state-preserving atomic move
in progress</span> is true, then return.</p></li>

<li><p>If <var>insertedNode</var>'s parent is a <code>picture</code> element, then, count this as
a <span data-x="relevant mutations">relevant mutation</span> for
<var>insertedNode</var>.</p></li>
Expand All @@ -29310,6 +29334,10 @@ interface <dfn interface>HTMLImageElement</dfn> : <span>HTMLElement</span> {
steps</span>, given <var>removedNode</var> and <var>oldParent</var>, are:</p>

<ol>
<li><p>If <var>insertedNode</var>'s <span>node document</span>'s <span
data-x="concept-document-state-preserving-atomic-move-in-progress">state-preserving atomic move
in progress</span> is true, then return.</p></li>

<li><p>If <var>oldParent</var> is a <code>picture</code> element, then, count this as a
<span data-x="relevant mutations">relevant mutation</span> for <var>removedNode</var>.</p></li>
</ol>
Expand Down Expand Up @@ -30809,7 +30837,9 @@ was an English &lt;a href="/wiki/Music_hall">music hall&lt;/a> singer, ...</code

<li><p>The <code>img</code> or <code>source</code> <span>HTML element insertion steps</span> or
<span>HTML element removing steps</span> count the mutation as a <span data-x="relevant
mutations">relevant mutation</span>.</p></li>
mutations">relevant mutation</span>, when the element's <span>node document</span>'s <span
data-x="concept-document-state-preserving-atomic-move-in-progress">state-preserving atomic move
in progress</span> is false.</p></li>

<li><p>The element's parent is a <code>picture</code> element and a <code>source</code> element
that is a previous sibling has its <code data-x="attr-source-srcset">srcset</code>, <code
Expand Down Expand Up @@ -33281,6 +33311,10 @@ interface <dfn interface>HTMLIFrameElement</dfn> : <span>HTMLElement</span> {
<var>insertedNode</var>, are:</p>

<ol>
<li><p>If <var>insertedNode</var>'s <span>node document</span>'s <span
data-x="concept-document-state-preserving-atomic-move-in-progress">state-preserving atomic move
in progress</span> is true, then return.</p></li>

<li><p>If <var>insertedNode</var>'s <span>shadow-including root</span>'s <span
data-x="concept-document-bc">browsing context</span> is null, then return.</p></li>

Expand All @@ -33296,8 +33330,15 @@ interface <dfn interface>HTMLIFrameElement</dfn> : <span>HTMLElement</span> {
</ol>

<p>The <code>iframe</code> <span>HTML element removing steps</span>, given
<var>removedNode</var>, are to <span>destroy a child navigable</span> given
<var>removedNode</var>.</p>
<var>removedNode</var>, are:</p>

<ol>
<li><p>If <var>insertedNode</var>'s <span>node document</span>'s <span
data-x="concept-document-state-preserving-atomic-move-in-progress">state-preserving atomic move
in progress</span> is true, then return.</p></li>

<li><p><span>Destroy a child navigable</span> given <var>removedNode</var>.</p>
</ol>

<p class="note">This happens without any <code data-x="event-unload">unload</code> events firing
(the element's <span>content document</span> is <em><span data-x="destroy a child
Expand Down

0 comments on commit 28cc642

Please sign in to comment.