Skip to content
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

Merged
merged 9 commits into from
Jan 17, 2017
Merged

Conversation

kenchris
Copy link
Collaborator

First attempt at fixing #161

Where do we add the actual registration steps?

</p>
<div class="example">
<pre class="">
"serviceworkers": [{
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you intend for this to be "serviceworker": { or "serviceworkers": [{ ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

plural as you can have multiple with different scopes. I am writing serviceworkers in one word to follow the naming used with the Link element "serviceworker" (as you can have multiple link elements)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm of the opinion also that there should only be 1 service worker in the manifest. Other service workers should be declared in the document(s) of the app.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your own example used plural and an array :-)

@RobDolinMS
Copy link
Contributor

Thanks for stepping-up here @kenchris.

I was thinking the serviceworkers object should also be added to the example near the top of the document.

"src": "sw.js",
"scope": "/foo",
"options": {}
}
Copy link
Contributor

@RobDolinMS RobDolinMS Oct 24, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kenchris - Should line 1971 be }] to match line 1967?

@benfredwells
Copy link
Contributor

What is the purpose of adding this information? Is it intended that having a SW defined in the manifest would cause the SW to be registered, similar to calling navigator.serviceWorker.register in script?

If so it would be good to get this reviewed by some people familiar with SW registration.

@kenchris
Copy link
Collaborator Author

@benfredwells it is just like calling register manually or adding a service worker link tag. Jake already approved this approach.

@kenchris
Copy link
Collaborator Author

Can we make a decision on whether we want just one or multiple service workers in the manifest? @marcoscaceres @jakearchibald

I don't care strongly, but I would like to know so that I can change the WIP patch

@marcoscaceres
Copy link
Member

Only 1 please.

@kenchris
Copy link
Collaborator Author

@jakearchibald what is your take?

@RobDolinMS
Copy link
Contributor

@kenchris - After discussion with the Edge PM for Service Workers, Ali Alabas (@aliams) and others at MSFT/Edge, we believe a single serviceworker object listed in the web app manifest will address our use cases; but don’t object to having an array of serviceworkers. /cc @marcoscaceres @jakearchibald

@benfredwells
Copy link
Contributor

@kenchris thanks for the explanation.

SW registration, updating (e.g. if you change the value in the manifest) and removal is complicated and has already had lots of thought put into it. Are you planning on including algorithms for declarative SW registrations, updates and removals in this spec? Maybe it would be better to just have the syntax for the declarations here, and get the SW spec updated to cover the notion of declarative registration in general, and point to that.

@RobDolinMS
Copy link
Contributor

As far as the question about one ServiceWorker{ } or multiple ServiceWorkers[ ], what if we went with one to start and then looked for feedback / push-back from potential implementers?

/cc @marcoscaceres @kenchris @benfredwells @jakearchibald

@kenchris
Copy link
Collaborator Author

kenchris commented Nov 2, 2016

I talked to Jake, we will discuss it after the Chrome Dev Summit as he is currently quite busy. I will work on this after than then.

@marcoscaceres
Copy link
Member

@kenchris, thanks for the update. Looking forward to @jakearchibald's input here. My position remains we should only have one (does enough work to make sure the application can be launched).

@RobDolinMS
Copy link
Contributor

@kenchris Have you been able to sync with @jakearchibald about one ServiceWorker{ } or multiple ServiceWorkers[ ] ?

Summarizing positions:

@kenchris
Copy link
Collaborator Author

kenchris commented Dec 1, 2016

No, didn't get to talk unfortunately.

@RobDolinMS
Copy link
Contributor

(I've sent an email ping to @jakearchibald with @marcoscaceres and @kenchris on CC)

@jakearchibald
Copy link

I'm happy to go with one for simplicity here. Additional SWs can be in the document as @marcoscaceres says, or perhaps even Link headers on the manifest response.

Apologies for the slow reply!

@RobDolinMS
Copy link
Contributor

@marcoscaceres or @kenchris - Since @jakearchibald has given a thumbs-up to one serviceworker{ } would one of you want to modify the PR?

@kenchris
Copy link
Collaborator Author

kenchris commented Dec 6, 2016

Yes, I can work on this

@kenchris
Copy link
Collaborator Author

kenchris commented Dec 6, 2016

Now I have IPR issues as well, though I am in the Web Platforms WG as indicated by the Repository Manager

@chaals
Copy link

chaals commented Dec 6, 2016

@siusin ping… re @kenchris access…

@siusin
Copy link
Contributor

siusin commented Dec 6, 2016

@kenchris -
Intel hasn't re-joined the group yet after we rechartered, so from an IPR perspective, the PRs would be flagged as non valid until the contributors sign up for the group again.

@chaals -
Of course, chairs can make a decision and get the PR merged in this case.

@chaals
Copy link

chaals commented Dec 6, 2016

@siusin @kenchris I am happy that unless Intel fails to rejoin by December 15, they are currently treated as a member and have the effective commitment, so this should be marked as OK. But it seems something went funny with my access to ash-nazg to make it happen. Please go ahead and merge

@siusin
Copy link
Contributor

siusin commented Dec 6, 2016

Marked as non-substantive for IPR from ash-nazg.

@RobDolinMS
Copy link
Contributor

Only 1 please.
'Looks like @kenchris has fixed the PR so there is only one serviceworker{ } and @siusin has gotten the IRP thumbs-up.

@marcoscaceres - Would you want to merge?

@marcoscaceres
Copy link
Member

@RobDolinMS not yet :) This is far from done.

@kenchris
Copy link
Collaborator Author

kenchris commented Dec 8, 2016

Looking forward to comments from @marcoscaceres :-)

