Skip to content

Commit d26858b

Browse files
1 parent 3e55e5e commit d26858b

File tree

1 file changed

+22
-1
lines changed
  • lib/vscode/src/vs/workbench/contrib/webview/browser/pre

1 file changed

+22
-1
lines changed

lib/vscode/src/vs/workbench/contrib/webview/browser/pre/main.js

+22-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,28 @@ const workerReady = new Promise(async (resolve, reject) => {
242242
}
243243
};
244244
navigator.serviceWorker.addEventListener('message', versionHandler);
245-
assertIsDefined(registration.active).postMessage({ channel: 'version' });
245+
246+
const postVersionMessage = () => {
247+
assertIsDefined(navigator.serviceWorker.controller).postMessage({ channel: 'version' });
248+
};
249+
250+
// At this point, either the service worker is ready and
251+
// became our controller, or we need to wait for it.
252+
// Note that navigator.serviceWorker.controller could be a
253+
// controller from a previously loaded service worker.
254+
const currentController = navigator.serviceWorker.controller;
255+
if (currentController && currentController.scriptURL.endsWith(swPath)) {
256+
// service worker already loaded & ready to receive messages
257+
postVersionMessage();
258+
} else {
259+
// either there's no controlling service worker, or it's an old one:
260+
// wait for it to change before posting the message
261+
const onControllerChange = () => {
262+
navigator.serviceWorker.removeEventListener('controllerchange', onControllerChange);
263+
postVersionMessage();
264+
};
265+
navigator.serviceWorker.addEventListener('controllerchange', onControllerChange);
266+
}
246267
},
247268
error => {
248269
reject(new Error(`Could not register service workers: ${error}.`));

0 commit comments

Comments
 (0)