ServiceWorkers in Firefox Update: July 26, 2014
It’s been over 2 months since my last post, so here is an update. But first,
a link to a latest build (and this time it won’t expire!). For instructions on
enabling all the APIs, see the earlier post.
Registration lifecycleThe patches related to ServiceWorker registration have landed in Nightly
builds! unregister() still doesn’t work in Nightly (but does in the build
above), since Bug 1011268 is waiting on review.
The state mechanism is not available. But the bug is easy to fix and
I encourage interested Gecko contributors (existing and new) to give it a shot.
Also, the ServiceWorker specification changed just a few days ago,
so Firefox still has the older API with everything on ServiceWorkerContainer.
This bug is another easy to fix bug.
FetchBen Kelly has been hard at work implementing Headers and some of them have
landed in Nightly. Unfortunately that isn’t of much use right now since the
Request and Response objects are very primitive and do not handle Headers.
We do have a spec updated Fetch API, with
Request, Response and fetch() primitives. What works and what doesn’t?
- Request and Response objects are available and the fetch event will hand
your ServiceWorker a Request, and you can return it a Response and this will
work! Only the Response(“string body”) form is implemented. You can of
course create an instance and set the status, but that’s about it.
- fetch() does not work on ServiceWorkers! In documents, only the fetch(URL)
- One of our interns, Catalin Badea has taken over implementing Fetch while
I’m on vacation, so I’m hoping to publish a more functional API once I’m
postMessage()/getServiced()Catalin has done a great job of implementing these, and they are waiting for
review. Unfortunately I was unable to integrate his patches into the
build above, but he can probably post an updated build himself.
PushAnother of our interns, Tyler Smith, has implemented the new Push
API! This is available for use on navigator.pushRegistrationManager
and your ServiceWorker will receive the Push notification.
Cache/FetchStoreNothing available yet.
PersistenceCurrently neither ServiceWorker registrations, nor scripts are persisted or available offline. Andrea Marchesini is working on the former, and will be back from vacation next week to finish it off. Offline script caching is currently unassigned. It is fairly hairy, but we think we know how to do it. Progress on this should happen within the next few weeks.
DocumentationChris Mills has started working on MDN pages about ServiceWorkers.
Contributing to ServiceWorkersAs you can see, while Firefox is not in a situation yet to implement
full-circle offline apps, we are making progress. There are several employees
and two superb interns working on this. We are always looking for more
contributors. Here are various things you can do:
The ServiceWorker specification is meant to solve your needs. Yes, it
is hard to figure out what can be improved without actually trying it out, but
I really encourage you to step in there, ask questions and file
issues to improve the specification before it becomes immortal.
Improve Service Worker documentation on MDN. The ServiceWorker spec introduces
several new concepts and APIs, and the better documented we have them, the
faster web developers can use them. Start
There are several Gecko implementation bugs, here ordered in approximately
- 1040924 - Fix and re-enable the serviceworker tests on non-Windows.
- 1043711 - Ensure ServiceWorkerManager::Register() can always
extract a host from the URL.
- 1041335 - Add mozilla::services Getter for
- 982728 - Implement ServiceWorkerGlobalScope update() and
- 1041340 - ServiceWorkers: Implement [[HandleDocumentUnload]].
- 1043004 - Update ServiceWorkerContainer API to spec.
- 931243 - Sync XMLHttpRequest should be disabled on ServiceWorkers.
- 1003991 - Disable https:// only load for ServiceWorkers when Developer Tools are open.
- Full list