48 lines
1.8 KiB
JavaScript
48 lines
1.8 KiB
JavaScript
export function configureFakeMediaForTests(app, enabled) {
|
|
if (!enabled) return;
|
|
app.commandLine.appendSwitch("use-fake-device-for-media-stream");
|
|
}
|
|
|
|
function isLocalRendererOrigin(origin) {
|
|
const value = String(origin ?? "").trim();
|
|
if (!value || value === "file://") return true;
|
|
try {
|
|
const url = new URL(value);
|
|
return url.protocol === "file:" || url.hostname === "127.0.0.1" || url.hostname === "localhost" || url.hostname === "[::1]";
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function shouldAllowMainWindowPermission(input) {
|
|
const { webContents, permission, origin, details, mainWindow } = input;
|
|
if (!mainWindow || !webContents || webContents.id !== mainWindow.webContents.id) return false;
|
|
if (!isLocalRendererOrigin(origin)) return false;
|
|
if (permission !== "media" && permission !== "audioCapture") return true;
|
|
const mediaType = typeof details.mediaType === "string" ? details.mediaType : "";
|
|
if (mediaType && mediaType !== "audio") return false;
|
|
const mediaTypes = Array.isArray(details.mediaTypes) ? details.mediaTypes : [];
|
|
return mediaType === "audio" || (mediaTypes.includes("audio") && !mediaTypes.includes("video"));
|
|
}
|
|
|
|
export function installMediaPermissionHandlers(session, getMainWindow) {
|
|
session.defaultSession.setPermissionRequestHandler((webContents, permission, callback, details) => {
|
|
callback(shouldAllowMainWindowPermission({
|
|
webContents,
|
|
permission,
|
|
origin: details?.requestingUrl,
|
|
details: details ?? {},
|
|
mainWindow: getMainWindow(),
|
|
}));
|
|
});
|
|
session.defaultSession.setPermissionCheckHandler((webContents, permission, requestingOrigin, details) => (
|
|
shouldAllowMainWindowPermission({
|
|
webContents,
|
|
permission,
|
|
origin: requestingOrigin,
|
|
details: details ?? {},
|
|
mainWindow: getMainWindow(),
|
|
})
|
|
));
|
|
}
|