Skip to content

Commit bc520d7

Browse files
committed
bug: Service Worker: Ensure Unmanaged Apps Handle Recovery Messages (#8695)
1 parent 76f0d23 commit bc520d7

2 files changed

Lines changed: 21 additions & 12 deletions

File tree

src/main/addon/ServiceWorker.mjs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ class ServiceWorker extends Base {
5050

5151
await serviceWorker.ready;
5252

53-
serviceWorker.onmessage = WorkerManager.onWorkerMessage.bind(WorkerManager);
54-
5553
if (!WorkerManager.getWorker('service')) {
5654
/*
5755
* navigator.serviceWorker.controller can be null in case we load a page for the first time
@@ -61,16 +59,6 @@ class ServiceWorker extends Base {
6159
WorkerManager.serviceWorker = registration.active
6260
}
6361

64-
let swVersion = await WorkerManager.promiseMessage('service', {
65-
action: 'getVersion'
66-
});
67-
68-
if (swVersion?.version && swVersion.version !== config.version) {
69-
console.error(`Version Mismatch! Client: ${config.version}, SW: ${swVersion.version}. Reloading.`);
70-
location.reload(true);
71-
return
72-
}
73-
7462
WorkerManager.sendMessage('service', {
7563
action: 'registerNeoConfig',
7664
data : config

src/worker/Manager.mjs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ class Manager extends Base {
147147

148148
!Neo.insideWorker && me.createWorkers();
149149

150+
if (navigator.serviceWorker) {
151+
navigator.serviceWorker.onmessage = me.onWorkerMessage.bind(me);
152+
me.checkServiceWorkerVersion()
153+
}
154+
150155
Neo.setGlobalConfig = me.setGlobalConfig.bind(me);
151156
Neo.workerId = 'main';
152157

@@ -177,6 +182,22 @@ class Manager extends Base {
177182
})
178183
}
179184

185+
/**
186+
* @returns {Promise<void>}
187+
*/
188+
async checkServiceWorkerVersion() {
189+
if (navigator.serviceWorker?.controller) {
190+
let swVersion = await this.promiseMessage('service', {
191+
action: 'getVersion'
192+
});
193+
194+
if (swVersion?.version && swVersion.version !== Neo.config.version) {
195+
console.error(`Version Mismatch! Client: ${Neo.config.version}, SW: ${swVersion.version}. Reloading.`);
196+
location.reload(true)
197+
}
198+
}
199+
}
200+
180201
/**
181202
* Creates a web worker using the passed options as well as adding error & message event listeners.
182203
* @param {Object} opts

0 commit comments

Comments
 (0)