author | Eitan Isaacson <eitan@monotonous.org> |
Thu, 23 Jan 2014 10:37:38 -0800 | |
changeset 180953 | fb3597db9e4808ba7d4982754960d872ba95cbaf |
parent 180952 | db9260e906feaeda66982bfed091c73a06145def |
child 180954 | e2575d95f551f33e4084eb19a6f89d6e329afba7 |
push id | 3343 |
push user | ffxbld |
push date | Mon, 17 Mar 2014 21:55:32 +0000 |
treeherder | mozilla-beta@2f7d3415f79f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | yzen |
bugs | 960257 |
milestone | 29.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/accessible/src/jsat/Utils.jsm +++ b/accessible/src/jsat/Utils.jsm @@ -15,17 +15,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 'resource://gre/modules/Geometry.jsm'); XPCOMUtils.defineLazyModuleGetter(this, 'Roles', 'resource://gre/modules/accessibility/Constants.jsm'); XPCOMUtils.defineLazyModuleGetter(this, 'Events', 'resource://gre/modules/accessibility/Constants.jsm'); XPCOMUtils.defineLazyModuleGetter(this, 'Relations', 'resource://gre/modules/accessibility/Constants.jsm'); -this.EXPORTED_SYMBOLS = ['Utils', 'Logger', 'PivotContext', 'PrefCache']; +this.EXPORTED_SYMBOLS = ['Utils', 'Logger', 'PivotContext', 'PrefCache', 'SettingCache']; this.Utils = { _buildAppMap: { '{3c2e2abc-06d4-11e1-ac3b-374f68613e61}': 'b2g', '{ec8030f7-c20a-464f-9b0e-13a3a9e97384}': 'browser', '{aa3c5121-dab2-40e2-81ca-7ea25febc110}': 'mobile/android', '{a23983c0-fd0e-11dc-95ff-0800200c9a66}': 'mobile/xul' }, @@ -769,8 +769,41 @@ PrefCache.prototype = { Logger.logException(x); } } }, QueryInterface : XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]) }; + +this.SettingCache = function SettingCache(aName, aCallback, aOptions = {}) { + this.value = aOptions.defaultValue; + let runCallback = () => { + if (aCallback && aOptions.callbackNow) { + aCallback(aName, this.value); + if (aOptions.callbackOnce) { + runCallback = () => {}; + } + } + }; + + let settings = Utils.win.navigator.mozSettings; + if (!settings) { + runCallback(); + return; + } + + + let lock = settings.createLock(); + let req = lock.get(aName); + + req.addEventListener('success', () => { + this.value = req.result[aName] == undefined ? aOptions.defaultValue : req.result[aName]; + runCallback(); + }); + + settings.addObserver(aName, + (evt) => { + this.value = evt.settingValue; + runCallback(); + }); +};