<p>
The <a><code>serviceworker</code> member</a> represents a service worker
registration. Other service worker registrations can be done, for instance
by a script; if these have different scopes they will be considered separate
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably not re-specify the rules that are in the service worker spec; we should reference them.

</p>
<p>
The <a><code>serviceworker</code> member</a> represents a service worker
registration. Other service worker registrations can be done, for instance
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Link to registration definition in SW

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

with <var>serviceworker</var> and <var>manifest URL</var>.
</li>
<li>If <var>src</var> is <code>undefined</code>, or if the result of
running <a href="https://w3c.github.io/webappsec/specs/powerfulfeatures/#is-origin-trustworthy">Is origin potentially trustworthy</a>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: throw in this URL in the dependencies section at the bottom of the document.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Won't the service worker registration attempt do this for us?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done, will need to check

<ol>
<li>Let <var>src</var> be the result of running the <a>steps
for processing the <code>src</code> member of a service worker</a>
with <var>serviceworker</var> and <var>manifest URL</var>.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Below, you are using let service worker be thus trashing this one? I don't think we need to send in a service worker here. Just process the members first, then "attempt to register the service worker"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, this comment is in the wrong place!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:)

<p>
The <dfn>steps for processing the <code>serviceworker</code>
member</dfn> are given by the following algorithm. The algorithm
takes a <a>manifest</a> <var>manifest</var> and <a>serviceworker object</a>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Below, you are using let service worker be... thus trashing this one? I don't think we need to send in a service worker here. Just process the members first, then "attempt to register the service worker"

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, fixed

<li>If <var>src</var> is <code>undefined</code>, or if the result of
running <a href="https://w3c.github.io/webappsec/specs/powerfulfeatures/#is-origin-trustworthy">Is origin potentially trustworthy</a>
with the origin of <var>src</var> is <code>Not Trusted</code>, return
<code>undefined</code>.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

screwing up the security aspects of the registration is a pretty big error... so we should maybe pass this through and just allow service worker registration to fail (and kill the whole object then)

with the origin of <var>src</var> is <code>Not Trusted</code>, return
<code>undefined</code>.
</li>
<li>Otherwise, let <var>serviceworker</var> be an object with
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: let <var>serviceworker</var> might confuse people into thinking this the actual service worker... maybe "Let registration properties be..."

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, did something similar

