Clean up webrequest autocommands properly

This commit is contained in:
Colin Caine 2024-02-09 17:12:53 +00:00
parent 2d0d0da5f9
commit c37ed9893e

View file

@ -15,7 +15,7 @@ export const requestEvents = Object.keys(requestEventExpraInfoSpecMap)
// eslint-disable-next-line @typescript-eslint/ban-types
export const LISTENERS: Record<string, Record<string, Function>> = {}
export const registerWebRequestAutocmd = (
export const registerWebRequestAutocmd = async (
requestEvent: string,
pattern: string,
func: string,
@ -23,8 +23,15 @@ export const registerWebRequestAutocmd = (
// I'm being lazy - strictly the functions map strings to void | blocking responses
// eslint-disable-next-line @typescript-eslint/ban-types
const listener = eval(func) as Function
if (!LISTENERS[requestEvent]) LISTENERS[requestEvent] = {}
if (!(requestEvent in LISTENERS)) {
LISTENERS[requestEvent] = {}
}
if (pattern in LISTENERS[requestEvent]) {
await unregisterWebRequestAutocmd(requestEvent, pattern)
}
LISTENERS[requestEvent][pattern] = listener
return browser.webRequest["on" + requestEvent].addListener(
listener,
{ urls: [pattern] },