fix: getUserMedia
duplicate permissions call (#36787)
* fix: getUserMedia duplicate permissions call * test: add regression test
This commit is contained in:
parent
1d9a4ab02c
commit
f31826f4a0
3 changed files with 112 additions and 44 deletions
|
@ -1053,6 +1053,22 @@ describe('session module', () => {
|
|||
|
||||
describe('ses.setPermissionRequestHandler(handler)', () => {
|
||||
afterEach(closeAllWindows);
|
||||
// These tests are done on an http server because navigator.userAgentData
|
||||
// requires a secure context.
|
||||
let server: http.Server;
|
||||
let serverUrl: string;
|
||||
before(async () => {
|
||||
server = http.createServer((req, res) => {
|
||||
res.setHeader('Content-Type', 'text/html');
|
||||
res.end('');
|
||||
});
|
||||
await new Promise<void>(resolve => server.listen(0, '127.0.0.1', resolve));
|
||||
serverUrl = `http://localhost:${(server.address() as any).port}`;
|
||||
});
|
||||
after(() => {
|
||||
server.close();
|
||||
});
|
||||
|
||||
it('cancels any pending requests when cleared', async () => {
|
||||
const w = new BrowserWindow({
|
||||
show: false,
|
||||
|
@ -1085,6 +1101,43 @@ describe('session module', () => {
|
|||
const [, name] = await result;
|
||||
expect(name).to.deep.equal('SecurityError');
|
||||
});
|
||||
|
||||
it('successfully resolves when calling legacy getUserMedia', async () => {
|
||||
const ses = session.fromPartition('' + Math.random());
|
||||
ses.setPermissionRequestHandler(
|
||||
(_webContents, _permission, callback) => {
|
||||
callback(true);
|
||||
}
|
||||
);
|
||||
|
||||
const w = new BrowserWindow({ show: false, webPreferences: { session: ses } });
|
||||
await w.loadURL(serverUrl);
|
||||
const { ok, message } = await w.webContents.executeJavaScript(`
|
||||
new Promise((resolve, reject) => navigator.getUserMedia({
|
||||
video: true,
|
||||
audio: true,
|
||||
}, x => resolve({ok: x instanceof MediaStream}), e => reject({ok: false, message: e.message})))
|
||||
`);
|
||||
expect(ok).to.be.true(message);
|
||||
});
|
||||
|
||||
it('successfully rejects when calling legacy getUserMedia', async () => {
|
||||
const ses = session.fromPartition('' + Math.random());
|
||||
ses.setPermissionRequestHandler(
|
||||
(_webContents, _permission, callback) => {
|
||||
callback(false);
|
||||
}
|
||||
);
|
||||
|
||||
const w = new BrowserWindow({ show: false, webPreferences: { session: ses } });
|
||||
await w.loadURL(serverUrl);
|
||||
await expect(w.webContents.executeJavaScript(`
|
||||
new Promise((resolve, reject) => navigator.getUserMedia({
|
||||
video: true,
|
||||
audio: true,
|
||||
}, x => resolve({ok: x instanceof MediaStream}), e => reject({ok: false, message: e.message})))
|
||||
`)).to.eventually.be.rejectedWith('Permission denied');
|
||||
});
|
||||
});
|
||||
|
||||
describe('ses.setPermissionCheckHandler(handler)', () => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue