2015-08-14 23:55:09 +00:00
|
|
|
const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
|
|
|
|
|
2015-06-03 22:34:44 +00:00
|
|
|
Cu.import("resource://gre/modules/ExtensionUtils.jsm");
|
2015-09-15 18:19:45 +00:00
|
|
|
var {
|
2015-06-03 22:34:44 +00:00
|
|
|
EventManager,
|
|
|
|
ignoreEvent,
|
|
|
|
} = ExtensionUtils;
|
|
|
|
|
|
|
|
// WeakMap[Extension -> Set[Alarm]]
|
2015-09-15 18:19:45 +00:00
|
|
|
var alarmsMap = new WeakMap();
|
2015-06-03 22:34:44 +00:00
|
|
|
|
Backed out 12 changesets (bug 1202482, bug 1202483, bug 1202481, bug 1202486, bug 1202479, bug 1202478, bug 1197475, bug 1203331, bug 1139860, bug 1202501, bug 1199473, bug 1190662) for Mulet mochitest-5 timeouts
CLOSED TREE
Backed out changeset 6503123e95dd (bug 1139860)
Backed out changeset b83bc163064d (bug 1203331)
Backed out changeset 2f501bd57cd2 (bug 1202481)
Backed out changeset 37e6ac7beb42 (bug 1202486)
Backed out changeset f9b6e99e620e (bug 1202483)
Backed out changeset 466af9f9baee (bug 1202482)
Backed out changeset 6be690e265a2 (bug 1202479)
Backed out changeset 57ff88bfccf4 (bug 1197475)
Backed out changeset 7e8c04ff6049 (bug 1202478)
Backed out changeset 525227997274 (bug 1202501)
Backed out changeset da317cdb79d3 (bug 1199473)
Backed out changeset 73b8ddd6dac9 (bug 1190662)
--HG--
rename : browser/components/extensions/test/browser/browser_ext_simple.js => browser/components/extensions/test/browser/browser_extensions_simple.js
rename : toolkit/components/extensions/test/mochitest/file_sample.html => toolkit/components/extensions/test/mochitest/file_contentscript_page1.html
2015-09-23 02:29:51 +00:00
|
|
|
// WeakMap[Extension -> callback]
|
2015-09-15 18:19:45 +00:00
|
|
|
var alarmCallbacksMap = new WeakMap();
|
2015-06-03 22:34:44 +00:00
|
|
|
|
|
|
|
// Manages an alarm created by the extension (alarms API).
|
|
|
|
function Alarm(extension, name, alarmInfo)
|
|
|
|
{
|
|
|
|
this.extension = extension;
|
|
|
|
this.name = name;
|
|
|
|
this.when = alarmInfo.when;
|
|
|
|
this.delayInMinutes = alarmInfo.delayInMinutes;
|
|
|
|
this.periodInMinutes = alarmInfo.periodInMinutes;
|
|
|
|
this.canceled = false;
|
|
|
|
|
|
|
|
let delay, scheduledTime;
|
|
|
|
if (this.when) {
|
|
|
|
scheduledTime = this.when;
|
|
|
|
delay = this.when - Date.now();
|
|
|
|
} else {
|
|
|
|
delay = this.delayInMinutes * 60 * 1000;
|
|
|
|
scheduledTime = Date.now() + delay;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.scheduledTime = scheduledTime;
|
|
|
|
|
|
|
|
let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
|
|
|
timer.init(this, delay, Ci.nsITimer.TYPE_ONE_SHOT);
|
|
|
|
this.timer = timer;
|
|
|
|
}
|
|
|
|
|
|
|
|
Alarm.prototype = {
|
|
|
|
clear() {
|
|
|
|
this.timer.cancel();
|
|
|
|
alarmsMap.get(this.extension).delete(this);
|
|
|
|
this.canceled = true;
|
|
|
|
},
|
|
|
|
|
|
|
|
observe(subject, topic, data) {
|
Backed out 12 changesets (bug 1202482, bug 1202483, bug 1202481, bug 1202486, bug 1202479, bug 1202478, bug 1197475, bug 1203331, bug 1139860, bug 1202501, bug 1199473, bug 1190662) for Mulet mochitest-5 timeouts
CLOSED TREE
Backed out changeset 6503123e95dd (bug 1139860)
Backed out changeset b83bc163064d (bug 1203331)
Backed out changeset 2f501bd57cd2 (bug 1202481)
Backed out changeset 37e6ac7beb42 (bug 1202486)
Backed out changeset f9b6e99e620e (bug 1202483)
Backed out changeset 466af9f9baee (bug 1202482)
Backed out changeset 6be690e265a2 (bug 1202479)
Backed out changeset 57ff88bfccf4 (bug 1197475)
Backed out changeset 7e8c04ff6049 (bug 1202478)
Backed out changeset 525227997274 (bug 1202501)
Backed out changeset da317cdb79d3 (bug 1199473)
Backed out changeset 73b8ddd6dac9 (bug 1190662)
--HG--
rename : browser/components/extensions/test/browser/browser_ext_simple.js => browser/components/extensions/test/browser/browser_extensions_simple.js
rename : toolkit/components/extensions/test/mochitest/file_sample.html => toolkit/components/extensions/test/mochitest/file_contentscript_page1.html
2015-09-23 02:29:51 +00:00
|
|
|
if (alarmCallbacksMap.has(this.extension)) {
|
|
|
|
alarmCallbacksMap.get(this.extension)(this);
|
2015-06-03 22:34:44 +00:00
|
|
|
}
|
|
|
|
if (this.canceled) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!this.periodInMinutes) {
|
|
|
|
this.clear();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let delay = this.periodInMinutes * 60 * 1000;
|
|
|
|
this.scheduledTime = Date.now() + delay;
|
|
|
|
this.timer.init(this, delay, Ci.nsITimer.TYPE_ONE_SHOT);
|
|
|
|
},
|
|
|
|
|
|
|
|
get data() {
|
|
|
|
return {
|
|
|
|
name: this.name,
|
|
|
|
scheduledTime: this.scheduledTime,
|
|
|
|
periodInMinutes: this.periodInMinutes,
|
|
|
|
};
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
extensions.on("startup", (type, extension) => {
|
|
|
|
alarmsMap.set(extension, new Set());
|
|
|
|
});
|
|
|
|
|
|
|
|
extensions.on("shutdown", (type, extension) => {
|
|
|
|
for (let alarm of alarmsMap.get(extension)) {
|
|
|
|
alarm.clear();
|
|
|
|
}
|
|
|
|
alarmsMap.delete(extension);
|
|
|
|
});
|
|
|
|
|
|
|
|
extensions.registerAPI((extension, context) => {
|
|
|
|
return {
|
|
|
|
alarms: {
|
|
|
|
create: function(...args) {
|
|
|
|
let name = "", alarmInfo;
|
|
|
|
if (args.length == 1) {
|
|
|
|
alarmInfo = args[0];
|
|
|
|
} else {
|
|
|
|
[name, alarmInfo] = args;
|
|
|
|
}
|
|
|
|
|
|
|
|
let alarm = new Alarm(extension, name, alarmInfo);
|
|
|
|
alarmsMap.get(extension).add(alarm);
|
|
|
|
},
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
getAll: function(callback) {
|
|
|
|
let alarms = alarmsMap.get(extension);
|
|
|
|
result = [ for (alarm of alarms) alarm.data ];
|
|
|
|
runSafe(context, callback, result);
|
|
|
|
},
|
|
|
|
|
|
|
|
clear: function(...args) {
|
|
|
|
let name = "", callback;
|
|
|
|
if (args.length == 1) {
|
|
|
|
callback = args[0];
|
|
|
|
} else {
|
|
|
|
[name, callback] = args;
|
|
|
|
}
|
|
|
|
|
|
|
|
let alarms = alarmsMap.get(extension);
|
|
|
|
let cleared = false;
|
|
|
|
for (let alarm of alarms) {
|
|
|
|
if (alarm.name == name) {
|
|
|
|
alarm.clear();
|
|
|
|
cleared = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (callback) {
|
|
|
|
runSafe(context, callback, cleared);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
onAlarm: new EventManager(context, "alarms.onAlarm", fire => {
|
|
|
|
let callback = alarm => {
|
|
|
|
fire(alarm.data);
|
|
|
|
};
|
|
|
|
|
Backed out 12 changesets (bug 1202482, bug 1202483, bug 1202481, bug 1202486, bug 1202479, bug 1202478, bug 1197475, bug 1203331, bug 1139860, bug 1202501, bug 1199473, bug 1190662) for Mulet mochitest-5 timeouts
CLOSED TREE
Backed out changeset 6503123e95dd (bug 1139860)
Backed out changeset b83bc163064d (bug 1203331)
Backed out changeset 2f501bd57cd2 (bug 1202481)
Backed out changeset 37e6ac7beb42 (bug 1202486)
Backed out changeset f9b6e99e620e (bug 1202483)
Backed out changeset 466af9f9baee (bug 1202482)
Backed out changeset 6be690e265a2 (bug 1202479)
Backed out changeset 57ff88bfccf4 (bug 1197475)
Backed out changeset 7e8c04ff6049 (bug 1202478)
Backed out changeset 525227997274 (bug 1202501)
Backed out changeset da317cdb79d3 (bug 1199473)
Backed out changeset 73b8ddd6dac9 (bug 1190662)
--HG--
rename : browser/components/extensions/test/browser/browser_ext_simple.js => browser/components/extensions/test/browser/browser_extensions_simple.js
rename : toolkit/components/extensions/test/mochitest/file_sample.html => toolkit/components/extensions/test/mochitest/file_contentscript_page1.html
2015-09-23 02:29:51 +00:00
|
|
|
alarmCallbacksMap.set(extension, callback);
|
2015-06-03 22:34:44 +00:00
|
|
|
return () => {
|
Backed out 12 changesets (bug 1202482, bug 1202483, bug 1202481, bug 1202486, bug 1202479, bug 1202478, bug 1197475, bug 1203331, bug 1139860, bug 1202501, bug 1199473, bug 1190662) for Mulet mochitest-5 timeouts
CLOSED TREE
Backed out changeset 6503123e95dd (bug 1139860)
Backed out changeset b83bc163064d (bug 1203331)
Backed out changeset 2f501bd57cd2 (bug 1202481)
Backed out changeset 37e6ac7beb42 (bug 1202486)
Backed out changeset f9b6e99e620e (bug 1202483)
Backed out changeset 466af9f9baee (bug 1202482)
Backed out changeset 6be690e265a2 (bug 1202479)
Backed out changeset 57ff88bfccf4 (bug 1197475)
Backed out changeset 7e8c04ff6049 (bug 1202478)
Backed out changeset 525227997274 (bug 1202501)
Backed out changeset da317cdb79d3 (bug 1199473)
Backed out changeset 73b8ddd6dac9 (bug 1190662)
--HG--
rename : browser/components/extensions/test/browser/browser_ext_simple.js => browser/components/extensions/test/browser/browser_extensions_simple.js
rename : toolkit/components/extensions/test/mochitest/file_sample.html => toolkit/components/extensions/test/mochitest/file_contentscript_page1.html
2015-09-23 02:29:51 +00:00
|
|
|
alarmCallbacksMap.delete(extension);
|
2015-06-03 22:34:44 +00:00
|
|
|
};
|
|
|
|
}).api(),
|
|
|
|
},
|
|
|
|
};
|
|
|
|
});
|