This is a strange abstraction. From what I gather your returning a configuration object for each of the supported focus modes and bolting it onto the `Camera` instance.

To me it looks like your using abstractions when they should really be needed. I would much prefer to see all this logic internal to `lib/camera.js` and have a simple function for each focus mode like:

```js
this.configureContinuousFocus();
this.configureFaceTracking();
this.configureTouchFocus();
this.configureFixedFocus();
this.configureAutoFocus();
```

These functions would get called once Gecko has given us the `mozCamera` object. In each of the functions it can check if it is supported and if it is, perform the relevant setup.

`CameraController` should really only be interacting with a very basic camera interface. It should really even know what 'focus' it. Focus is an implementation detail of the camera hardware being used. If we were to replace the `mozCamera` version of `lib/camera.js` with a `getUserMedia` backed implementation this would completely break as you have exposed details that are specific to the `mozCamera` API.