diff --git a/web/src/lib/utils/sw-messaging.ts b/web/src/lib/utils/sw-messaging.ts index 789341d84a..3c32bf7de1 100644 --- a/web/src/lib/utils/sw-messaging.ts +++ b/web/src/lib/utils/sw-messaging.ts @@ -1,15 +1,12 @@ import { ServiceWorkerMessenger } from './sw-messenger'; -const messenger = new ServiceWorkerMessenger(); const hasServiceWorker = globalThis.isSecureContext && 'serviceWorker' in navigator; - -const isValidSwContext = (url: string | undefined | null): url is string => { - return hasServiceWorker && !!url; -}; +// eslint-disable-next-line compat/compat +const messenger = hasServiceWorker ? new ServiceWorkerMessenger(navigator.serviceWorker) : undefined; export function cancelImageUrl(url: string | undefined | null) { - if (!isValidSwContext(url)) { + if (!url || !messenger) { return; } - void messenger.send('cancel', { url }); + messenger.send('cancel', { url }); } diff --git a/web/src/lib/utils/sw-messenger.ts b/web/src/lib/utils/sw-messenger.ts index c9b2ce9eb2..b656f3fc2c 100644 --- a/web/src/lib/utils/sw-messenger.ts +++ b/web/src/lib/utils/sw-messenger.ts @@ -1,22 +1,17 @@ export class ServiceWorkerMessenger { - constructor() {} + readonly #serviceWorker: ServiceWorkerContainer; - #sendInternal(type: string, data: Record) { - if (!('serviceWorker' in navigator)) { - throw new Error('Service Worker not enabled in this environment '); - } - - // eslint-disable-next-line compat/compat - navigator.serviceWorker.controller?.postMessage({ - type, - ...data, - }); + constructor(serviceWorker: ServiceWorkerContainer) { + this.#serviceWorker = serviceWorker; } /** * Send a one-way message to the service worker. */ send(type: string, data: Record) { - return this.#sendInternal(type, data); + this.#serviceWorker.controller?.postMessage({ + type, + ...data, + }); } } diff --git a/web/src/service-worker/request.ts b/web/src/service-worker/request.ts index 1060cd4b6c..5fdf7f82c1 100644 --- a/web/src/service-worker/request.ts +++ b/web/src/service-worker/request.ts @@ -29,6 +29,7 @@ export const handleFetch = (request: URL | Request): Promise => { const pendingRequest: PendingRequest = { controller: new AbortController(), promise: undefined as unknown as Promise, + cleanupTimeout: undefined, }; pendingRequests.set(requestKey, pendingRequest);