Skip to content

Commit 6cf8ac7

Browse files
committed
Move sections around
1 parent fbde99f commit 6cf8ac7

File tree

1 file changed

+111
-112
lines changed

1 file changed

+111
-112
lines changed

fetch.bs

Lines changed: 111 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -6705,6 +6705,62 @@ agent's <a>CORS-preflight cache</a> for which there is a <a>cache entry match</a
67056705
</ol>
67066706
</div>
67076707

6708+
<h3 id=deferred-fetching>Deferred fetching</h3>
6709+
6710+
<p>Deferred fetches allow callers to request that a fetch is invoked at the latest possible moment,
6711+
when a <a>fetch group</a> is <a for="fetch group">terminated</a>, or after a timeout after it is
6712+
<a for="fetch group">deactivated</a>.
6713+
6714+
<div algorithm="request-a-deferred-fetch">
6715+
<p>To <dfn>request a deferred fetch</dfn> given a
6716+
<a for=/>request</a> <var>request</var> and a null-or-{{DOMHighResTimeStamp}}
6717+
<var>inactiveTimeout</var> (default null):
6718+
6719+
<ol>
6720+
<li><p>Assert: <var>request</var>'s <a for=request>client</a> is an
6721+
<a>environment settings object</a>.
6722+
6723+
<li>Let <var>totalScheduledDeferredBytesForOrigin</var> be 0.
6724+
6725+
<li>
6726+
<p>If <var>request</var>'s <a for=request>body</a> is not null then:
6727+
6728+
<ol>
6729+
<li><p>If <var>request</var>'s
6730+
<a for=request>body</a>'s <a for=body>length</a> is null, then throw a {{TypeError}}.
6731+
6732+
<li><p>Set <var>totalScheduledDeferredBytesForOrigin</var> to <var>request</var>'s
6733+
<a for=request>body</a>'s <a for=body>length</a>.
6734+
</ol>
6735+
</li>
6736+
6737+
<li><p><a for=list>For each</a> <a>deferred fetch record</a> <var>deferredRecord</var> in
6738+
<var>request</var>'s <a for=request>client</a>'s <a for=fetch>fetch group</a>'s
6739+
<a for="fetch group">deferred fetch records</a>: if <var>deferredRecord</var>'s
6740+
<a for="deferred fetch record">request</a>'s <a for=request>body</a> is not null and
6741+
<var>deferredRecord</var>'s <a for="deferred fetch record">request</a>'s <a for=request>URL</a>'s
6742+
<a for=url>origin</a> is <a>same origin</a> with <var>request</var>'s <a for=request>URL</a>'s
6743+
<a for=url>origin</a>, then increment <var>totalScheduledDeferredBytesForOrigin</var> by
6744+
<var>deferredRecord</var>'s <a for="deferred fetch record">request</a>'s <a for=request>body</a>'s
6745+
<a for=body>length</a>.
6746+
6747+
<li><p>If <var>totalScheduledDeferredBytesForOrigin</var> is greater than 64 kilobytes, then
6748+
throw a {{QuotaExceededError}}.
6749+
6750+
<li><p>Let <var>deferredRecord</var> be a new <a>deferred fetch record</a> whose
6751+
<a for="deferred fetch record">request</a> is <var>request</var>.
6752+
6753+
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">inactive timeout</a> to
6754+
<var>inactiveTimeout</var>.
6755+
6756+
<li><p><a for=list>Append</a> <var>deferredRecord</var> to <var>request</var>'s
6757+
<a for=request>client</a>'s <a for=fetch>fetch group</a>'s
6758+
<a for="fetch group">deferred fetch records</a>.
6759+
6760+
<li><p>Return <var>deferredRecord</var>.
6761+
</ol>
6762+
</div>
6763+
67086764

67096765

67106766
<h2 id=fetch-api>Fetch API</h2>
@@ -8399,7 +8455,7 @@ otherwise false.
83998455
</div>
84008456

84018457

8402-
<h3 id=fetch-method>Fetch method</h3>
8458+
<h2 id=fetch-method>Fetch methods</h2>
84038459

