- From: Anne van Kesteren <notifications@github.com>
- Date: Thu, 05 Jan 2017 04:43:12 -0800
- To: w3c/ServiceWorker <ServiceWorker@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/ServiceWorker/pull/1049/review/15296014@github.com>
annevk requested changes on this pull request.
> @@ -1289,7 +1289,9 @@ spec: webappsec-referrer-policy; urlPrefix: https://w3c.github.io/webappsec-refe
An {{ExtendableEvent}} object has an associated <dfn for="ExtendableEvent">extend lifetime promises</dfn> (an array of <a>promises</a>). It is initially an empty array.
- An {{ExtendableEvent}} object has an associated <dfn id="extensions-allowed-flag">extensions allowed flag</dfn>. It is initially set.
+ An {{ExtendableEvent}} object has an associated <dfn for="ExtendableEvent" id="extensions-allowed-flag">extensions allowed flag</dfn>. It is initially set.
It would be good to invert this somehow. Flags and booleans that default to false are much more intuitive.
>
+ Note: If no lifetime extension promise has been added up to this point (i.e., at the end of the task that called the event handlers), the [=ExtendableEvent/extensions allowed flag=] is immediately unset. Calling {{ExtendableEvent/waitUntil()}} in subsequent asynchronous tasks will throw.
Why do you need both the flag and the count then?
> The user agent *should not* <a lt="terminate service worker">terminate</a> the [=/service worker=] associated with |event|'s <a>relevant settings object</a>'s [=environment settings object/global object=] until |event|'s <a>extensions allowed flag</a> is unset. However, the user agent *may* impose a time limit to this lifetime extension.
</section>
<section algorithm>
+ <h3 id="handle-extend-lifetime-promise-algorithm"><dfn>Handle Extend Lifetime Promise</dfn></h3>
+
+ : Input
+ :: |event|, an {{ExtendableEvent}} object
+ :: |promise|, a [=promise=]
+ : Output
+ :: None
+
+ 1. Wait until |promise| is settled [=in parallel=].
+ 2. [=Queue a microtask=] to run the following substeps:
You cannot queue microtasks from something that runs in parallel. Needs to be a regular task.
> The user agent *should not* <a lt="terminate service worker">terminate</a> the [=/service worker=] associated with |event|'s <a>relevant settings object</a>'s [=environment settings object/global object=] until |event|'s <a>extensions allowed flag</a> is unset. However, the user agent *may* impose a time limit to this lifetime extension.
</section>
<section algorithm>
+ <h3 id="handle-extend-lifetime-promise-algorithm"><dfn>Handle Extend Lifetime Promise</dfn></h3>
+
+ : Input
+ :: |event|, an {{ExtendableEvent}} object
+ :: |promise|, a [=promise=]
+ : Output
+ :: None
+
+ 1. Wait until |promise| is settled [=in parallel=].
+ 2. [=Queue a microtask=] to run the following substeps:
+ 1. Decrease |event|'s [=ExtendableEvent/pending promises count=] by one.
+ 1. For each |reaction| in |promise|.\[[PromiseFulfillReactions]]:
This seems extremely hacky and probably wrong. I don't think we should be poking at the guts of promises.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/ServiceWorker/pull/1049#pullrequestreview-15296014
Received on Thursday, 5 January 2017 12:43:53 UTC