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'.
This commit is contained in:
Charles Kerr
2026-04-10 08:04:25 -05:00
committed by GitHub
parent 8e5e775e84
commit 3087643c9c

View File

@@ -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;
});