Feature Type of permission request Time of request Persistence of permission Visibility of permission Control on permission Embeddability Permission denied signalling Remarks
Geolocation Prompt At usage time Session by default, optionally permanent Chrome indicator Via indicator Always allowed, bound to origin of document calling script Error callback with PERMISSION_DENIED code (getCurrentPosition and watchPosition handled identically)
Direct camera access (getUserMedia) Prompt At usage time Session by default, optionally permanent Chrome indicator, pulsing reminder Via indicator Always allowed, bound to origin of document calling script Error callback with PermissionDeniedError object Can be combined with mike access.
Also grants access to information about other available cameras
Direct mike access (getUserMedia) Prompt At usage time Session by default, optionally permanent Chrome indicator Via indicator Always allowed, bound to origin of document calling script Error callback with PermissionDeniedError object Can be combined with camera access.
Also grants access to information about other available microphones
Get stuff from camera / mike (HTML Media Capture) Implict via user interaction At usage time One-off N/A N/A Always allowed No file object available
Notification Prompt Upfront Persistent None (?) ? Allowed Notification.permission = "denied"
Pop Up Denied by default, Opt-in required At usage time One-off, optionally persistent Chrome indicator Via indicator Allowed window.open == null
Fullscreen Ask for forgiveness after “engagement gesture” At usage time One-off Transient overlay Through instructions Allowed only with specific permission from parent (allowfullscreen attribute) watch el.fullscreenenabled; fullscreenerror event if previously rejected
Pointer Lock Ask for forgiveness after “engagement gesture” At usage time One-off Transient overlay Through instructions Allowed document.pointerLockElement == null ; pointerlockchange event
File picker Implicit via user interaction At usage time One-off N/A N/A Allowed No file object
Quota Prompt Upfront Persistent ? Convoluted Allowed Success (!) callback with StorageInfo.quota unchanged