@@ -6705,6 +6705,62 @@ agent's <a>CORS-preflight cache</a> for which there is a <a>cache entry match</a
6705
6705
</ol>
6706
6706
</div>
6707
6707
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
+
6708
6764
6709
6765
6710
6766
<h2 id=fetch-api>Fetch API</h2>
@@ -8399,7 +8455,7 @@ otherwise false.
8399
8455
</div>
8400
8456
8401
8457
8402
- <h3 id=fetch-method>Fetch method</h3 >
8458
+ <h2 id=fetch-method>Fetch methods</h2 >
8403
8459
8404
8460
<pre class=idl>
8405
8461
partial interface mixin WindowOrWorkerGlobalScope {
@@ -8539,6 +8595,60 @@ with a <var>promise</var>, <var>request</var>, <var>responseObject</var>, and an
8539
8595
</div>
8540
8596
8541
8597
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<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
+
8542
8652
<h3 id=garbage-collection>Garbage collection</h3>
8543
8653
8544
8654
<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/")
8595
8705
8596
8706
8597
8707
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<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
-
8709
8708
<h2 id=data-urls><code>data:</code> URLs</h2>
8710
8709
8711
8710
<p> For an informative description of <code> data:</code> URLs, see RFC 2397. This section replaces
0 commit comments