<div class="example">
In the following example, the web application is listing
a service worker for the <code>/foo</code> scope:
<pre class="">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: class=example?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, needs to be applied elsewhere in the spec

@kenchris
Copy link
Collaborator Author

Yes, any help on that is appreciated :-) I will see if I can get junkee to have a look and maybe help me.

@jungkees
Copy link

jungkees commented Dec 13, 2016

@kenchris, Start Register is a gate function that you can invoke to trigger a Register. Invoking Start Register makes a job and schedules it in the job queue defined in SW. Start Register is also supposed to take care of the security check and parsing the URLs for the given src and scope, etc. Basically, a register request is processed async given a promise (to Start Register).

I'm not quite sure, but you might want to invoke Start Register from steps for processing the serviceworker member I guess. Start Register returns nothing but the given promise to it resolves with a service worker registration ServiceWorkerRegistration object on success and rejects on failure. (See the example call site: In https://w3c.github.io/ServiceWorker/#link-element-processing, step 12 of the algorithm starting with "When a serviceworker link’s link element ..".)

This is basically what SW expects for a register request. I think we should look together if any changes are needed while you're working on this PR.

@jungkees
Copy link

<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>,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SW's RegistrationOptions dictionary has been extended: https://w3c.github.io/ServiceWorker/#dictdef-registrationoptions. I think both "classic" and "module" worker types should be covered and also useCache should be supported to be aligned with other registration paths. (useCache indicates whether the UA should set the cache mode to "no-cache" or "default" when fetching a service worker script from networks.)

<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>,
Copy link

@jungkees jungkees Dec 13, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the client param to Start Register, I think the browsing context's Document's relevant settings object should be passed instead of null. The given client is used to queue a task later to manipulate promise settlement and parse a fetched script resources later.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, will look at that tomorrow then

Copy link

@jungkees jungkees left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Service workers expect default values from scope, type, and use_cache members. Please see the comments.

property to be <var>type</var>.
</li>
<li>If <var>type</var> is <code>undefined</code> abort these steps and
return <code>undefined</code>.

Choose a reason for hiding this comment

The 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.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The 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

Choose a reason for hiding this comment

The 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.

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>.

Choose a reason for hiding this comment

The 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.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same, ok Please keep me up to date :)

Choose a reason for hiding this comment

The 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>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

Choose a reason for hiding this comment

The 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.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The 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.

Choose a reason for hiding this comment

The 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).

<var>src</var>.
</li>
<li>Let <var>scope</var> be the result of running the <a>steps
for processing the <code>scope</code> member of a service worker</a>

Choose a reason for hiding this comment

The 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?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let me check that, it should not be invoked no

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

          <li>If <a>obtaining the manifest</a> succeeds, and the
          <var>service worker registration</var> of <a>manifest</a> is not
          <code>undefined</code>, a user agent can at this point...

It is not invoked if it fails

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That looks good.

