From 3087643c9c21056f509129f75fb96762fa22f424 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Fri, 10 Apr 2026 08:04:25 -0500 Subject: [PATCH] fix: guard permission handlers in File System API tests (#50865) 1. Chromium can fire unrelated permission checks (e.g. 'background-sync') on the default session. Copy a safeguard `permission === 'fileSystem'` from "calls twice when trying to query a read/write file handle permissions". 2. add afterEach cleanup: reset setPermissionCheckHandler(null) and remove ipcMain listeners for 'did-create-file-handle' and 'did-create-directory-handle'. --- spec/chromium-spec.ts | 62 ++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/spec/chromium-spec.ts b/spec/chromium-spec.ts index f596749cd7..a790d1eb2c 100644 --- a/spec/chromium-spec.ts +++ b/spec/chromium-spec.ts @@ -993,6 +993,9 @@ describe('chromium features', () => { let w: BrowserWindow | null = null; afterEach(() => { + ipcMain.removeAllListeners('did-create-file-handle'); + ipcMain.removeAllListeners('did-create-directory-handle'); + session.defaultSession.setPermissionCheckHandler(null); session.defaultSession.setPermissionRequestHandler(null); closeAllWindows(); }); @@ -1134,18 +1137,20 @@ describe('chromium features', () => { }); w.webContents.session.setPermissionRequestHandler((wc, permission, callback, details) => { - expect(permission).to.equal('fileSystem'); + if (permission === 'fileSystem') { + const { href } = url.pathToFileURL(writablePath); + expect(details).to.deep.equal({ + fileAccessType: 'writable', + isDirectory: false, + isMainFrame: true, + filePath: testFile, + requestingUrl: href + }); - const { href } = url.pathToFileURL(writablePath); - expect(details).to.deep.equal({ - fileAccessType: 'writable', - isDirectory: false, - isMainFrame: true, - filePath: testFile, - requestingUrl: href - }); - - callback(true); + callback(true); + return; + } + callback(false); }); ipcMain.once('did-create-file-handle', async () => { @@ -1185,17 +1190,19 @@ describe('chromium features', () => { }); w.webContents.session.setPermissionRequestHandler((wc, permission, callback, details) => { - expect(permission).to.equal('fileSystem'); - - const { href } = url.pathToFileURL(writablePath); - expect(details).to.deep.equal({ - fileAccessType: 'writable', - isDirectory: false, - isMainFrame: true, - filePath: testFile, - requestingUrl: href - }); + if (permission === 'fileSystem') { + const { href } = url.pathToFileURL(writablePath); + expect(details).to.deep.equal({ + fileAccessType: 'writable', + isDirectory: false, + isMainFrame: true, + filePath: testFile, + requestingUrl: href + }); + callback(false); + return; + } callback(false); }); @@ -1287,12 +1294,13 @@ describe('chromium features', () => { }); w.webContents.session.setPermissionCheckHandler((wc, permission, origin, details) => { - expect(permission).to.equal('fileSystem'); - - const { fileAccessType, isDirectory, filePath } = details; - expect(fileAccessType).to.equal('readable'); - expect(isDirectory).to.be.true(); - expect(filePath).to.equal(testDir); + if (permission === 'fileSystem') { + const { fileAccessType, isDirectory, filePath } = details; + expect(fileAccessType).to.equal('readable'); + expect(isDirectory).to.be.true(); + expect(filePath).to.equal(testDir); + return false; + } return false; });