Erm, sorry, my bad on the IPC. I've now reviewed the whole changeset and think I understand it!

So, it looks like what's happening is that the FakeGeoPositionProvider, once instantiated by a geolocation request from an app, starts requesting a geolocation and updating its callback once per second.

That interval is too frequent, since real geolocation providers are unlikely to call their callbacks that frequently, even when the geolocation is changing (and in this case it mostly won't be changing).

Instead of updating its callback on a fixed schedule, the provider should update it only when the geolocation actually changes, whether because the developer specifies a new custom location or Firefox reports a new current location.

Also, the provider doesn't have to poll for changes by sending r2d2b2g-geolocation-request. It can simply observe r2d2b2g-geolocation-response, which the code in shell.js can then notify it about whenever the geolocation changes.