mirror of
https://github.com/electron/electron.git
synced 2026-05-02 03:00:22 -04:00
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 <charles@charleskerr.com>
This commit is contained in:
@@ -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;
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user