Skip to content

Commit 303dc5a

Browse files
committed
Keep record on both document and control document
1 parent efe0730 commit 303dc5a

File tree

1 file changed

+52
-35
lines changed

1 file changed

+52
-35
lines changed

fetch.bs

Lines changed: 52 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2757,8 +2757,12 @@ not <a for=Document>fully active</a>. It has the following <a for=struct>items</
27572757
<dt><dfn for="deferred fetch record">request</dfn>
27582758
<dd>A <a for=/>request</a>.
27592759

2760-
<dt><dfn for="deferred fetch record">done</dfn> (default false)
2761-
<dd>A boolean.
2760+
<dt><dfn for="deferred fetch record">notify invoked</dfn>
2761+
<dd>An algorithm accepting no arguments.
2762+
2763+
<dt><dfn for="deferred fetch record">invoke state</dfn> (default "<code>pending</code>")
2764+
<dd>"<code>pending</code>", "<code>fetching</code>", "<code>done</code>", or
2765+
"<code>aborted</code>".
27622766
</dl>
27632767

27642768
<p>Each <a>navigable container</a> has an associated number
@@ -6761,10 +6765,9 @@ sources, specifically task sources that can result in running scripts such as th
67616765
<a method><code>fetchLater()</code></a> call before running any scripts that might depend on it.
67626766

67636767
<div algorithm>
6764-
<p>To <dfn>queue a deferred fetch</dfn> given a <a for=/>request</a> <var>request</var>, a
6765-
<a for=fetch>fetch group</a> <var>fetchGroup</var>, a null or {{DOMHighResTimeStamp}}
6766-
<var>activateAfter</var>, and <var>onActivatedWithoutTermination</var>, which is an algorithm that
6767-
takes no arguments:
6768+
<p>To <dfn>queue a deferred fetch</dfn> given a <a for=/>request</a> <var>request</var>, a null or
6769+
{{DOMHighResTimeStamp}} <var>activateAfter</var>, and <var>onActivatedWithoutTermination</var>,
6770+
which is an algorithm that takes no arguments:
67686771

67696772
<ol>
67706773
<li><p><a>Populate request from client</a> given <var>request</var>.
@@ -6774,12 +6777,24 @@ takes no arguments:
67746777
<li><p>Set <var>request</var>'s <a for=request>keepalive</a> to true.
67756778

67766779
<li><p>Let <var>deferredRecord</var> be a new <a>deferred fetch record</a> whose
6777-
<a for="deferred fetch record">request</a> is <var>request</var>.
6780+
<a for="deferred fetch record">request</a> is <var>request</var>,
6781+
<a for="deferred fetch record">notify invoked</a> is
6782+
<var>onActivatedWithoutTermination</var>.
6783+
6784+
<li><p><a for=list>Append</a> <var>deferredRecord</var> to <var>document</var>'s
6785+
<a>fetch group</a>'s <a for="fetch group">deferred fetch records</a>.
6786+
6787+
<li><p>Let <var>controlDocument</var> be <var>document</var>'s
6788+
<a>deferred-fetch control document</a>.
67786789

67796790
<li>
6780-
<p><a for=list>Append</a> <var>deferredRecord</var> to <var>fetchGroup</var>'s
6791+
<p>If <var>controlDocument</var> is not <var>document</var>, then <a for=list>append</a>
6792+
<var>deferredRecord</var> to <var>controlDocument</var>'s <a>deferred-fetch control document</a>'s
67816793
<a for="fetch group">deferred fetch records</a>.
67826794

6795+
<p class=note>This ensures that the deferred fetch is counted towards the control document's
6796+
quota if its request is still in flight after the <a>fetch group</a> has been terminated.
6797+
67836798
<li>
67846799
<p>If <var>activateAfter</var> is non-null, then run the following steps <a>in parallel</a>:</p>
67856800

@@ -6796,11 +6811,7 @@ takes no arguments:
67966811
"<code>hidden</code>" <a for=Document>visibility state</a> for a long period of time.
67976812
</ul>
67986813

6799-
<li><p>If the result of calling <a>process a deferred fetch</a> given <var>deferredRecord</var>
6800-
returns true, then <a>queue a global task</a> on the <a>deferred fetch task source</a> with
6801-
<var>request</var>'s <a for=request>client</a>'s
6802-
<a for="environment settings object">global object</a> to run
6803-
<var>onActivatedWithoutTermination</var>.
6814+
<li><p><a data-lt="process a deferred fetch">Process</a> <var>deferredRecord</var>.
68046815
</ol>
68056816
</li>
68066817

@@ -6844,14 +6855,21 @@ takes no arguments:
68446855
<div algorithm>
68456856
<p>To <dfn>process a deferred fetch</dfn> <var>deferredRecord</var>:
68466857
<ol>
6847-
<li><p>If <var>deferredRecord</var>'s <a for="deferred fetch record">done</a> is true, then
6848-
return false.
6858+
<li><p>If <var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> is not
6859+
"<code>pending</code>", then return.
68496860

