From d41f8ae706d051c33d0ef7e381229abd4a3a73bc Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Fri, 10 Apr 2026 18:30:37 +0200 Subject: [PATCH] fix: guard permission handlers in File System API tests (#50889) 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'. Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Charles Kerr --- 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 530eb9e78c..40cb2a726c 100644 --- a/spec/chromium-spec.ts +++ b/spec/chromium-spec.ts @@ -970,6 +970,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(); }); @@ -1111,18 +1114,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 () => { @@ -1162,17 +1167,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); }); @@ -1264,12 +1271,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; });