23 lines
1.2 KiB
JavaScript
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']:[]},
|
|
})}));
|
|
});
|
|
}
|