Bug 1234020: Part 2l - [webext] Return promises from the alarms API. r=rpl
--- a/toolkit/components/extensions/ext-alarms.js
+++ b/toolkit/components/extensions/ext-alarms.js
@@ -1,16 +1,15 @@
"use strict";
var { classes: Cc, interfaces: Ci, utils: Cu } = Components;
Cu.import("resource://gre/modules/ExtensionUtils.jsm");
var {
EventManager,
- runSafe,
} = ExtensionUtils;
// WeakMap[Extension -> Set[Alarm]]
var alarmsMap = new WeakMap();
// WeakMap[Extension -> Set[callback]]
var alarmCallbacksMap = new WeakMap();
@@ -109,28 +108,32 @@ extensions.registerPrivilegedAPI("alarms
get: function(args) {
let name = "", callback;
if (args.length == 1) {
callback = args[0];
} else {
[name, callback] = args;
}
- for (let alarm of alarmsMap.get(extension)) {
- if (alarm.name == name) {
- runSafe(context, callback, alarm.data);
- break;
+ let promise = new Promise((resolve, reject) => {
+ for (let alarm of alarmsMap.get(extension)) {
+ if (alarm.name == name) {
+ return resolve(alarm.data);
+ }
}
- }
+ reject("No matching alarm");
+ });
+
+ return context.wrapPromise(promise, callback);
},
getAll: function(callback) {
let alarms = alarmsMap.get(extension);
let result = alarms.map(alarm => alarm.data);
- runSafe(context, callback, result);
+ return context.wrapPromise(Promise.resolve(result), callback);
},
clear: function(...args) {
let name = "", callback;
if (args.length == 1) {
callback = args[0];
} else {
[name, callback] = args;
@@ -141,31 +144,27 @@ extensions.registerPrivilegedAPI("alarms
for (let alarm of alarms) {
if (alarm.name == name) {
alarm.clear();
cleared = true;
break;
}
}
- if (callback) {
- runSafe(context, callback, cleared);
- }
+ return context.wrapPromise(Promise.resolve(cleared), callback);
},
clearAll: function(callback) {
let alarms = alarmsMap.get(extension);
let cleared = false;
for (let alarm of alarms) {
alarm.clear();
cleared = true;
}
- if (callback) {
- runSafe(context, callback, cleared);
- }
+ return context.wrapPromise(Promise.resolve(cleared), callback);
},
onAlarm: new EventManager(context, "alarms.onAlarm", fire => {
let callback = alarm => {
fire(alarm.data);
};
alarmCallbacksMap.get(extension).add(callback);