Nit: this is ok, but I actually prefer using *Function.bind* instead of temporary variables like *remote*, since it makes the meaning of *this* consistent within a function that has embedded callbacks, which makes the function easier to read. I.e. something like this:

    _registerGeolocationRequest: function(client) {
      client.addListener("geolocationRequest", (function() {
        console.debug("GEOLOCATION REQUEST");
        let geolocation = Cc["@mozilla.org/geolocation;1"].
                          getService(Ci.nsIDOMGeoGeolocation);
        geolocation.getCurrentPosition(
          (function success(position) {
            console.debug("GEOLOCATION RESPONSE", this._remote.simulator);
            this._remote.client.request({
              to: this._remote.simulator,
              message: {
                lat: position.coords.latitude,
                lon: position.coords.longitude,
              },
              type: "geolocationResponse"
            });
          }).bind(this),
          function error() {
            console.error("error getting current position");
          }
        );
      }).bind(this));
    },