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.
Download builds
Registration lifecycle
The patches related to ServiceWorker registration have landed in Nightlybuilds! 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.
Fetch
Ben Kelly has been hard at work implementing Headers and some of them havelanded 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)
form works. - 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
back.
postMessage()/getServiced()
Catalin has done a great job of implementing these, and they are waiting forreview. Unfortunately I was unable to integrate his patches into the
build above, but he can probably post an updated build himself.
Push
Another of our interns, Tyler Smith, has implemented the new PushAPI! This is available for use on navigator.pushRegistrationManager
and your ServiceWorker will receive the Push notification.
Cache/FetchStore
Nothing available yet.Persistence
Currently 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.Documentation
Chris Mills has started working on MDN pages about ServiceWorkers.Contributing to ServiceWorkers
As you can see, while Firefox is not in a situation yet to implementfull-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
here.
There are several Gecko implementation bugs, here ordered in approximately
increasing difficulty:
- 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
nsIServiceWorkerManager. - 982728 - Implement ServiceWorkerGlobalScope update() and
unregister(). - 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
#content
channel on irc.mozilla.org
.