@@ -155,21 +155,25 @@ export async function getSecretKeyFromServiceWorker(): Promise<string | null> {
155155 }
156156
157157 secretKeyPromise = new Promise ( async ( resolve ) => {
158- if ( ! navigator . serviceWorker . controller && retries < 3 ) {
159- console . error ( "No service worker controller found. Retrying..." ) ;
158+ gettingSecretInProgress = true ;
159+
160+ // We dont use navigator.serviceWorker.controller here since it can be, for whatever reason,
161+ // null for an entire browser session
162+ const controller = await navigator . serviceWorker . getRegistration ( location . origin ) ;
163+ if ( ! controller ?. active && retries < 3 ) {
164+ console . error ( "ServiceWorker controller not active, retrying..." ) ;
160165 retries ++ ;
161- resolve ( await getSecretKeyFromServiceWorker ( ) ) ;
162- return ;
163- } else if ( ! navigator . serviceWorker . controller ) {
164- console . error ( "No service worker controller found after retries." ) ;
165- resolve ( null ) ;
166+ setTimeout ( async ( ) => {
167+ resolve ( await getSecretKeyFromServiceWorker ( ) ) ;
168+ } , 500 ) ;
166169 return ;
170+ } else if ( ! controller ?. active ) {
171+ console . error ( "service worker controller not active" ) ;
172+ return resolve ( null ) ;
167173 } else if ( retries >= 3 ) {
168- console . error ( "Max retries reached without service worker controller." ) ;
169- resolve ( null ) ;
170- return ;
174+ console . error ( "Max retries reached for getting secretKey from service worker" ) ;
175+ return resolve ( null ) ;
171176 }
172- gettingSecretInProgress = true ;
173177
174178 const timeout = setTimeout ( async ( ) => {
175179 console . error ( "Service Worker: Failed to get secretKey within timeout. Retrying..." ) ;
@@ -197,7 +201,7 @@ export async function getSecretKeyFromServiceWorker(): Promise<string | null> {
197201 type : MessageType . RequestSecret ,
198202 data : null
199203 } ;
200- navigator . serviceWorker . controller . postMessage ( requestMsg ) ;
204+ controller . active ? .postMessage ( requestMsg ) ;
201205 } ) ;
202206
203207 return secretKeyPromise ;
0 commit comments