Skip to content

Commit aebbbc1

Browse files
committed
Fix the artifact browser navigation race
1 parent 4035f0d commit aebbbc1

2 files changed

Lines changed: 8 additions & 5 deletions

File tree

docs/security/dependency-remediation-2026-08.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,6 @@ handlers, script elements, and `javascript:` URLs cannot execute or remain activ
7070
- A dismissed or auto-dismissed record cannot justify a vulnerable lockfile entry.
7171
- Historical `AUTO_DISMISSED`, `DISMISSED`, and `FIXED` states can remain in GitHub reporting after
7272
the lockfile is clean.
73-
- The development-dependency auto-dismiss preset is disabled because development dependencies can
74-
enter shipped artifacts in this monorepo.
73+
- The development-dependency auto-dismiss preset must be disabled because development dependencies
74+
can enter shipped artifacts in this monorepo. Verify this repository setting in GitHub's web UI;
75+
the repository REST and GraphQL APIs do not expose its state.

scripts/security/check-built-browser.mjs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,20 +285,22 @@ async function main() {
285285
browser = launched.browser;
286286
const endpoint = new URL(launched.endpoint);
287287
const targetResponse = await fetch(
288-
`http://127.0.0.1:${endpoint.port}/json/new?${encodeURIComponent(`${origin}/`)}`,
288+
`http://127.0.0.1:${endpoint.port}/json/new?about:blank`,
289289
{ method: 'PUT' },
290290
);
291291
if (!targetResponse.ok) throw new Error(`Chrome target creation failed: ${targetResponse.status}`);
292292
const target = await targetResponse.json();
293293
client = new CdpClient(target.webSocketDebuggerUrl);
294294
await client.connect();
295295
await client.call('Runtime.enable');
296+
await client.call('Page.enable');
297+
await client.call('Page.navigate', { url: `${origin}/` });
296298
for (let attempt = 0; attempt < 100; attempt += 1) {
297299
const ready = await client.call('Runtime.evaluate', {
298-
expression: 'document.readyState',
300+
expression: '({ origin: location.origin, readyState: document.readyState })',
299301
returnByValue: true,
300302
});
301-
if (ready.result.value === 'complete') break;
303+
if (ready.result.value.origin === origin && ready.result.value.readyState === 'complete') break;
302304
await new Promise((resolveWait) => {
303305
setTimeout(resolveWait, 50);
304306
});

0 commit comments

Comments
 (0)