<li>Return <code>undefined</code>.
</li>
</ol>
<li>Return <var>type</var>.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't the return value be value.[[Value]] instead?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have

  • Let type be Type(value). above. That is how @marcoscaceres did it elsewhere. I think that should be fine. Why the value.[[Value]]? looks like a private slot

  • Choose a reason for hiding this comment

    The 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.

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    right, fixed

    <li>Otherwise, return False</li>
    </ol>
    </li>
    <li>Return <var>use_cache</var>.

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Shouldn't the return value be value.[[Value]] instead?

    Choose a reason for hiding this comment

    The 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.

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    correct

    @jungkees
    Copy link

    @kenchris, when the above comments are addressed, I think the shape of the hooks between Web App Manifest and Service Workers would be OK. For the details of the spec language here, I defer to you and @marcoscaceres. I'll continue to help, of course.

    Copy link
    Member

    @marcoscaceres marcoscaceres left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Maybe I missed it, but did you also add processing the manifest member to: https://www.w3.org/TR/appmanifest/#processing

    members of the <var>registration</var>,
    </li>
    </ol>
    in which case the state of the settled <var>promise</var> determine whether the
    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    nit: determines

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    fixed

    <code>Document</code>'s
    <a href="https://html.spec.whatwg.org/multipage/webappapis.html#relevant-settings-object">
    relevant settings object</a>, or <code>null</code> if unavailable.
    <li>Invoke <a>Start Register</a> with <var>scope</var> and <var>src</var>
    Copy link
    Member

    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.

    Copy link
    Collaborator Author

    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?

    </h3>
    <p>
    The <dfn><code>serviceworker</code> member</dfn> describes a
    service worker as defined in [[!SERVICE-WORKERS-1]].
    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Nit: Is there some unversioned reference we can use here instead of V1?

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Not as far as I could see. @jungkees ?

    <p>
    The <a><code>serviceworker</code> member</a> represents a <a
    href="https://w3c.github.io/ServiceWorker/#service-worker-registration-concept">
    service worker registration</a>. Other service worker registrations can be done, for instance
    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    The text "Other service worker registrations can be done" should be in a non-normative note.

    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Also, you are redefining the rules - which is a bit dangerous. That should point to the SW spec, like:

    "For rules on how SWs interact, then see section X of Service Workers"

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Made it a note now. @jungkees can you point me to the best place to refer to?

    The <dfn>steps for processing the <code>serviceworker</code>
    member</dfn> are given by the following algorithm. The algorithm
    takes a <a>manifest</a> <var>manifest</var>. This algorithm returns a
    registration object <var>registration</var>, which can be <code>undefined</code>.
    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    nit: link to registration object?

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    ok

    <p>
    The <dfn data-lt="serviceworker-scope"><code>scope</code> member</dfn> of a
    <a>serviceworker object</a> is the service worker's associated
    <a href="https://w3c.github.io/ServiceWorker/#dfn-scope-url">scope URL</a>.
    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    nit, scope URL should be defined at the end of the document, so not to include the link to the SW spec here.

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    done

    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
    Copy link
    Member

    Choose a reason for hiding this comment

    The 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.

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Can you help with that? :-)

    </li>
    <li>If <a>Trim</a>(value) is the empty string, then:
    <ol>
    <li>Issue a developer warning that the type is unsupported.
    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    This seems odd... you are returning undefined here, but "classic" above?

    Copy link
    Member

    Choose a reason for hiding this comment

    The 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?

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The 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>Return <code>undefined</code>.
    </li>
    </ol>
    <li>Otherwise, <a>Trim</a>(<var>value</var>) and return the result.
    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Also, should should this be restricted to just "classic" and "module"?

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    Yes, "classic", "module" or undefined. Everything else should fail the whole registration as it does with link element

    developer warning that the type is unsupported and
    return <code>undefined</code>.
    </li>
    <li>Otherwise, return False</li>
    Copy link
    Member

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    nit: return <code>false</code>

    Copy link
    Collaborator Author

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    k

    @kenchris
    Copy link
    Collaborator Author

    Maybe I missed it, but did you also add processing the manifest member to: https://www.w3.org/TR/appmanifest/#processing

    Yes, I did

    @kenchris
    Copy link
    Collaborator Author

    So I can go ahead and merge?

    @marcoscaceres
    Copy link
    Member

    marcoscaceres commented Jan 17, 2017 via email

    @GrosSacASac
    Copy link

    If I understand correctly, the service worker declaration inside the manifest has no consequence unless the web app is installed without directly visting the web app url.(with an web app store ?)

    I ask because I have an app where the service worker is only installed after the users checks the checkbox USE OFFLINE. I don't want the manifest to install the service worker on normal page load without user consent first.

    I came here because https://www.w3.org/TR/appmanifest/#serviceworker-member words are confusing.

    @marcoscaceres
    Copy link
    Member

    @GrosSacASac, moved your issue here: #640 so we don't lose track of it.

    This pull request was closed.
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    None yet
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    9 participants