The whole point of the existing code was to avoid having special cased/hard-coded handling (which is what existed in an earlier version of the patch). I'd rather see a generic approach that allows arbitrary "settings urls" to be created.

Please update to use the more generic approach:

```js
var mozSettings = navigator.mozSettings;
var settings = {};
var urls = {
  'notification.ringtone': new SettingsURL()
};

function entry(key, value) {
  settings[key] = urls[key] ? urls[key].set(value) : value;
}

[
  'audio.volume.notification',
  'notification.ringtone',
  'vibration.enabled'
].forEach(function(key) {
  if (mozSettings) {
    var request = mozSettings.createLock().get(key);
    request.onsuccess = function() {
      entry(key, request.result[key]);
    };

    mozSettings.addObserver(key, function(event) {
      entry(key, event.settingValue);
    });
  }
});
```