@@ -6721,6 +6721,62 @@ agent's <a>CORS-preflight cache</a> for which there is a <a>cache entry match</a
6721
6721
</ol>
6722
6722
</div>
6723
6723
6724
+ <h3 id=deferred-fetching>Deferred fetching</h3>
6725
+
6726
+ <p> Deferred fetches allow callers to request that a fetch is invoked at the latest possible moment,
6727
+ when a <a>fetch group</a> is <a for="fetch group">terminated</a> , or after a timeout after it is
6728
+ <a for="fetch group">deactivated</a> .
6729
+
6730
+ <div algorithm="request-a-deferred-fetch">
6731
+ <p> To <dfn>request a deferred fetch</dfn> given a
6732
+ <a for=/>request</a> <var> request</var> and a null-or-{{DOMHighResTimeStamp}}
6733
+ <var> inactiveTimeout</var> (default null):
6734
+
6735
+ <ol>
6736
+ <li><p> Assert: <var> request</var> 's <a for=request>client</a> is an
6737
+ <a>environment settings object</a> .
6738
+
6739
+ <li> Let <var> totalScheduledDeferredBytesForOrigin</var> be 0.
6740
+
6741
+ <li>
6742
+ <p> If <var> request</var> 's <a for=request>body</a> is not null then:
6743
+
6744
+ <ol>
6745
+ <li><p> If <var> request</var> 's
6746
+ <a for=request>body</a> 's <a for=body>length</a> is null, then throw a {{TypeError}} .
6747
+
6748
+ <li><p> Set <var> totalScheduledDeferredBytesForOrigin</var> to <var> request</var> 's
6749
+ <a for=request>body</a> 's <a for=body>length</a> .
6750
+ </ol>
6751
+ </li>
6752
+
6753
+ <li><p> <a for=list>For each</a> <a>deferred fetch record</a> <var> deferredRecord</var> in
6754
+ <var> request</var> 's <a for=request>client</a>' s <a for=fetch>fetch group</a> 's
6755
+ <a for="fetch group">deferred fetch records</a> : if <var> deferredRecord</var> 's
6756
+ <a for="deferred fetch record">request</a> 's <a for=request>body</a> is not null and
6757
+ <var> deferredRecord</var> 's <a for="deferred fetch record">request</a>' s <a for=request>URL</a> 's
6758
+ <a for=url>origin</a> is <a>same origin</a> with <var> request</var> 's <a for=request>URL</a>' s
6759
+ <a for=url>origin</a> , then increment <var> totalScheduledDeferredBytesForOrigin</var> by
6760
+ <var> deferredRecord</var> 's <a for="deferred fetch record">request</a>' s <a for=request>body</a> 's
6761
+ <a for=body>length</a> .
6762
+
6763
+ <li><p> If <var> totalScheduledDeferredBytesForOrigin</var> is greater than 64 kilobytes, then
6764
+ throw a {{QuotaExceededError}} .
6765
+
6766
+ <li><p> Let <var> deferredRecord</var> be a new <a>deferred fetch record</a> whose
6767
+ <a for="deferred fetch record">request</a> is <var> request</var> .
6768
+
6769
+ <li><p> Set <var> deferredRecord</var> 's <a for="deferred fetch record">inactive timeout</a> to
6770
+ <var> inactiveTimeout</var> .
6771
+
6772
+ <li><p> <a for=list>Append</a> <var> deferredRecord</var> to <var> request</var> 's
6773
+ <a for=request>client</a> 's <a for=fetch>fetch group</a>' s
6774
+ <a for="fetch group">deferred fetch records</a> .
6775
+
6776
+ <li><p> Return <var> deferredRecord</var> .
6777
+ </ol>
6778
+ </div>
6779
+
6724
6780
6725
6781
6726
6782
<h2 id=fetch-api>Fetch API</h2>
@@ -8435,7 +8491,7 @@ otherwise false.
8435
8491
</div>
8436
8492
8437
8493
8438
- <h3 id=fetch-method>Fetch method</h3 >
8494
+ <h2 id=fetch-method>Fetch methods</h2 >
8439
8495
8440
8496
<pre class=idl>
8441
8497
partial interface mixin WindowOrWorkerGlobalScope {
@@ -8575,6 +8631,60 @@ with a <var>promise</var>, <var>request</var>, <var>responseObject</var>, and an
8575
8631
</div>
8576
8632
8577
8633
8634
+ <h3 id=request-deferred-fetch-method>RequestDeferredFetch method</h3>
8635
+
8636
+ <pre class=idl>
8637
+
8638
+ dictionary DeferredRequestInit : RequestInit {
8639
+ DOMHighResTimeStamp inactiveTimeout;
8640
+ };
8641
+
8642
+ partial interface mixin WindowOrWorkerGlobalScope {
8643
+ [NewObject] Promise<Response> requestDeferredFetch(RequestInfo input, optional DeferredRequestInit init = {});
8644
+ };
8645
+ </pre>
8646
+
8647
+ <div algorithm="dom-requestdeferredfetch">
8648
+ <p> The
8649
+ <dfn id=dom-global-requestdeferredfetch method for=WindowOrWorkerGlobalScope><code>requestDeferredFetch(<var>input</var>, <var>init</var>)</code></dfn>
8650
+ method steps are:
8651
+
8652
+ <ol>
8653
+ <li><p> Let <var> promise</var> be a new promise.
8654
+
8655
+ <li><p> Let <var> requestObject</var> be the result of invoking the initial value of {{Request}} as
8656
+ constructor with <var> input</var> and <var> init</var> as arguments. If that threw an exception,
8657
+ <a for=/>reject</a> <var> promise</var> with that exception and return <var> promise</var> .
8658
+
8659
+ <li><p> If <var> requestObject</var> 's <a for=Request>signal</a> is <a for=AbortSignal>aborted</a> ,
8660
+ then <a for=/>reject</a> <var> promise</var> with <var> requestObject</var> 's
8661
+ <a for=Request>signal</a> 's <a for=AbortSignal>abort reason</a> and return <var> promise</var> .
8662
+
8663
+ <li><p> Let <var> request</var> be <var> requestObject</var> 's <a for=Request>request</a> .
8664
+
8665
+ <li><p> Let <var> inactiveTimeout</var> be null.
8666
+
8667
+ <li><p> If <var> init</var> is given and <var> init</var> ["<code>inactiveTimeout</code>"]
8668
+ <a for=map>exists</a> then set <var> inactiveTimeout</var> to
8669
+ <var> init</var> ["<code>inactiveTimeout</code>"] .
8670
+
8671
+ <li><p> If <var> inactiveTimeout</var> is not a {{DOMHighResTimeStamp}} then throw a {{TypeError}} .
8672
+
8673
+ <li><p> Let <var> deferredRecord</var> be the result of calling
8674
+ <a>request a deferred fetch</a> given <var> request</var> and <var> inactiveTimeout</var> . If that
8675
+ threw an exception, <a for=/>reject</a> <var> promise</var> with that exception and return
8676
+ <var> promise</var> .
8677
+
8678
+ <li><p> Set <var> deferredRecord</var> 's <a for="deferred fetch record">invoke callback</a> to
8679
+ <a for=/>resolve</a> <var> promise</var> .
8680
+
8681
+ <li><p> <a for=AbortSignal lt=add>Add the following abort steps</a> to <var> requestObject</var> 's
8682
+ <a for=Request>signal</a> : <a for=list>remove</a> <var> deferredRecord</var> from
8683
+ <var> request</var> 's <a for=request>client</a>' s <a for=fetch>fetch group</a> 's
8684
+ <a for="fetch group">deferred fetch records</a> .
8685
+ </ol>
8686
+
8687
+
8578
8688
<h3 id=garbage-collection>Garbage collection</h3>
8579
8689
8580
8690
<p> The user agent may <a for="fetch controller">terminate</a> an ongoing fetch if that termination
@@ -8631,117 +8741,6 @@ fetch("https://www.example.com/")
8631
8741
8632
8742
8633
8743
8634
- <h2 id=deferred-fetching>Deferred fetching</h2>
8635
-
8636
- <p> Deferred fetches allow callers to request that a fetch is invoked at the latest possible moment,
8637
- when a <a>fetch group</a> is <a for="fetch group">terminated</a> , or after a timeout after it is
8638
- <a for="fetch group">deactivated</a> .
8639
-
8640
- <h3 id="requesting-a-deferred-fetch">Requesting a deferred fetch</h3>
8641
-
8642
- <div algorithm="request-a-deferred-fetch">
8643
- <p> To <dfn>request a deferred fetch</dfn> given a
8644
- <a for=/>request</a> <var> request</var> and a null-or-{{DOMHighResTimeStamp}}
8645
- <var> inactiveTimeout</var> (default null):
8646
-
8647
- <ol>
8648
- <li><p> Assert: <var> request</var> 's <a for=request>client</a> is an
8649
- <a>environment settings object</a> .
8650
-
8651
- <li> Let <var> totalScheduledDeferredBytesForOrigin</var> be 0.
8652
-
8653
- <li>
8654
- <p> If <var> request</var> 's <a for=request>body</a> is not null then:
8655
-
8656
- <ol>
8657
- <li><p> If <var> request</var> 's
8658
- <a for=request>body</a> 's <a for=body>length</a> is null, then throw a {{TypeError}} .
8659
-
8660
- <li><p> Set <var> totalScheduledDeferredBytesForOrigin</var> to <var> request</var> 's
8661
- <a for=request>body</a> 's <a for=body>length</a> .
8662
- </ol>
8663
- </li>
8664
-
8665
- <li><p> <a for=list>For each</a> <a>deferred fetch record</a> <var> deferredRecord</var> in
8666
- <var> request</var> 's <a for=request>client</a>' s <a for=fetch>fetch group</a> 's
8667
- <a for="fetch group">deferred fetch records</a> : if <var> deferredRecord</var> 's
8668
- <a for="deferred fetch record">request</a> 's <a for=request>body</a> is not null and
8669
- <var> deferredRecord</var> 's <a for="deferred fetch record">request</a>' s <a for=request>URL</a> 's
8670
- <a for=url>origin</a> is <a>same origin</a> with <var> request</var> 's <a for=request>URL</a>' s
8671
- <a for=url>origin</a> , then increment <var> totalScheduledDeferredBytesForOrigin</var> by
8672
- <var> deferredRecord</var> 's <a for="deferred fetch record">request</a>' s <a for=request>body</a> 's
8673
- <a for=body>length</a> .
8674
-
8675
- <li><p> If <var> totalScheduledDeferredBytesForOrigin</var> is greater than 64 kilobytes, then
8676
- throw a {{QuotaExceededError}} .
8677
-
8678
- <li><p> Let <var> deferredRecord</var> be a new <a>deferred fetch record</a> whose
8679
- <a for="deferred fetch record">request</a> is <var> request</var> .
8680
-
8681
- <li><p> Set <var> deferredRecord</var> 's <a for="deferred fetch record">inactive timeout</a> to
8682
- <var> inactiveTimeout</var> .
8683
-
8684
- <li><p> <a for=list>Append</a> <var> deferredRecord</var> to <var> request</var> 's
8685
- <a for=request>client</a> 's <a for=fetch>fetch group</a>' s
8686
- <a for="fetch group">deferred fetch records</a> .
8687
-
8688
- <li><p> Return <var> deferredRecord</var> .
8689
- </ol>
8690
- </div>
8691
-
8692
- <h3 id=request-deferred-fetch-method>RequestDeferredFetch method</h3>
8693
-
8694
- <pre class=idl>
8695
-
8696
- dictionary DeferredRequestInit : RequestInit {
8697
- DOMHighResTimeStamp? inactiveTimeout;
8698
- };
8699
-
8700
- partial interface mixin WindowOrWorkerGlobalScope {
8701
- [NewObject] Promise<Response> requestDeferredFetch(RequestInfo input, optional DeferredRequestInit init = {});
8702
- };
8703
- </pre>
8704
-
8705
- <div algorithm="dom-requestdeferredfetch">
8706
- <p> The
8707
- <dfn id=dom-global-requestdeferredfetch method for=WindowOrWorkerGlobalScope><code>requestDeferredFetch(<var>input</var>, <var>init</var>)</code></dfn>
8708
- method steps are:
8709
-
8710
- <ol>
8711
- <li><p> Let <var> promise</var> be a new promise.
8712
-
8713
- <li><p> Let <var> requestObject</var> be the result of invoking the initial value of {{Request}} as
8714
- constructor with <var> input</var> and <var> init</var> as arguments. If that threw an exception,
8715
- <a for=/>reject</a> <var> promise</var> with that exception and return <var> promise</var> .
8716
-
8717
- <li><p> If <var> requestObject</var> 's <a for=Request>signal</a> is <a for=AbortSignal>aborted</a> ,
8718
- then <a for=/>reject</a> <var> promise</var> with <var> requestObject</var> 's
8719
- <a for=Request>signal</a> 's <a for=AbortSignal>abort reason</a> and return <var> promise</var> .
8720
-
8721
- <li><p> Let <var> request</var> be <var> requestObject</var> 's <a for=Request>request</a> .
8722
-
8723
- <li><p> Let <var> inactiveTimeout</var> be null.
8724
-
8725
- <li><p> If <var> init</var> is given and <var> init</var> ["<code>inactiveTimeout</code>"]
8726
- <a for=map>exists</a> then set <var> inactiveTimeout</var> to
8727
- <var> init</var> ["<code>inactiveTimeout</code>"] .
8728
-
8729
- <li><p> If <var> inactiveTimeout</var> is not a {{DOMHighResTimeStamp}} then throw a {{TypeError}} .
8730
-
8731
- <li><p> Let <var> deferredRecord</var> be the result of calling
8732
- <a>request a deferred fetch</a> given <var> request</var> and <var> inactiveTimeout</var> . If that
8733
- threw an exception, <a for=/>reject</a> <var> promise</var> with that exception and return
8734
- <var> promise</var> .
8735
-
8736
- <li><p> Set <var> deferredRecord</var> 's <a for="deferred fetch record">invoke callback</a> to
8737
- <a for=/>resolve</a> <var> promise</var> .
8738
-
8739
- <li><p> <a for=AbortSignal lt=add>Add the following abort steps</a> to <var> requestObject</var> 's
8740
- <a for=Request>signal</a> : <a for=list>remove</a> <var> deferredRecord</var> from
8741
- <var> request</var> 's <a for=request>client</a>' s <a for=fetch>fetch group</a> 's
8742
- <a for="fetch group">deferred fetch records</a> .
8743
- </ol>
8744
-
8745
8744
<h2 id=data-urls><code>data:</code> URLs</h2>
8746
8745
8747
8746
<p> For an informative description of <code> data:</code> URLs, see RFC 2397. This section replaces
0 commit comments