- From: Anne van Kesteren <notifications@github.com>
- Date: Wed, 09 Apr 2025 02:04:26 -0700
- To: whatwg/fetch <fetch@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/fetch/pull/1647/review/2752628128@github.com>
@annevk commented on this pull request. Before addressing these comments, maybe squash and merge the existing commits and rebase on main. 103 is a bit much. :-) > + <li><p><a>Populate request from client</a> given <var>request</var>. + + <li><p>Set <var>request</var>'s <a for=request>service-workers mode</a> to "<code>none</code>". + + <li><p>Set <var>request</var>'s <a for=request>keepalive</a> to true. + + <li><p>Let <var>deferredRecord</var> be a new <a>deferred fetch record</a> whose + <a for="deferred fetch record">request</a> is <var>request</var>, and whose + <a for="deferred fetch record">notify invoked</a> is + <var>onActivatedWithoutTermination</var>. + + <li><p><a for=list>Append</a> <var>deferredRecord</var> to <var>request</var>'s + <a for=request>client</a>'s <a>fetch group</a>'s <a for="fetch group">deferred fetch records</a>. + + <li> + <p>If <var>activateAfter</var> is non-null, then run the following steps <a>in parallel</a>:</p> ```suggestion <p>If <var>activateAfter</var> is non-null, then run the following steps <a>in parallel</a>: ``` > + + <li><p>If <var>requestObject</var>'s <a for=Request>signal</a> is <a for=AbortSignal>aborted</a>, + then throw <a for=Request>signal</a>'s <a for=AbortSignal>abort reason</a>. + + <li><p>Let <var>request</var> be <var>requestObject</var>'s <a for=Request>request</a>. + + <li><p>Let <var>activateAfter</var> be null. + + <li><p>If <var>init</var> is given and <var>init</var>["{{DeferredRequestInit/activateAfter}}"] + <a for=map>exists</a>, then set <var>activateAfter</var> to + <var>init</var>["{{DeferredRequestInit/activateAfter}}"]. + + <li><p>If <var>activateAfter</var> is less than 0, then throw a {{RangeError}}. + + <li><p>If <var>request</var>'s <a for=request>client</a> is not a <a>fully active</a> + {{Document}}, then throw a {{TypeError}}. A client is never a document. > + + <li><p>Set <var>deferredRecord</var>'s <a for="deferred fetch record">invoke state</a> to + "<code>sent</code>". + + <li><p><a for=/>Fetch</a> <var>deferredRecord</var>'s <a for="deferred fetch record">request</a>. + + <li><p><a>Queue a global task</a> on the <a>deferred fetch task source</a> with + <var>deferredRecord</var>'s <a for="deferred fetch record">request</a>'s + <a for=request>client</a>'s <a for="environment settings object">global object</a> to run + <var>deferredRecord</var>'s <a for="deferred fetch record">notify invoked</a>. +</ol> +</div> + +<h4 id=deferred-fetch-quota>Deferred fetching quota</h4> + +<!-- non-normative --> ```suggestion <p><em>This section is non-normative.</em> ``` > + "<code>sent</code>". + + <li><p><a for=/>Fetch</a> <var>deferredRecord</var>'s <a for="deferred fetch record">request</a>. + + <li><p><a>Queue a global task</a> on the <a>deferred fetch task source</a> with + <var>deferredRecord</var>'s <a for="deferred fetch record">request</a>'s + <a for=request>client</a>'s <a for="environment settings object">global object</a> to run + <var>deferredRecord</var>'s <a for="deferred fetch record">notify invoked</a>. +</ol> +</div> + +<h4 id=deferred-fetch-quota>Deferred fetching quota</h4> + +<!-- non-normative --> +<p>The deferred-fetch quota is allocated to a <a for=/>top-level traversable</a> (a "tab"), +amounting to 640 kibibytes. The top-level {{Document}} and its same-origin directly nested documents ```suggestion amounting to 640 kibibytes. The top-level document and its same-origin directly nested documents ``` Please either use "document" (possibly as `<a for=/>document</a>`) or `{{Document}} object`. This applies quite a few times. > +<pre><code> ++ https://me.example.com with Permissions-policy: deferred-fetch=(self "https://ok.example.com") +| (See below for quota) +| ++ ---- + https://me.example.com +| | Shares quota with the <a for=/>top-level traversable</a>, as they're same origin. +| | +| + ---- + https://x.example.com +| 8 kibibytes. +| +| ++ ---- + https://x.example.com +| 8 kibibytes. +| | +| + https://me.example.com +| 0. Even though it's same origin with the <a for=/>top-level traversable</a>, it does not +| automatically share its quota as they are separated by a cross-origin intermediary. +| ++ ---- + https://ok.example.com/good +| | 64 kibibytes, granted via the "{{PermissionsPolicy/deferred-fetch}}" policy. +| | +| + ---- + https://x.example.com +| 0. Only documents with the same origin as the <a for=/>top-level traversable</a> can +| grant the 8 kibibytes based on the "{{PermissionsPolicy/deferred-fetch-minimal}}" policy. +| ++ ---- + https://ok.example.com/redirect, navigated to https://x.example.com +| 0. The reserved 64 kibibytes for https://ok.example.com are not available for https://x.example.com. +| ++ ---- + https://ok.example.com/back, navigated to https://me.example.com + Shares quota with the <a for=/>top-level traversable</a>, as they're same origin. +</code></pre> I don't think this is accessible so I don't think we can include this as-is. > +descendants share a quota of 384 kibibytes. That value is computed as such: +<ul> + <li><p>640 kibibytes are initially granted to the <a for=/>top-level traversable</a>. + + <li><p>128 kibibytes are reserved for the "{{PermissionsPolicy/deferred-fetch-minimal}}" policy. + + <li><p>64 kibibytes are reserved for the container navigating to + <code>https://ok.example/good</code>. + + <li><p>64 kibibytes are reserved for the container navigating to + <code>https://ok.example/redirect</code>, and lost when it navigates away. + + <li><code>https://ok.example.com/back</code> did not reserve 64 kibibytes, because it navigated + back to <a for=/>top-level traversable</a>'s origin. + + <li><p>640 - 128 - 64 - 64 = 384 kibibytes. Please use `−` for subtraction. > + +<div algorithm> +<p>To <dfn export>potentially free deferred-fetch quota</dfn> for a {{Document}} +<var>document</var>, if <var>document</var>'s <a>node navigable</a>'s <a>container document</a> is +not null, and its <a for=Document>origin</a> is <a>same origin</a> with <var>document</var>, then +set <var>document</var>'s <a>node navigable</a>'s <a>navigable container</a>'s +<a>reserved deferred-fetch quota</a> to 0. + +<p class=note>This is called when a {{Document}} is created. It ensures that same-origin nested +documents don't reserve quota, as they anyway share their parent quota. It can only be called upon +document creation, as the <a for=Document>origin</a> of the {{Document}} is only known after +redirects are handled. +</div> + +<div algorithm> +<p>To get the <dfn>deferred-fetch control document</dfn> of a {{Document}} <var>document</var>: Here it should be `{{Document}} object` for instance. > @@ -8576,6 +9047,135 @@ with a <var>promise</var>, <var>request</var>, <var>responseObject</var>, and an </ol> </div> +<p>A {{FetchLaterResult}} has an associated <dfn for=FetchLaterResult>activated getter steps</dfn>, +which is an algorithm returning a boolean. + +<div algorithm> +<p>The <dfn attribute for=FetchLaterResult><code>activated</code></dfn> getter steps are to call ```suggestion <p>The <dfn attribute for=FetchLaterResult><code>activated</code></dfn> getter steps are to return the result of running ``` and wrapping -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/fetch/pull/1647#pullrequestreview-2752628128 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/fetch/pull/1647/review/2752628128@github.com>
Received on Wednesday, 9 April 2025 09:04:30 UTC