-
Notifications
You must be signed in to change notification settings - Fork 162
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for 'serviceworkers' member #507
Changes from 1 commit
9e5567a
4a5f762
e97ab3e
2524071
3df8f7a
5d37374
5c867ad
4fc48b1
77bdd10
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -352,7 +352,8 @@ <h3> | |
<ul> | ||
<li>Invoke <a>Start Register</a> with <var>scope</var> and <var>src</var> | ||
members of the <var>service worker registration</var>, a new <var>promise</var>, | ||
null, <a>manifest URL</a>, <code>"classic"</code> and <code>False</code>, | ||
null, <a>manifest URL</a>, plus the <var>type</var> and <var>use_cache</var> | ||
members of the <var>service worker registration</var>, | ||
</li> | ||
</ul> | ||
in which case the state of the settled <var>promise</var> determine whether the | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: determines There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. fixed |
||
|
@@ -2083,34 +2084,59 @@ <h3> | |
</li> | ||
<li>If <var>src</var> is <code>undefined</code>, or if the result of | ||
running <a>Is origin potentially trustworthy</a> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: capital "Is" There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Probably warn developer here too There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok |
||
with the origin of <var>src</var> is <code>Not Trusted</code>, return | ||
<code>undefined</code>. | ||
with the origin of <var>src</var> is <code>Not Trusted</code>, abort | ||
these steps and return <code>undefined</code>. | ||
</li> | ||
<li>Otherwise, let <var>registration</var> be an object with | ||
properties <code>src</code> and <code>scope</code>. All properties | ||
initially set to <code>undefined</code>. | ||
properties <code>src</code>, <code>scope</code>, <code>type</code> and | ||
<code>use_cache</code>. All properties initially set to | ||
<code>undefined</code>. | ||
</li> | ||
<li>Set <var>registration</var>'s <code>src</code> property to be | ||
<var>src</var>. | ||
</li> | ||
<li>Let <var>type</var> be the result of running the <a>steps | ||
<li>Let <var>scope</var> be the result of running the <a>steps | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Similar to type and use_cache, SW expects a default value for scope too. If scope is undefined, please give null to Start Register as a default value. That makes Start Register set the scope to the same location as the given script url. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When the value is undefined here, it means that there was a parsing error (check sub algorithms), and I thus don't attempt to register at all. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I understood the intention. Please check if it actually doesn't attempt to register in that case (i.e. when the sub algorithm returns undefined.) I left a comment here: #507 (comment). |
||
for processing the <code>scope</code> member of a service worker</a> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When this algorithm returns undefined, the steps to install the web application gets to pass nothing to Start Register. In this case, shouldn't there be an error handling such that Start Register is not invoked? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let me check that, it should not be invoked no There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
It is not invoked if it fails There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That looks good. |
||
passing <var>unprocessed registration</var>. | ||
</li> | ||
<li>If <var>scope</var> is not <code>undefined</code>, | ||
set <var>registration</var>'s <code>scope</code> | ||
property to be <var>scope</var>. | ||
</li> | ||
<li>Let <var>type</var> be the result of running the <a>steps | ||
for processing the <code>type</code> member of a service worker</a> | ||
passing <var>unprocessed registration</var>. | ||
</li> | ||
<li>If <var>type</var> is not <code>undefined</code> | ||
set <var>registration</var>'s <code>type</code> | ||
property to be <var>type</var>. | ||
</li> | ||
<li>If <var>type</var> is <code>undefined</code> abort these steps and | ||
return <code>undefined</code>. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Service workers expect a default value for type member. If type is undefined here, please set the default value to "classic" when passing it to Start Register. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That is set in the sub algorithm. Undefined here means that the sub algorithm didn't get a valid value There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Understood. I saw you return "classic" when no value is given. It looks good. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Warn developer? ... so touchy, these service workers! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. :) |
||
</li> | ||
<li>Let <var>use cache</var> be the result of running the <a>steps | ||
for processing the <code>use_cache</code> member of a service worker</a> | ||
passing <var>unprocessed registration</var>. | ||
</li> | ||
<li>If <var>use cache</var> is not <code>undefined</code>, | ||
set <var>registration</var>'s <code>use_cache</code> | ||
property to be <var>use cache</var>. | ||
</li> | ||
<li>If <var>use cache</var> is <code>undefined</code> abort these steps | ||
and return <code>undefined</code>. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Likewise, If use_cache is undefined here, please set the default value to false when passing it to Start Register.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same, ok Please keep me up to date :) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same as above. I saw you return false when no value is given. It looks good. |
||
</li> | ||
<li>Return <var>registration</var>. | ||
</li> | ||
</ol> | ||
<div class="example"> | ||
In the following example, the web application is listing | ||
a service worker for the <code>/foo</code> scope: | ||
a service worker for the <code>/foo</code> scope, bypassing the user agent cache | ||
when fetching the <code>"sw.js"</code> source: | ||
<pre class="example"> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: you can indent this normally, ReSpec handles that for you. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok |
||
"serviceworker": { | ||
"src": "sw.js", | ||
"scope": "/foo" | ||
"scope": "/foo", | ||
"use_cache": false | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @kenchris - Should line 1971 be |
||
</pre> | ||
</div> | ||
|
@@ -2989,6 +3015,88 @@ <h3> | |
</li> | ||
</ol> | ||
</section> | ||
<section> | ||
<h3> | ||
<code>type</code> member | ||
</h3> | ||
<p> | ||
The <dfn data-lt="serviceworker-type"><code>type</code> member</dfn> of a | ||
<a>serviceworker object</a> is the service worker's | ||
<a href="https://html.spec.whatwg.org/multipage/workers.html#workertype">worker type</a>. | ||
</p> | ||
<p> | ||
The <dfn>steps for processing the <code>type</code> member of a | ||
service worker</dfn> are given by the following algorithm. The algorithm takes | ||
a <a>serviceworker object</a> <var>registration</var>, and a <a>URL</a> <var>manifest | ||
URL</var>, which is the <a>URL</a> from which the | ||
<var>manifest</var> was fetched. This algorithm will return a | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm... what if the manifest redirected during fetch... we might need to clarify that somewhere. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you help with that? :-) |
||
string. | ||
</p> | ||
<ol> | ||
<li>Let <var>value</var> be the result of calling the | ||
<a>[[\GetOwnProperty]]</a> internal method of <var>registration</var> | ||
passing " <code>type</code>" as the argument. | ||
</li> | ||
<li>Let <var>type</var> be <a>Type</a>(<var>value</var>). | ||
</li> | ||
<li>If <var>type</var> is not "string", then: | ||
<ol> | ||
<li>If <var>type</var> is not "<code>undefined</code>", issue a | ||
developer warning that the type is unsupported. | ||
</li> | ||
<li>Return <code>"classic"</code>. | ||
</li> | ||
</ol> | ||
</li> | ||
<li>If <a>Trim</a>(value) is the empty string, then: | ||
<ol> | ||
<li>Issue a developer warning that the type is unsupported. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This seems odd... you are returning undefined here, but "classic" above? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I.e., should we recover to "classic" in error cases for backwards compat? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That is how it works for Link element. What do you think @jungkees ? |
||
</li> | ||
<li>Return <code>undefined</code>. | ||
</li> | ||
</ol> | ||
<li>Return <var>type</var>. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't the return value be value.[[Value]] instead? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We have There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah.. I got it. It has to do with the prefix ! for an ECMAScript abstract operation. So, the value here is the actual value for this member already. But then it still needs to return value instead of type. Referring to other cases, it should return Trim(value) here I suppose. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. right, fixed |
||
</li> | ||
</ol> | ||
</section> | ||
<section> | ||
<h3> | ||
<code>use_cache</code> member | ||
</h3> | ||
<p> | ||
The <dfn data-lt="serviceworker-type"><code>use_cache</code> member</dfn> of a | ||
<a>serviceworker object</a> determines whether the user agent | ||
<a href="https://w3c.github.io/ServiceWorker/#dfn-use-cache">cache</a> should | ||
be used when fetching the service worker. | ||
</p> | ||
<p> | ||
The <dfn>steps for processing the <code>use_cache</code> member of a | ||
service worker</dfn> are given by the following algorithm. The algorithm takes | ||
a <a>serviceworker object</a> <var>registration</var>, and a <a>URL</a> <var>manifest | ||
URL</var>, which is the <a>URL</a> from which the | ||
<var>manifest</var> was fetched. This algorithm will return a | ||
boolean. | ||
</p> | ||
<ol> | ||
<li>Let <var>value</var> be the result of calling the | ||
<a>[[\GetOwnProperty]]</a> internal method of <var>registration</var> | ||
passing " <code>use_cache</code>" as the argument. | ||
</li> | ||
<li>Let <var>type</var> be <a>Type</a>(<var>value</var>). | ||
</li> | ||
<li>If <var>type</var> is not "boolean", then: | ||
<ol> | ||
<li>If <var>type</var> is not "<code>undefined</code>", issue a | ||
developer warning that the type is unsupported and | ||
return <code>undefined</code>. | ||
</li> | ||
<li>Otherwise, return False</li> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: return There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. k |
||
</ol> | ||
</li> | ||
<li>Return <var>use_cache</var>. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't the return value be value.[[Value]] instead? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It seems it should return value here. See "steps for processing the prefer_related_applications member" as an example. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. correct |
||
</li> | ||
</ol> | ||
</section> | ||
</section> | ||
<section> | ||
<h2> | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
q: should this be "Let registration be the result of Start Registration".
The way this is spec'ed is a bit strange - I was expecting some kind of flow with the resulting promise... but it all seems to magically result in a registration.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure how to best solve this. Maybe you could solve in a follow up?