From d07d8f0fbe22362b57d403b99ca1c3b668118751 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Mon, 11 Nov 2024 12:30:52 +0100 Subject: [PATCH] update PR --- packages/trace-viewer/src/sw/main.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/trace-viewer/src/sw/main.ts b/packages/trace-viewer/src/sw/main.ts index e8a746c23f..db48b074f7 100644 --- a/packages/trace-viewer/src/sw/main.ts +++ b/packages/trace-viewer/src/sw/main.ts @@ -76,7 +76,7 @@ async function doFetch(event: FetchEvent): Promise { return fetch(event.request); const request = event.request; - const client = await self.clients.get(event.clientId); + const client = await self.clients.get(event.clientId ?? event.resultingClientId); // When trace viewer is deployed over https, we will force upgrade // insecure http subresources to https. Otherwise, these will fail @@ -96,6 +96,9 @@ async function doFetch(event: FetchEvent): Promise { const traceUrl = url.searchParams.get('trace'); if (relativePath.startsWith('/snapshot/')) { + // while there's no snapshot, the iframe keeps polling but isn't yet initialised. + // `event.resultingClientId` will contain an ID, but it won't yet be available in `self.clients`. + // so `client` will be undefined in that state. const { snapshotServer } = loadedTraces.get(traceUrl!) || {}; if (!snapshotServer) return new Response(null, { status: 404 }); @@ -105,13 +108,6 @@ async function doFetch(event: FetchEvent): Promise { return response; } - if (relativePath.startsWith('/closest-screenshot/')) { - const { snapshotServer } = loadedTraces.get(traceUrl!) || {}; - if (!snapshotServer) - return new Response(null, { status: 404 }); - return snapshotServer.serveClosestScreenshot(relativePath, url.searchParams); - } - if (!client) { // vscode webview doesn't sent clientId under some circumstances if (url.pathname.endsWith('embedded.html')) @@ -144,6 +140,13 @@ async function doFetch(event: FetchEvent): Promise { return snapshotServer.serveSnapshotInfo(relativePath, url.searchParams); } + if (relativePath.startsWith('/closest-screenshot/')) { + const { snapshotServer } = loadedTraces.get(traceUrl!) || {}; + if (!snapshotServer) + return new Response(null, { status: 404 }); + return snapshotServer.serveClosestScreenshot(relativePath, url.searchParams); + } + if (relativePath.startsWith('/sha1/')) { // Sha1 for sources is based on the file path, can't load it of a random model. const sha1 = relativePath.slice('/sha1/'.length);