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 Original file line number Diff line number Diff line change @@ -242,7 +242,28 @@ const workerReady = new Promise(async (resolve, reject) => {
242
242
}
243
243
} ;
244
244
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
+ }
246
267
} ,
247
268
error => {
248
269
reject ( new Error ( `Could not register service workers: ${ error } .` ) ) ;
You can’t perform that action at this time.
0 commit comments