From 09b36952056a35c2416a59dd5d044e66e0dc1fe3 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Tue, 11 Apr 2023 08:40:18 -0400 Subject: [PATCH] Provide fallback API for platforms not supporting alarms API Related issue: - https://github.com/uBlockOrigin/uBlock-issues/issues/2591 --- platform/common/vapi-background.js | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/platform/common/vapi-background.js b/platform/common/vapi-background.js index 6bbfd075d..47f549686 100644 --- a/platform/common/vapi-background.js +++ b/platform/common/vapi-background.js @@ -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 = { create(callback) { this.uniqueIdGenerator += 1;