From 8e0c153b70293b2f684f0c026d5986a0f5ccfd8f Mon Sep 17 00:00:00 2001 From: OrcaWin Date: Wed, 28 Oct 2026 18:07:51 -0700 Subject: [PATCH] fix(browser): track native frame ports during cleanup (#35346) Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com> --- .../browser/extensions/browser-extension-native-ports.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/browser/extensions/browser-extension-native-ports.ts b/src/main/browser/extensions/browser-extension-native-ports.ts index 4cd30c3b3a6..a0a61d23100 100644 --- a/src/main/browser/extensions/browser-extension-native-ports.ts +++ b/src/main/browser/extensions/browser-extension-native-ports.ts @@ -49,6 +49,7 @@ let nextSessionId = 1 const observedSessions = new WeakSet() const observedContents = new WeakSet() let frameSweep: NodeJS.Timeout | null = null +let framePortCount = 0 function sessionId(sess: Electron.Session): number { let id = sessionIds.get(sess) @@ -92,9 +93,12 @@ function finish(port: NativePort): void { } port.closed = true ports.delete(port.key) + if (port.owner.kind === 'frame') { + framePortCount -= 1 + } port.task?.end() port.connection?.close() - if (frameSweep && ![...ports.values()].some((open) => open.owner.kind === 'frame')) { + if (frameSweep && framePortCount === 0) { clearInterval(frameSweep) frameSweep = null } @@ -228,6 +232,9 @@ export async function openNativePort( onEvent } ports.set(key, port) + if (owner.kind === 'frame') { + framePortCount += 1 + } observeSession(caller.session) if (caller.webContents && owner.kind === 'frame') { observeFrameOwner(caller.webContents)