75 lines
2.3 kB
1
import type { BrowserWindow } from "electron";
2
3
type PermissionRequestHandler = (
4
webContents: Electron.WebContents,
5
permission: string,
6
callback: (permissionGranted: boolean) => void,
7
details: Electron.PermissionRequestHandlerHandlerDetails
8
) => void;
9
10
type PermissionCheckHandler = (
11
webContents: Electron.WebContents | null,
12
permission: string,
13
requestingOrigin: string,
14
details: Electron.PermissionCheckHandlerHandlerDetails
15
) => boolean;
16
17
moonlightHost.events.on("window-created", (window: BrowserWindow, isMainWindow: boolean) => {
18
if (!isMainWindow) return;
19
const windowSession = window.webContents.session;
20
21
// setPermissionRequestHandler
22
windowSession.setPermissionRequestHandler((webcontents, permission, callback, details) => {
23
let cbResult = false;
24
function fakeCallback(result: boolean) {
25
cbResult = result;
26
}
27
28
if (caughtPermissionRequestHandler) {
29
caughtPermissionRequestHandler(webcontents, permission, fakeCallback, details);
30
}
31
32
if (permission === "media" || permission === "display-capture") {
33
cbResult = true;
34
}
35
36
callback(cbResult);
37
});
38
39
let caughtPermissionRequestHandler: PermissionRequestHandler | undefined;
40
41
windowSession.setPermissionRequestHandler = function catchSetPermissionRequestHandler(
42
handler: (
43
webcontents: Electron.WebContents,
44
permission: string,
45
callback: (permissionGranted: boolean) => void
46
) => void
47
) {
48
caughtPermissionRequestHandler = handler;
49
};
50
51
// setPermissionCheckHandler
52
windowSession.setPermissionCheckHandler((webcontents, permission, requestingOrigin, details) => {
53
return false;
54
});
55
56
let caughtPermissionCheckHandler: PermissionCheckHandler | undefined;
57
58
windowSession.setPermissionCheckHandler((webcontents, permission, requestingOrigin, details) => {
59
let result = false;
60
61
if (caughtPermissionCheckHandler) {
62
result = caughtPermissionCheckHandler(webcontents, permission, requestingOrigin, details);
63
}
64
65
if (permission === "media" || permission === "display-capture") {
66
result = true;
67
}
68
69
return result;
70
});
71
72
windowSession.setPermissionCheckHandler = function catchSetPermissionCheckHandler(handler: PermissionCheckHandler) {
73
caughtPermissionCheckHandler = handler;
74
};
75
});
76