6850-
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">done</a> to true.
6861+
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> to
6862+
"<code>fetching</code>".
68516863

6852-
<li><p><a for=/>Fetch</a> <var>deferredRecord</var>'s <a for="deferred fetch record">request</a>.
6864+
<li><p><a for=/>Fetch</a> <var>deferredRecord</var>'s <a for="deferred fetch record">request</a>,
6865+
with <a for=fetch><i>processRequestEndOfBody</i></a> set to the following step: set
6866+
<var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> to
6867+
"<code>done</code>".
68536868

6854-
<li><p>Return true.
6869+
<li><p><a>Queue a global task</a> on the <a>deferred fetch task source</a> with
6870+
<var>request</var>'s <a for=request>client</a>'s
6871+
<a for="environment settings object">global object</a> to run <var>deferredRecord</var>'s
6872+
<a for="deferred fetch record">notify invoked</a>.
68556873
</ol>
68566874
</div>
68576875

@@ -7003,9 +7021,12 @@ descendants share a quota of 384 kibibytes. That value is computed as such:
70037021

70047022
<div algorithm>
70057023
<p>To get the <dfn>available deferred-fetch quota</dfn> given a {{Document}}
7006-
<var>controlDocument</var> and an <a for=/>origin</a>-or-null <var>origin</var>:
7024+
<var>document</var> and an <a for=/>origin</a>-or-null <var>origin</var>:
70077025

70087026
<ol>
7027+
<li><p>Let <var>controlDocument</var> be <var>document</var>'s
7028+
<a>deferred-fetch control document</a>.
7029+
70097030
<li><p>Let <var>navigable</var> be <var>controlDocument</var>'s <a>node navigable</a>.
70107031

70117032
<li><p>Let <var>isTopLevel</var> be true if <var>controlDocument</var>'s <a>node navigable</a> is a
@@ -7069,6 +7090,9 @@ descendants share a quota of 384 kibibytes. That value is computed as such:
70697090
<a for="fetch group">deferred fetch records</a>:</p>
70707091

70717092
<ol>
7093+
<li><p>If <var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> is
7094+
"<code>done</code>" or "<code>aborted</code>", then <a for=iteration>continue</a>.
7095+
70727096
<li><p>Let <var>requestLength</var> be the <a>total request length</a> of
70737097
<var>deferredRecord</var>'s <a for="deferred fetch record">request</a>.
70747098

@@ -9085,27 +9109,20 @@ method steps are:
90859109
<li><p>Let <var>controlDocument</var> be <var>request</var>'s <a for=request>client</var>'s
90869110
<a>deferred-fetch control document</a>.
90879111

9088-
<li><p>If the <a>available deferred-fetch quota</a> given <var>controlDocument</var> and
9089-
<var>request</var>'s <a for=request>URL</a>'s <a for=url>origin</a> is less than
9090-
<var>request</var>'s <a>total request length</a>, then throw a "{{QuotaExceededError}}"
9091-
{{DOMException}}.
9112+
<li><p>If the <a>available deferred-fetch quota</a> given <var>request</var>'s
9113+
<a for=request>client</var> and <var>request</var>'s <a for=request>URL</a>'s
9114+
<a for=url>origin</a> is less than <var>request</var>'s <a>total request length</a>, then throw a
9115+
"{{QuotaExceededError}}" {{DOMException}}.
90929116

90939117
<li><p>Let <var>activated</var> be false.
90949118

90959119
<li><p>Let <var>deferredRecord</var> be the result of calling <a>queue a deferred fetch</a> given
9096-
<var>request</var>, <var>controlDocument</var>'s <a>fetch group</a>, <var>activateAfter</var>, and
9097-
the following step: set <var>activated</var> to true.
9098-
9099-
<li>
9100-
<p><a for=AbortSignal lt=add>Add the following abort steps</a> to <var>requestObject</var>'s
9101-
<a for=Request>signal</a>:
9102-
9103-
<ol>
9104-
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">done</a> to true.
9120+
<var>request</var>, <var>activateAfter</var>, and the following step: set <var>activated</var> to
9121+
true.
91059122

9106-
<li><p><a for=list>Remove</a> <var>deferredRecord</var> from <var>controlDocument</var>'s
9107-
<a for=fetch>fetch group</a>'s <a for="fetch group">deferred fetch records</a>.
9108-
</ol>
9123+
<li><p><a for=AbortSignal lt=add>Add the following abort steps</a> to <var>requestObject</var>'s
9124+
<a for=Request>signal</a>: <li><p>Set <var>deferredRecord</var>'s
9125+
<a for="deferred fetch record">invoke state</a> to "<code>aborted</code>".
91099126

91109127
<li><p>Return a new {{FetchLaterResult}} whose
91119128
<a for=FetchLaterResult>activated getter steps</a> are to return <var>activated</var>.

0 commit comments

Comments
 (0)