@@ -2711,12 +2711,15 @@ has the following <a for=struct>items</a>:
2711
2711
<dt> <dfn export for="deferred fetch record">inactivity deferred delay</dfn> (default null)
2712
2712
<dd> Null or a <a>duration</a>
2713
2713
2714
- <dt> <dfn export for="deferred fetch record">pending steps</dfn> (default null)
2715
- <dt> <dfn export for="deferred fetch record">invoked callback</dfn> (default null)
2716
- <dd> Null or an algortihm accepting nothing
2717
-
2718
- <dt> <dfn export for="deferred fetch record">invoked</dfn> (default false)
2714
+ <dt> <dfn export for="deferred fetch record">sent</dfn> (default false)
2719
2715
<dd> A boolean
2716
+
2717
+ <dt> <dfn export for="deferred fetch record">invoke state</dfn> (default "<code> deferred</code> ")
2718
+ <dd>
2719
+ <p> "<code> deferred</code> ", "<code> scheduled</code> ", "<code> terminated</code> ",
2720
+ "<code> aborted</code> ", or "<code> sent</code> "
2721
+
2722
+ <p class=note> This value can be modified <a>in parallel</a> .
2720
2723
</dl>
2721
2724
2722
2725
@@ -2726,79 +2729,60 @@ has the following <a for=struct>items</a>:
2726
2729
<dfn export for="fetch group" id=concept-fetch-group-terminate>terminated</dfn> :
2727
2730
2728
2731
<ol>
2729
- <li>
2730
- <p> <a for=list>For each</a> <a for="fetch group">deferred fetch record</a>
2731
- <var> deferredRecord</var> in <var> fetchGroup</var> 's
2732
- <a for="fetch group">deferred fetch records</a> whose <a for="deferred fetch record">invoked</a> is
2733
- false:
2734
-
2735
- <ol>
2736
- <li><p> If <var> deferredRecord</var> 's <a for="deferred fetch record">pending steps</a> is not
2737
- null then <a>abort</a> <var> deferredRecord</var> 's
2738
- <a for="deferred fetch record">pending steps</a> .
2739
-
2740
- <li><p> <a for=/>fetch</a> <var> deferredRecord</var> 's <a for="deferred fetch record">request</a> .
2741
- </ol>
2742
-
2743
2732
<li><p> For each associated <a for="fetch group">fetch record</a> <var> record</var> ,
2744
2733
if <var> record</var> 's <a for="fetch record">controller</a> is non-null and
2745
2734
<var> record</var> 's <a for="fetch record">request</a>' s <a>done flag</a> is unset or
2746
2735
<a for=request>keepalive</a> is false, <a for="fetch controller">terminate</a> <var> record</var> 's
2747
2736
<a for="fetch record">controller</a> .
2748
- </ol>
2749
-
2750
- <p> When a <a for=fetch>fetch group</a> <var> fetchGroup</var> is
2751
- <dfn export for="fetch group" id=concept-fetch-group-activate>activated</dfn> :
2752
- <a for=list>for each</a> <a for=/>deferred fetch record</a> <var> deferredRecord</var> in
2753
- <var> fetchGroup</var> 's <a for="fetch group">deferred fetch records</a> :
2754
-
2755
- <ol>
2756
- <li>
2757
- <p> If <var> deferredRecord</var> 's <a for="deferred fetch record">invoked</a> is true then:
2758
- <ol>
2759
- <li><p> If <var> deferredRecord</var> 's <a for="deferred fetch record">invoked callback</a> is not
2760
- null then call <var> deferredRecord</var> 's <a for="deferred fetch record">invoked callback</a> .
2761
-
2762
- <li><p> <a for=list>Remove</a> <var> deferredRecord</var> from <var> fetchGroup</var> 's
2763
- <a for="fetch group">deferred fetch records</a> .
2764
- </ol>
2765
2737
2766
- <li><p> Otherwise, if <var> deferredRecord</var> 's
2767
- <a for="deferred fetch record">pending steps</a> is not null, then <a>abort</a>
2768
- <var> deferredRecord</var> 's <a for="deferred fetch record">pending steps</a> and set
2769
- <var> deferredRecord</var> 's <a for="deferred fetch record">pending steps</a> to null.
2738
+ <li><p> <a for=list>For each</a> <a for="fetch group">deferred fetch record</a>
2739
+ <var> deferredRecord</var> in <var> fetchGroup</var> 's
2740
+ <a for="fetch group">deferred fetch records</a> : If the result of atomically exchanging the value
2741
+ of <var> deferredRecord</var> 's <a for="deferred fetch record">invoke state</a> with
2742
+ "<code> terminated</code> " is not "<code> sent</code> ", then the user agent should
2743
+ <a for=/>fetch</a> <var> deferredRecord</var> 's <a for="deferred fetch record">request</a> . The
2744
+ exact time in which the <a for=/>fetch</a> takes place is <a>implementation-defined</a> .
2770
2745
</ol>
2771
2746
2772
2747
<p> When a <a for=fetch>fetch group</a> <var> fetchGroup</var> is
2773
2748
<dfn export for="fetch group" id=concept-fetch-group-deactivate>deactivated</dfn> :
2749
+ <a for=list>For each</a> <a>deferred fetch record</a> <var> deferredRecord</var> in
2750
+ <var> fetchGroup</var> 's <a for="fetch group">deferred fetch records</a> whose
2751
+ <a for="deferred fetch record">inactivity deferred delay</a> is not null:
2774
2752
2775
2753
<ol>
2754
+ <li><p> Set <var> deferredRecord</var> 's <a for="deferred fetch record">invoke state</a> to
2755
+ "<code> scheduled</code> ".
2756
+
2776
2757
<li>
2777
- <p> <a for=list>For each</a> <a>deferred fetch record</a> <var> deferredRecord</var> in
2778
- <var> fetchGroup</var> 's <a for="fetch group">deferred fetch records</a> whose
2779
- <a for="deferred fetch record">inactivity deferred delay</a> is not null: set
2780
- <var> deferredRecord</var> 's <a for="deferred fetch record">pending steps</a> to running the
2781
- following steps <a>in parallel</a> :
2758
+ <p> Run the following steps <a>in parallel</a> :
2782
2759
2783
2760
<ol>
2784
- <li><p> Wait until <var> deferredRecord</var> 's
2785
- <a for="deferred fetch record">inactivity deferred delay</a> have passed.
2786
-
2787
- <li>
2788
- <p> <a>Queue a fetch task</a> to run the following steps with
2789
- <a for="fetch record">request</a> 's <a for=request>client</a>' s
2790
- <a for="environment settings object">global object</a> :
2791
-
2792
- <ol>
2793
- <li><p> <a for=/>Fetch</a> <var> record</var> 's <a for="fetch record">request</a> .
2794
-
2795
- <li><p> Set <var> deferredRecord</var> <a for="deferred fetch record">invoked</a> to true.
2796
- </ol>
2797
- </li>
2761
+ <li><p> The user agent should wait until <var> deferredRecord</var> 's
2762
+ <a for="deferred fetch record">inactivity deferred delay</a> have passed or until
2763
+ <var> deferredRecord</var> 's <a for="deferred fetch record">invoke state</a> is not
2764
+ "<code> scheduled</code> ". The user agent may wait for a longer or shorter period time, e.g., to
2765
+ optimize batching of deferred fetches.
2766
+
2767
+ <li><p> If the result of atomically exchanging the value of <var> deferredRecord</var> 's
2768
+ <a for="deferred fetch record">invoke state</a> with "<code> sent</code> " is
2769
+ "<code> scheduled</code> ", then <a for=/>fetch</a> <var> record</var> 's
2770
+ <a for="fetch record">request</a> .
2798
2771
</ol>
2799
2772
</li>
2800
2773
</ol>
2801
2774
2775
+ <p> When a <a for=fetch>fetch group</a> <var> fetchGroup</var> is
2776
+ <dfn export for="fetch group" id=concept-fetch-group-reactivate>reactivated</dfn> :
2777
+ <a for=list>For each</a> <a for=/>deferred fetch record</a> <var> deferredRecord</var> in
2778
+ <var> fetchGroup</var> 's <a for="fetch group">deferred fetch records</a> : If the result of atomically
2779
+ exchanging the value of <var> deferredRecord</var> 's <a for="deferred fetch record">invoke state</a>
2780
+ with "<code> deferred</code> " is "<code> sent</code> ", then <a for=list>remove</a>
2781
+ <var> deferredRecord</var> from <var> fetchGroup</var> 's
2782
+ <a for="fetch group">deferred fetch records</a> and set <var> deferredRecord</var> 's
2783
+ <a for="deferred fetch record">sent</a> to true.
2784
+
2785
+
2802
2786
<h3 id=resolving-domains>Resolving domains</h3>
2803
2787
2804
2788
<div algorithm>
@@ -8637,19 +8621,29 @@ dictionary DeferredRequestInit : RequestInit {
8637
8621
DOMHighResTimeStamp backgroundTimeout;
8638
8622
};
8639
8623
8624
+ interface FetchLaterResult {
8625
+ readonly attribute boolean sent;
8626
+ };
8627
+
8640
8628
partial interface mixin WindowOrWorkerGlobalScope {
8641
- [NewObject] Promise<Response> fetchLater(RequestInfo input, optional DeferredRequestInit init = {});
8629
+ [NewObject] FetchLaterResult fetchLater(RequestInfo input, optional DeferredRequestInit init = {});
8642
8630
};
8643
8631
</pre>
8644
8632
8633
+ <p> A {{FetchLaterResult}} has an associated <a>deferred fetch record</a>
8634
+ <dfn for=FetchLaterResult>deferred record</dfn> .
8635
+
8636
+ <div algorithm>
8637
+ <p> The <dfn attribute for=FetchLaterResult><code>sent</code></dfn> getter steps are to return
8638
+ <a>this</a> 's <a for=FetchLaterResult>deferred record</a>' s <a for="deferred fetch record">sent</a> .
8639
+ </div>
8640
+
8645
8641
<div algorithm="dom-fetch-later">
8646
8642
<p> The
8647
8643
<dfn id=dom-global-fetch-later method for=WindowOrWorkerGlobalScope><code>fetchLater(<var>input</var>, <var>init</var>)</code></dfn>
8648
8644
method steps are:
8649
8645
8650
8646
<ol>
8651
- <li><p> Let <var> promise</var> be a new promise.
8652
-
8653
8647
<li><p> Let <var> requestObject</var> be the result of invoking the initial value of {{Request}} as
8654
8648
constructor with <var> input</var> and <var> init</var> as arguments. If that threw an exception,
8655
8649
<a for=/>reject</a> <var> promise</var> with that exception and return <var> promise</var> .
@@ -8669,17 +8663,24 @@ method steps are:
8669
8663
<li><p> If <var> backgroundTimeout</var> is not a {{DOMHighResTimeStamp}} then throw a {{TypeError}} .
8670
8664
8671
8665
<li><p> Let <var> deferredRecord</var> be the result of calling
8672
- <a>request a deferred fetch</a> given <var> request</var> and <var> backgroundTimeout</var> . If that
8673
- threw an exception, <a for=/>reject</a> <var> promise</var> with that exception and return
8674
- <var> promise</var> .
8666
+ <a>request a deferred fetch</a> given <var> request</var> and <var> backgroundTimeout</var> . This
8667
+ may throw an exception.
8675
8668
8676
- <li><p> Set <var> deferredRecord</var> 's <a for="deferred fetch record">invoke callback</a> to
8677
- <a for=/>resolve</a> <var> promise</var> .
8669
+ <li>
8670
+ <p> <a for=AbortSignal lt=add>Add the following abort steps</a> to <var> requestObject</var> 's
8671
+ <a for=Request>signal</a> :
8678
8672
8679
- <li><p> <a for=AbortSignal lt=add>Add the following abort steps</a> to <var> requestObject</var> 's
8680
- <a for=Request>signal</a> : <a for=list>remove</a> <var> deferredRecord</var> from
8681
- <var> request</var> 's <a for=request>client</a>' s <a for=fetch>fetch group</a> 's
8682
- <a for="fetch group">deferred fetch records</a> .
8673
+ <ol>
8674
+ <li><p> Set <var> deferredRecord</var> 's <a for="deferred fetch record">invoke state</a> to
8675
+ "<code> aborted</code> ".
8676
+
8677
+ <li><p> <a for=list>Remove</a> <var> deferredRecord</var> from
8678
+ <var> request</var> 's <a for=request>client</a>' s <a for=fetch>fetch group</a> 's
8679
+ <a for="fetch group">deferred fetch records</a> .
8680
+ </ol>
8681
+
8682
+ <li><p> Return a new {{FetchLaterResult}} whose <a for=FetchLaterResult>deferred record</a> is
8683
+ <var> deferredRecord</var> .
8683
8684
</ol>
8684
8685
8685
8686
0 commit comments