Skip to content

Commit cddefb9

Browse files
committed
frontend: update service worker registration
fix #221
1 parent 152a697 commit cddefb9

File tree

3 files changed

+25
-25
lines changed

3 files changed

+25
-25
lines changed

frontend/index.html

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,7 @@
88
<title>Remote Access</title>
99
<script type="text/javascript">
1010
if ('serviceWorker' in navigator) {
11-
navigator.serviceWorker.register("/sw.js", {type: "module"}).then((reg) => {
12-
// The serviceworker wont update when it is currently awaiting a response
13-
// this way it will be defenitely updated on the next refresh
14-
window.addEventListener("beforeunload", ()=> {
15-
reg.unregister();
16-
})
17-
reg.update();
18-
})
11+
navigator.serviceWorker.register("/sw.js", {type: "module"});
1912
}
2013
function median_app_resumed() {
2114
if (sessionStorage.getItem("currentConnection")) {

frontend/src/sw.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ import { Message, MessageType, FetchMessage, ResponseMessage } from "./types";
2121

2222
declare const self: ServiceWorkerGlobalScope;
2323

24+
self.addEventListener("activate", (event) => {
25+
event.waitUntil(self.clients.claim());
26+
});
27+
28+
self.addEventListener("install", (event) => {
29+
event.waitUntil(self.skipWaiting());
30+
});
31+
2432
function handleWGRequest(event: FetchEvent) {
2533
let url = event.request.url.replace(self.location.origin, "");
2634
const headers1: [string, string][] = [];
@@ -129,11 +137,6 @@ self.addEventListener("fetch", (event: FetchEvent) => {
129137
}
130138
});
131139

132-
133-
self.addEventListener("activate", () => {
134-
self.clients.claim();
135-
});
136-
137140
const SECRET_CACHE_NAME = 'secret-cache-v1';
138141

139142
async function storeSecretKeyInCache(secretKey: string): Promise<void> {

frontend/src/utils.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)