Provide fallback API for platforms not supporting alarms API

Related issue:
- https://github.com/uBlockOrigin/uBlock-issues/issues/2591
This commit is contained in:
Raymond Hill 2023-04-11 08:40:18 -04:00
parent f0c28f2faa
commit 09b3695205
No known key found for this signature in database
GPG key ID: 25E1490B761470C2

View file

@ -95,6 +95,45 @@ vAPI.storage = webext.storage.local;
/******************************************************************************/ /******************************************************************************/
/******************************************************************************/ /******************************************************************************/
// https://github.com/uBlockOrigin/uBlock-issues/issues/2591
// Report of alarms API not being supported on Thunderbird
if ( browser.alarms === undefined ) {
browser.alarms = {
alarmsMap: new Map(),
listenerSet: new Set(),
create(name, delayInfo) {
let alarm = this.alarmsMap.get(name);
if ( alarm !== undefined ) {
alarm.off();
} else {
alarm = vAPI.defer.create(( ) => {
this.alarmsMap.delete(name);
for ( const listener of this.listenerSet ) {
listener({ name });
}
});
}
this.alarmsMap.set(name, alarm);
alarm.on({ min: delayInfo.delayInMinutes });
},
clear(name) {
const alarm = this.alarmsMap.get(name);
if ( alarm === undefined ) { return; }
alarm.off();
this.alarmsMap.delete(name);
},
get: function(name, callback) {
callback(this.alarmsMap.has(name) && { name } || undefined);
},
onAlarm: {
addListener(callback) {
browser.alarms.listenerSet.add(callback);
},
},
};
}
vAPI.alarms = { vAPI.alarms = {
create(callback) { create(callback) {
this.uniqueIdGenerator += 1; this.uniqueIdGenerator += 1;