- From: Anne van Kesteren <notifications@github.com>
- Date: Thu, 18 Mar 2021 01:52:32 -0700
- To: whatwg/fetch <fetch@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/fetch/pull/1185/review/615089606@github.com>
@annevk commented on this pull request.
> +
+<p>To <dfn>clamp connection timing to fetch timing</dfn>, given <a for=/>connection timing info</a>
+<var>timingInfo</var> and <a typedef for=/>DOMHighResTimeStamp</a> <var>defaultStartTime</var>, run these
+steps:
+<ol>
+ <li><p>If <var>timingInfo</var>'s <a for="connection timing info">connection start time</a> is
+ greater than <var>defaultStartTime</var>, then return <var>timingInfo</var>.
+
+ <li><p>Otherwise, return a new <a for=/>connection timing info</a>, with
+ <a for="connection timing info">domain lookup start time</a> set to <var>defaultStartTime</var>,
+ <a for="connection timing info">domain lookup end time</a> set to <var>defaultStartTime</var>,
+ <a for="connection timing info">connection start time</a> set to <var>defaultStartTime</var>,
+ <a for="connection timing info">connection end time</a> set to <var>defaultStartTime</var>,
+ <a for="connection timing info">secure connection start time</a> set to
+ <var>defaultStartTime</var>, and <a for="connection timing info">alpn negotiated protocol</a>
+ set to <var>timingInfo</var>'s <a for="connection timing info">alpn negotiated protocol</a>.
This is missing a closing `</ol>` it seems.
> + <dd>A <a typedef for=/>DOMHighResTimeStamp</a>
+ <dt><dfn export for="connection timing info">alpn negotiated protocol</dfn> (default empty string)
+ <dd>A string.
+</dl>
+
+<p class=note>Note that timestamps in this spec are usually unsafe, and are meant to be coarsened
+and normalized to a <a for=/>global object</a> prior to being exposed.
+
+<p>To <dfn>clamp connection timing to fetch timing</dfn>, given <a for=/>connection timing info</a>
+<var>timingInfo</var> and <a typedef for=/>DOMHighResTimeStamp</a> <var>defaultStartTime</var>, run these
+steps:
+<ol>
+ <li><p>If <var>timingInfo</var>'s <a for="connection timing info">connection start time</a> is
+ greater than <var>defaultStartTime</var>, then return <var>timingInfo</var>.
+
+ <li><p>Otherwise, return a new <a for=/>connection timing info</a>, with
No need for `Otherwise` if you do early returns.
> @@ -2213,6 +2281,90 @@ clearly stipulates that <a>connections</a> are keyed on
<!-- See https://github.com/whatwg/fetch/issues/114#issuecomment-143500095 for when we make
WebSocket saner -->
+<p>The requirements for <dfn export id="concept-record-connection-timing-info">recording connection
This shouldn't be exported. Also doesn't need an ID (it'll get one assigned automatically).
> @@ -3775,6 +3932,75 @@ steps:
<!-- This is really bad and needs to be handled differently at some point. -->
</ol>
+<p>To <dfn for=response>Attach timing info</dfn>, given <a for=/>response</a>
Lowercase attach. Can probably leave out `for=response` here given it's an internal algorithm.
> @@ -3775,6 +3932,75 @@ steps:
<!-- This is really bad and needs to be handled differently at some point. -->
</ol>
+<p>To <dfn for=response>Attach timing info</dfn>, given <a for=/>response</a>
+<var>response</var> and <a for=/>fetch params</a> <var>fetchParams</var>, perform the following
+steps:
+<ol>
+ <li><p>Let <var>timingInfo</var> be <var>fetchParams</var>'s <a for="fetch params">timing info</a>.
+
+ <li><p>Let <var>redirectTimingList</var> be <var>fetchParams</var>'s
+ <a for="fetch params">redirect timing info list</a>.
+
+ <li><p>Let <var>body</var> be <var>response</var>'s <a for=response>body</a>.
This doesn't appear to be needed?
> +<ol>
+ <li><p>Let <var>timingInfo</var> be <var>response</var>'s <a for=response>timing info</a>.
+
+ <li><p>If <var>timingInfo</var> is null, return null.
+
+ <li><p>Let <var>startTime</var> be <var>timingInfo</var>'s
+ <a for="fetch timing info">fetch start time</a>.
+
+ <li><p>If <var>timingInfo</var>'s <a for="fetch timing info">redirect start time</a> is not zero,
+ then set <var>startTime</var> to <var>timingInfo</var>'s
+ <a for="fetch timing info">redirect start time</a>.
+
+ <li><p>If <var>response</var>'s <a for=response>timing allow passed flag</a> is not set, then
+ set <var>timingInfo</var> to a new <a for=/>fetch timing info</a>, with its
+ <a for="fetch timing info">start time</a>
+ <a for="fetch timing info">fetch start time</a> set to <var>startTime</var>.
Does this mean to set two fields?
> + <li><p>If <var>timingInfo</var> is null, return null.
+
+ <li><p>Let <var>startTime</var> be <var>timingInfo</var>'s
+ <a for="fetch timing info">fetch start time</a>.
+
+ <li><p>If <var>timingInfo</var>'s <a for="fetch timing info">redirect start time</a> is not zero,
+ then set <var>startTime</var> to <var>timingInfo</var>'s
+ <a for="fetch timing info">redirect start time</a>.
+
+ <li><p>If <var>response</var>'s <a for=response>timing allow passed flag</a> is not set, then
+ set <var>timingInfo</var> to a new <a for=/>fetch timing info</a>, with its
+ <a for="fetch timing info">start time</a>
+ <a for="fetch timing info">fetch start time</a> set to <var>startTime</var>.
+
+ <li><p>Otherwise, <var>timingInfo</var>'s <a for="fetch timing info">start time</a> to
+ <var>startTime</var>.
I think this is missing "set".
> + <li><p>Let <var>redirectTimingList</var> be <var>fetchParams</var>'s
+ <a for="fetch params">redirect timing info list</a>.
+
+ <li><p>Let <var>body</var> be <var>response</var>'s <a for=response>body</a>.
+
+ <li><p>Set <var>response</var>'s <a for=response>timing info</a> to <var>fetchParams</var>'s
+ <a for="fetch params">timing info</a>.
+
+ <li><p>If <var>redirectTimingList</var> is not empty, set <var>timingInfo</var>'s
+ <a for="fetch timing info">redirect start time</a> to <var>redirectTimingList</var>'s first item's
+ <a for="fetch timing info">fetch start time</a> and
+ <a for="fetch timing info">redirect end time</a> to <var>redirectTimingList</var>'s last item's
+ <a for="fetch timing info">fetch start time</a>.
+</ol>
+
+<p>To <dfn export for=response>retrieve timing info</dfn>, given <a for=/>response</a> <var>response</var>,
It seems weird for something called retrieve to also manipulate.
> + <li><p>If <var>timingInfo</var>'s <a for="fetch timing info">redirect start time</a> is not zero,
+ then set <var>startTime</var> to <var>timingInfo</var>'s
+ <a for="fetch timing info">redirect start time</a>.
+
+ <li><p>If <var>response</var>'s <a for=response>timing allow passed flag</a> is not set, then
+ set <var>timingInfo</var> to a new <a for=/>fetch timing info</a>, with its
+ <a for="fetch timing info">start time</a>
+ <a for="fetch timing info">fetch start time</a> set to <var>startTime</var>.
+
+ <li><p>Otherwise, <var>timingInfo</var>'s <a for="fetch timing info">start time</a> to
+ <var>startTime</var>.
+
+ <li><p>Return <var>timingInfo</var>.
+</ol>
+
+<p>To <dfn export for=response>finalize and report timing</dfn> given <a for=/>response</a>
Probably no need for `for=response` here either.
> <li><p><a for=/>Resolve</a> <var>p</var> with <var>responseObject</var>.
</ol>
+ <p><a>If aborted</a>, then <a for=response>finalize and report timing</a> for <var>response</var>,
This is not how that Infra construct works. It seems this needs integration with "abort fetch" as well somehow.
> @@ -5926,6 +6219,9 @@ the associated steps:
<li><p>Let <var>steps</var> be to return the result of <a>package data</a> with the first argument
given, <var>type</var>, and <var>object</var>'s <a for=Body>MIME type</a>.
+ <li><p><a>Upon fulfillment</a> of <var>promise</var>, call <var>object</var>'s
+ <a for=Body>on body consumed</a>.
One thing this setup means is that unless you consume you don't get a RT object. Is that the case? Also, it's a bit weird that above we do care about errors, but here we don't.
> @@ -5788,6 +6077,10 @@ due course.
<dfn id=concept-body-mime-type for=Body>MIME type</dfn> algorithm which takes no arguments and
returns failure or a <a for=/>MIME type</a>.
+<p>Objects including the {{Body}} interface mixin have an associated
+<dfn id=concept-body-on-fully-read for=Body>on body consumed</dfn> (an algorithm which takes no
Let's call this fully read, like the other one. No need for ID. (Or is Bikeshed case-insensitive? In that case, maybe "once read". I'd rather not name it similarly to event handlers.)
> @@ -6915,9 +7213,16 @@ method steps are:
<li><p>Set <var>responseObject</var> to the result of <a for=Response>creating</a> a {{Response}}
object, given <var>response</var>, "<code>immutable</code>", and <var>relevantRealm</var>.
+ <li><p>Set <var>responseObject</var>'s <a for=Body>on body consumed</a> to calling
+ <a for=response>finalize and report timing</a> for <var>response</var>,
+ <var>globalObject</var> and "<code>fetch</code>".
Here and elsewhere, note that we use Oxford commas.
> @@ -3775,6 +3932,75 @@ steps:
<!-- This is really bad and needs to be handled differently at some point. -->
</ol>
+<p>To <dfn for=response>Attach timing info</dfn>, given <a for=/>response</a>
Also, if we only do this once, I think it would be okay to inline this.
> + <li><p>Let <var>redirectTimingList</var> be <var>fetchParams</var>'s
+ <a for="fetch params">redirect timing info list</a>.
+
+ <li><p>Let <var>body</var> be <var>response</var>'s <a for=response>body</a>.
+
+ <li><p>Set <var>response</var>'s <a for=response>timing info</a> to <var>fetchParams</var>'s
+ <a for="fetch params">timing info</a>.
+
+ <li><p>If <var>redirectTimingList</var> is not empty, set <var>timingInfo</var>'s
+ <a for="fetch timing info">redirect start time</a> to <var>redirectTimingList</var>'s first item's
+ <a for="fetch timing info">fetch start time</a> and
+ <a for="fetch timing info">redirect end time</a> to <var>redirectTimingList</var>'s last item's
+ <a for="fetch timing info">fetch start time</a>.
+</ol>
+
+<p>To <dfn export for=response>retrieve timing info</dfn>, given <a for=/>response</a> <var>response</var>,
Also, it seems there is only one caller. Maybe inline this?
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/fetch/pull/1185#pullrequestreview-615089606
Received on Thursday, 18 March 2021 08:52:45 UTC