84048460
<pre class=idl>
84058461
partial interface mixin WindowOrWorkerGlobalScope {
@@ -8539,6 +8595,60 @@ with a <var>promise</var>, <var>request</var>, <var>responseObject</var>, and an
85398595
</div>
85408596

85418597

8598+
<h3 id=request-deferred-fetch-method>RequestDeferredFetch method</h3>
8599+
8600+
<pre class=idl>
8601+
8602+
dictionary DeferredRequestInit : RequestInit {
8603+
DOMHighResTimeStamp inactiveTimeout;
8604+
};
8605+
8606+
partial interface mixin WindowOrWorkerGlobalScope {
8607+
[NewObject] Promise&lt;Response> requestDeferredFetch(RequestInfo input, optional DeferredRequestInit init = {});
8608+
};
8609+
</pre>
8610+
8611+
<div algorithm="dom-requestdeferredfetch">
8612+
<p>The
8613+
<dfn id=dom-global-requestdeferredfetch method for=WindowOrWorkerGlobalScope><code>requestDeferredFetch(<var>input</var>, <var>init</var>)</code></dfn>
8614+
method steps are:
8615+
8616+
<ol>
8617+
<li><p>Let <var>promise</var> be a new promise.
8618+
8619+
<li><p>Let <var>requestObject</var> be the result of invoking the initial value of {{Request}} as
8620+
constructor with <var>input</var> and <var>init</var> as arguments. If that threw an exception,
8621+
<a for=/>reject</a> <var>promise</var> with that exception and return <var>promise</var>.
8622+
8623+
<li><p>If <var>requestObject</var>'s <a for=Request>signal</a> is <a for=AbortSignal>aborted</a>,
8624+
then <a for=/>reject</a> <var>promise</var> with <var>requestObject</var>'s
8625+
<a for=Request>signal</a>'s <a for=AbortSignal>abort reason</a> and return <var>promise</var>.
8626+
8627+
<li><p>Let <var>request</var> be <var>requestObject</var>'s <a for=Request>request</a>.
8628+
8629+
<li><p>Let <var>inactiveTimeout</var> be null.
8630+
8631+
<li><p>If <var>init</var> is given and <var>init</var>["<code>inactiveTimeout</code>"]
8632+
<a for=map>exists</a> then set <var>inactiveTimeout</var> to
8633+
<var>init</var>["<code>inactiveTimeout</code>"].
8634+
8635+
<li><p>If <var>inactiveTimeout</var> is not a {{DOMHighResTimeStamp}} then throw a {{TypeError}}.
8636+
8637+
<li><p>Let <var>deferredRecord</var> be the result of calling
8638+
<a>request a deferred fetch</a> given <var>request</var> and <var>inactiveTimeout</var>. If that
8639+
threw an exception, <a for=/>reject</a> <var>promise</var> with that exception and return
8640+
<var>promise</var>.
8641+
8642+
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">invoke callback</a> to
8643+
<a for=/>resolve</a> <var>promise</var>.
8644+
8645+
<li><p><a for=AbortSignal lt=add>Add the following abort steps</a> to <var>requestObject</var>'s
8646+
<a for=Request>signal</a>: <a for=list>remove</a> <var>deferredRecord</var> from
8647+
<var>request</var>'s <a for=request>client</a>'s <a for=fetch>fetch group</a>'s
8648+
<a for="fetch group">deferred fetch records</a>.
8649+
</ol>
8650+
8651+
85428652
<h3 id=garbage-collection>Garbage collection</h3>
85438653

85448654
<p>The user agent may <a for="fetch controller">terminate</a> an ongoing fetch if that termination
@@ -8595,117 +8705,6 @@ fetch("https://www.example.com/")
85958705

85968706

85978707

8598-
<h2 id=deferred-fetching>Deferred fetching</h2>
8599-
8600-
<p>Deferred fetches allow callers to request that a fetch is invoked at the latest possible moment,
8601-
when a <a>fetch group</a> is <a for="fetch group">terminated</a>, or after a timeout after it is
8602-
<a for="fetch group">deactivated</a>.
8603-
8604-
<h3 id="requesting-a-deferred-fetch">Requesting a deferred fetch</h3>
8605-
8606-
<div algorithm="request-a-deferred-fetch">
8607-
<p>To <dfn>request a deferred fetch</dfn> given a
8608-
<a for=/>request</a> <var>request</var> and a null-or-{{DOMHighResTimeStamp}}
8609-
<var>inactiveTimeout</var> (default null):
8610-
8611-
<ol>
8612-
<li><p>Assert: <var>request</var>'s <a for=request>client</a> is an
8613-
<a>environment settings object</a>.
8614-
8615-
<li>Let <var>totalScheduledDeferredBytesForOrigin</var> be 0.
8616-
8617-
<li>
8618-
<p>If <var>request</var>'s <a for=request>body</a> is not null then:
8619-
8620-
<ol>
8621-
<li><p>If <var>request</var>'s
8622-
<a for=request>body</a>'s <a for=body>length</a> is null, then throw a {{TypeError}}.
8623-
8624-
<li><p>Set <var>totalScheduledDeferredBytesForOrigin</var> to <var>request</var>'s
8625-
<a for=request>body</a>'s <a for=body>length</a>.
8626-
</ol>
8627-
</li>
8628-
8629-
<li><p><a for=list>For each</a> <a>deferred fetch record</a> <var>deferredRecord</var> in
8630-
<var>request</var>'s <a for=request>client</a>'s <a for=fetch>fetch group</a>'s
8631-
<a for="fetch group">deferred fetch records</a>: if <var>deferredRecord</var>'s
8632-
<a for="deferred fetch record">request</a>'s <a for=request>body</a> is not null and
8633-
<var>deferredRecord</var>'s <a for="deferred fetch record">request</a>'s <a for=request>URL</a>'s
8634-
<a for=url>origin</a> is <a>same origin</a> with <var>request</var>'s <a for=request>URL</a>'s
8635-
<a for=url>origin</a>, then increment <var>totalScheduledDeferredBytesForOrigin</var> by
8636-
<var>deferredRecord</var>'s <a for="deferred fetch record">request</a>'s <a for=request>body</a>'s
8637-
<a for=body>length</a>.
8638-
8639-
<li><p>If <var>totalScheduledDeferredBytesForOrigin</var> is greater than 64 kilobytes, then
8640-
throw a {{QuotaExceededError}}.
8641-
8642-
<li><p>Let <var>deferredRecord</var> be a new <a>deferred fetch record</a> whose
8643-
<a for="deferred fetch record">request</a> is <var>request</var>.
8644-
8645-
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">inactive timeout</a> to
8646-
<var>inactiveTimeout</var>.
8647-
8648-
<li><p><a for=list>Append</a> <var>deferredRecord</var> to <var>request</var>'s
8649-
<a for=request>client</a>'s <a for=fetch>fetch group</a>'s
8650-
<a for="fetch group">deferred fetch records</a>.
8651-
8652-
<li><p>Return <var>deferredRecord</var>.
8653-
</ol>
8654-
</div>
8655-
8656-
<h3 id=request-deferred-fetch-method>RequestDeferredFetch method</h3>
8657-
8658-
<pre class=idl>
8659-
8660-
dictionary DeferredRequestInit : RequestInit {
8661-
DOMHighResTimeStamp? inactiveTimeout;
8662-
};
8663-
8664-
partial interface mixin WindowOrWorkerGlobalScope {
8665-
[NewObject] Promise&lt;Response> requestDeferredFetch(RequestInfo input, optional DeferredRequestInit init = {});
8666-
};
8667-
</pre>
8668-
8669-
<div algorithm="dom-requestdeferredfetch">
8670-
<p>The
8671-
<dfn id=dom-global-requestdeferredfetch method for=WindowOrWorkerGlobalScope><code>requestDeferredFetch(<var>input</var>, <var>init</var>)</code></dfn>
8672-
method steps are:
8673-
8674-
<ol>
8675-
<li><p>Let <var>promise</var> be a new promise.
8676-
8677-
<li><p>Let <var>requestObject</var> be the result of invoking the initial value of {{Request}} as
8678-
constructor with <var>input</var> and <var>init</var> as arguments. If that threw an exception,
8679-
<a for=/>reject</a> <var>promise</var> with that exception and return <var>promise</var>.
8680-
8681-
<li><p>If <var>requestObject</var>'s <a for=Request>signal</a> is <a for=AbortSignal>aborted</a>,
8682-
then <a for=/>reject</a> <var>promise</var> with <var>requestObject</var>'s
8683-
<a for=Request>signal</a>'s <a for=AbortSignal>abort reason</a> and return <var>promise</var>.
8684-
8685-
<li><p>Let <var>request</var> be <var>requestObject</var>'s <a for=Request>request</a>.
8686-
8687-
<li><p>Let <var>inactiveTimeout</var> be null.
8688-
8689-
<li><p>If <var>init</var> is given and <var>init</var>["<code>inactiveTimeout</code>"]
8690-
<a for=map>exists</a> then set <var>inactiveTimeout</var> to
8691-
<var>init</var>["<code>inactiveTimeout</code>"].
8692-
8693-
<li><p>If <var>inactiveTimeout</var> is not a {{DOMHighResTimeStamp}} then throw a {{TypeError}}.
8694-
8695-
<li><p>Let <var>deferredRecord</var> be the result of calling
8696-
<a>request a deferred fetch</a> given <var>request</var> and <var>inactiveTimeout</var>. If that
8697-
threw an exception, <a for=/>reject</a> <var>promise</var> with that exception and return
8698-
<var>promise</var>.
8699-
8700-
<li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">invoke callback</a> to
8701-
<a for=/>resolve</a> <var>promise</var>.
8702-
8703-
<li><p><a for=AbortSignal lt=add>Add the following abort steps</a> to <var>requestObject</var>'s
8704-
<a for=Request>signal</a>: <a for=list>remove</a> <var>deferredRecord</var> from
8705-
<var>request</var>'s <a for=request>client</a>'s <a for=fetch>fetch group</a>'s
8706-
<a for="fetch group">deferred fetch records</a>.
8707-
</ol>
8708-
87098708
<h2 id=data-urls><code>data:</code> URLs</h2>
87108709

87118710
<p>For an informative description of <code>data:</code> URLs, see RFC 2397. This section replaces

0 commit comments

Comments
 (0)