11/* global EventTarget */
22import { ServiceWorkerRegistration } from './registration.js'
3- import { createServiceWorker , SHARED_WORKER_URL } from './instance.js'
4- import { SharedWorker } from '../shared-worker/index.js'
3+ import { createServiceWorker } from './instance.js'
54import { Deferred } from '../async.js'
65import application from '../application.js'
76import location from '../location.js'
@@ -23,8 +22,7 @@ class ServiceWorkerContainerInternalStateMap extends Map {
2322class ServiceWorkerContainerInternalState {
2423 currentWindow = null
2524 controller = null
26- sharedWorker = null
27- channel = new BroadcastChannel ( 'socket.runtime.ServiceWorkerContainer' )
25+ channel = new BroadcastChannel ( 'socket.runtime.serviceWorker' )
2826 ready = new Deferred ( )
2927 init = new Deferred ( )
3028
@@ -487,65 +485,61 @@ export class ServiceWorkerContainer extends EventTarget {
487485 return globalThis . top . navigator . serviceWorker . startMessages ( )
488486 }
489487
490- if ( ! internal . get ( this ) . sharedWorker && globalThis . RUNTIME_WORKER_LOCATION !== SHARED_WORKER_URL ) {
491- internal . get ( this ) . sharedWorker = new SharedWorker ( SHARED_WORKER_URL )
492- internal . get ( this ) . sharedWorker . port . start ( )
493- internal . get ( this ) . sharedWorker . port . onmessage = async ( event ) => {
494- if (
495- event . data ?. from === 'realm' &&
496- event . data ?. registration ?. id &&
497- event . data ?. client ?. id === globalThis . __args . client . id &&
498- event . data ?. client ?. type === globalThis . __args . client . type &&
499- event . data ?. client ?. frameType === globalThis . __args . client . frameType
500- ) {
501- const registrations = await this . getRegistrations ( )
502- for ( const registration of registrations ) {
503- const info = registration [ Symbol . for ( 'socket.runtime.ServiceWorkerRegistration.info' ) ]
504- if ( info ?. id === event . data . registration . id ) {
505- const serviceWorker = createServiceWorker ( state . serviceWorker . state , {
506- subscribe : false ,
507- scriptURL : info . scriptURL ,
508- id : info . id
509- } )
510-
511- const messageEvent = new MessageEvent ( 'message' , {
512- origin : new URL ( info . scriptURL , location . origin ) . origin ,
513- data : event . data . message
514- } )
515-
516- Object . defineProperty ( messageEvent , 'source' , {
517- configurable : false ,
518- enumerable : false ,
519- writable : false ,
520- value : serviceWorker
521- } )
522-
523- this . dispatchEvent ( messageEvent )
524- break
525- }
526- }
527- } else if (
528- event . data ?. from === 'instance' &&
529- event . data ?. registration ?. id &&
530- event . data ?. client ?. id &&
531- event . data ?. client ?. id !== globalThis . __args . client . id
532- ) {
533- if ( globalThis . isWorkerScope && globalThis . serviceWorker ) {
488+ internal . get ( this ) . channel . onmessage = async ( event ) => {
489+ if (
490+ event . data ?. from === 'realm' &&
491+ event . data ?. registration ?. id &&
492+ event . data ?. client ?. id === globalThis . __args . client . id &&
493+ event . data ?. client ?. type === globalThis . __args . client . type &&
494+ event . data ?. client ?. frameType === globalThis . __args . client . frameType
495+ ) {
496+ const registrations = await this . getRegistrations ( )
497+ for ( const registration of registrations ) {
498+ const info = registration [ Symbol . for ( 'socket.runtime.ServiceWorkerRegistration.info' ) ]
499+ if ( info ?. id === event . data . registration . id ) {
500+ const serviceWorker = createServiceWorker ( state . serviceWorker . state , {
501+ subscribe : false ,
502+ scriptURL : info . scriptURL ,
503+ id : info . id
504+ } )
505+
534506 const messageEvent = new MessageEvent ( 'message' , {
535- origin : event . data . client . origin . origin ,
507+ origin : new URL ( info . scriptURL , location . origin ) . origin ,
536508 data : event . data . message
537509 } )
538510
539511 Object . defineProperty ( messageEvent , 'source' , {
540512 configurable : false ,
541513 enumerable : false ,
542514 writable : false ,
543- value : await globalThis . clients . get ( event . data . client . id )
515+ value : serviceWorker
544516 } )
545517
546518 this . dispatchEvent ( messageEvent )
519+ break
547520 }
548521 }
522+ } else if (
523+ event . data ?. from === 'instance' &&
524+ event . data ?. registration ?. id &&
525+ event . data ?. client ?. id &&
526+ event . data ?. client ?. id !== globalThis . __args . client . id
527+ ) {
528+ if ( globalThis . isWorkerScope && globalThis . serviceWorker ) {
529+ const messageEvent = new MessageEvent ( 'message' , {
530+ origin : event . data . client . origin . origin ,
531+ data : event . data . message
532+ } )
533+
534+ Object . defineProperty ( messageEvent , 'source' , {
535+ configurable : false ,
536+ enumerable : false ,
537+ writable : false ,
538+ value : await globalThis . clients . get ( event . data . client . id )
539+ } )
540+
541+ this . dispatchEvent ( messageEvent )
542+ }
549543 }
550544 }
551545 }
0 commit comments