VulpesOS/services/media-permission.mjs
2026-10-22 20:42:26 +02:00

23 lines
1.2 KiB
JavaScript

// Use Gaia's permission panel so fullscreen hosts do not open a hidden desktop dialog.
export function requestMediaPermission(win, request, clone = value => value) {
return new Promise(resolve => {
const finish = result => {
win.removeEventListener('mozContentEvent', response);
win.removeEventListener('pagehide', cancelled);
resolve(result);
};
const response = event => {
const detail = event.detail;
if (detail?.id !== request.id || !['permission-allow', 'permission-deny'].includes(detail.type)) return;
finish({allowed:detail.type === 'permission-allow', remember:detail.remember === true});
};
const cancelled = () => finish({allowed:false, remember:false});
win.addEventListener('mozContentEvent', response);
win.addEventListener('pagehide', cancelled, {once:true});
win.dispatchEvent(new win.CustomEvent('mozChromeEvent', {detail:clone({
type:'permission-prompt', id:request.id, origin:request.origin,
manifestURL:request.manifestURL, isApp:true, isGranted:false, remember:false,
permissions:{[request.kind === 'microphone' ? 'audio-capture' : 'video-capture']:[]},
})}));
});
}