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