{"id":489,"date":"2025-06-11T19:00:01","date_gmt":"2025-06-11T19:00:01","guid":{"rendered":"https:\/\/blog.mozilla.org\/webrtc\/?p=489"},"modified":"2025-06-24T23:20:22","modified_gmt":"2025-06-24T23:20:22","slug":"one-time-permissions-are-here-to-stay","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/","title":{"rendered":"One-time permissions are here to stay!"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" width=\"700\" height=\"488\" src=\"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png\" alt=\"\" class=\"alignright size-large wp-image-491\" srcset=\"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png 700w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-250x174.png 250w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-768x536.png 768w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-120x84.png 120w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome.png 1396w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>One-time camera and microphone permissions are now in Chrome (since <a href=\"https:\/\/developer.chrome.com\/blog\/one-time-permissions\">M116<\/a>), joining Firefox and Safari. This means that per-session permissions are now available to use cross-browser. Chrome calls the option <em><strong>&#8220;Allow this time&#8221;<\/strong><\/em>, where <em>&#8220;this time&#8221;<\/em> (as in <em>&#8220;one-time&#8221;<\/em>) refers to the scope of the grant, which the browser forgets once the user closes the page. This is the default in Firefox and Safari.<\/p>\n<p>This gives users more control over their privacy, and forces sites to work without persistent permission. We&#8217;ll explore where old patterns break and how to build device selection that works for everyone.<\/p>\n<h2>Why do browsers offer one-time permissions?<\/h2>\n<p>Users might not be comfortable making long-term decisions about a website&#8217;s permissions.<br \/>\n<!--more--><br \/>\nFor camera and microphone, the risk of untimely recording is of particular concern: For backwards compatibility, <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/MediaDevices\/getUserMedia\"><code>navigator.mediaDevices.getUserMedia()<\/code><\/a> doesn&#8217;t require <a href=\"https:\/\/html.spec.whatwg.org\/multipage\/interaction.html#transient-activation\">transient activation<\/a>. This means open tabs might turn on the camera or microphone at any time. <a href=\"https:\/\/www.computerworld.com\/article\/1547342\/federal-judge-orders-pa-schools-to-stop-laptop-spying.html\n\">Invasive<\/a> or <a href=\"https:\/\/arstechnica.com\/information-technology\/2023\/05\/app-with-50000-google-play-installs-sent-attackers-mic-recordings-every-15-minutes\/\">malicious<\/a> applications can abuse this.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"700\" height=\"360\" src=\"http:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/ManBehindDesk-700x360.png\" alt=\"\" class=\"alignright size-large wp-image-494\" srcset=\"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/ManBehindDesk-700x360.png 700w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/ManBehindDesk-250x128.png 250w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/ManBehindDesk-768x395.png 768w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/ManBehindDesk-120x62.png 120w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/ManBehindDesk.png 1074w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>Users might not even trust legitimate websites with this decision, for fear of confusion over when people can and can&#8217;t see them. They might feel better knowing recording cannot commence without the push of a button.<\/p>\n<p>More browsers now support one-time permission than support persistent permission. So it seems time for applications to design for them.<\/p>\n<h2>Why do websites need to care? (The web model)<\/h2>\n<p>Many users assume configuration and selection of their cameras and microphones is handled by browsers. They don\u2019t realize how much of this experience websites control. Web developers are faced with navigating several browser differences:<\/p>\n<table style=\"margin: 0 auto; border: 1px solid black; border-collapse: collapse;\">\n<thead>\n<tr>\n<th style=\"border: 1px solid black; padding: 8px;\"><em>Browser<\/em><\/th>\n<th style=\"border: 1px solid black; padding: 8px;\"><em>Permission models<\/em><\/th>\n<th style=\"border: 1px solid black; padding: 8px;\"><em>Devices granted<\/em><\/th>\n<th style=\"border: 1px solid black; padding: 8px;\"><em>Devices enumerable<\/em><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border: 1px solid black; padding: 8px;\"><strong>Firefox<\/strong><\/td>\n<td style=\"border: 1px solid black; padding: 8px;\">one-time &#038; persisted<\/td>\n<td style=\"border: 1px solid black; padding: 8px;\">per-device &#038; all of a kind<\/td>\n<td style=\"border: 1px solid black; padding: 8px;\">after use<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid black; padding: 4px;\"><strong>Chrome<\/strong><\/td>\n<td style=\"border: 1px solid black; padding: 4px;\">one-time &#038; persisted<\/td>\n<td style=\"border: 1px solid black; padding: 4px;\">all of a kind<\/td>\n<td style=\"border: 1px solid black; padding: 4px;\">after permission <em>(not to spec)<\/em><\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid black; padding: 8px;\"><strong>Safari<\/strong><\/td>\n<td style=\"border: 1px solid black; padding: 8px;\">one-time only<\/td>\n<td style=\"border: 1px solid black; padding: 8px;\">all of a kind<\/td>\n<td style=\"border: 1px solid black; padding: 8px;\">after use<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p>In hindsight, this may have been a mistake. As Uncle Ben would say, <em>&#8220;<a id=\"persistent-permission-mindset\" href=\"https:\/\/en.wikipedia.org\/wiki\/With_great_power_comes_great_responsibility\">with great power comes great responsibility<\/a>&#8220;<\/em>. So it might be good to review how websites are faring in this area.<\/p>\n<h3>Goodbye <em>persistent permission mindset<\/em><\/h3>\n<p>This anti-pattern of the past worked in only one browser, where <em>not<\/em> having persistent permission was a tell that someone was a first-time user. In a nutshell, the mindset was: divert users without persisted permission to a separate priming page, and the main application needn\u2019t bother with permission at all. A major simplification.<\/p>\n<p>This was never interoperable, yet influenced early web design. Web developers were given the <code>navigator.permissions.query()<\/code> API to navigate <a href=\"https:\/\/infra.spec.whatwg.org\/#implementation-defined\">implementation-defined<\/a> behavior to help escalate permission.<\/p>\n<p>Users who didn&#8217;t (or couldn&#8217;t) persist permission were stuck in a &#8220;slow lane&#8221;, treated as first-time users every meeting. They were lucky if the website remembered their devices or let them choose at all. Some websites <a href=\"https:\/\/bugzil.la\/1923194#c1\">didn&#8217;t even work<\/a>.<\/p>\n<p>This mindset no longer fits any browser, so hopefully we&#8217;ve seen the last of it.<\/p>\n<h3>Designing for all users<\/h3>\n<p>With Chrome M116, users can easily reset permissions from the URL bar in all modern browsers. This renders priming anti-patterns of the past obsolete.<\/p>\n<p>Less is more. Don&#8217;t grill users for permission, and don&#8217;t expect it to stay from a previous visit. Simply let the browser ask for it at point-of-use, and you&#8217;ll be fine and interoperable!<\/p>\n<p>The hardest remaining part is <em>device selection<\/em>, which is the focus of the remainder of this post.<\/p>\n<h2>Selecting camera \/ mic \u2014 with privacy<\/h2>\n<p>Websites\u2014not browsers\u2014build the picker UI (<a href=\"https:\/\/w3c.github.io\/mediacapture-main\/#note-device-enumeration\">don&#8217;t ask<\/a>). They call <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/MediaDevices\/enumerateDevices\"><code>navigator.mediaDevices.enumerateDevices()<\/code><\/a> to fill the UI, but exposing every device up-front would hand trackers a stable fingerprint.<\/p>\n<p><img decoding=\"async\" width=600 src=\"http:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/cart_before_the_horse12-700x487.jpg\" alt=\"Cart before the horse\" class=\"alignright size-large wp-image-493\" srcset=\"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/cart_before_the_horse12-700x487.jpg 700w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/cart_before_the_horse12-250x174.jpg 250w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/cart_before_the_horse12-768x534.jpg 768w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/cart_before_the_horse12-1536x1068.jpg 1536w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/cart_before_the_horse12-120x83.jpg 120w, https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/cart_before_the_horse12.jpg 1600w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>So the rule today is: use first, list later. A page must call <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/MediaDevices\/getUserMedia\"><code>getUserMedia()<\/code><\/a> before it can list devices.<\/p>\n<p>In contrast, early spec drafts let sites enumerate devices on return visits if the user had once granted access. But this form of persistence was hostile to privacy\u2014trackers still try it on <a href=\"https:\/\/chromestatus.com\/metrics\/feature\/timeline\/popularity\/1119\">8% of page loads<\/a>.<\/p>\n<p>So in 2020 the <a href=\"https:\/\/www.w3.org\/Privacy\/IG\/\">W3C Privacy Interest Group<\/a> closed the loophole, and browsers agreed to block enumeration until after <a href=\"https:\/\/w3c.github.io\/mediacapture-main\/#ref-for-set-device-information-exposure-1\"><em>use<\/em><\/a> of camera or microphone.<\/p>\n<p>One engine still ignores this (<a href=\"https:\/\/issues.chromium.org\/issues\/40138537\">crbug 40138537<\/a>), tempting sites to ship workflows that rely on persistence between visits. Backwards compatibility with websites that were never interoperable in the first place, is somehow holding up progress. That seems backwards.<\/p>\n<p>So if you happen to work on one of these websites, we&#8217;re here to help! Here are some ideas for making device selection work with one-time permissions (with interoperability as a bonus)!<\/p>\n<h3>Simple selection: Make it secondary<\/h3>\n<p>Most users have just one microphone and one front-facing camera. So the most obvious solution is to put selection under \u2699\ufe0f settings:<\/p>\n<ol>\n<li>Remember what camera and microphone they used last time<\/li>\n<li>Open the user&#8217;s camera and microphone first<\/li>\n<li>Direct the user to a \u2699\ufe0f Settings page to change camera or microphone<\/li>\n<\/ol>\n<p>A benefit of this model is the user sees the result instantly.<\/p>\n<h3>Advanced selection: without permission<\/h3>\n<p>More websites are letting users into meetings without requiring permission upfront. We support this trend, as it is great for user privacy!<\/p>\n<p>But some of them also offer device selection directly in the room. How can they do both? We&#8217;ll cover some strategies:<\/p>\n<ol>\n<li><strong>remember choices<\/strong> \u2014 recall the user&#8217;s device choices from last time from <code>localStorage<\/code><\/li>\n<li><strong>cache the device list<\/strong> \u2014 copy the device list to localStorage (it doesn&#8217;t change that often)<\/li>\n<li><strong>call gUM<\/strong> \u2014 don&#8217;t be afraid to call <code>getUserMedia<\/code> to refresh a selector the user interacts with<\/li>\n<\/ol>\n<p>Here&#8217;s a <a href=\"https:\/\/jan-ivar.github.io\/dummy\/gum_picker_muted_cached_styled.html\">demo<\/a> of 1 and 2:<br \/>\n<iframe loading=\"lazy\" src=\"https:\/\/jan-ivar.github.io\/dummy\/gum_picker_muted_cached_styled.html\" allow=\"camera;microphone;speaker-selection\" width=\"100%\" height=\"400px\" frameborder=\"0\"><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><\/iframe><br \/>\nIf it&#8217;s your first time here, you might see <em>&#8220;Camera 1&#8221;<\/em> and <em>&#8220;Microphone 1&#8221;<\/em> listed until you turn on camera and microphone. This is for privacy reasons. But once you&#8217;ve done this once, the webpage caches your choices and device list from last time. You&#8217;ll see informative device labels from then on.<\/p>\n<p>This should work well for most people who don&#8217;t switch out devices a lot. And if you don&#8217;t see your devices listed, turn on any camera or microphone to update the list. Best of all, it works across browsers and permission choices!<\/p>\n<p>Feel free to look at the <a href=\"https:\/\/jan-ivar.github.io\/dummy\/gum_picker_muted_cached_styled.js\">source<\/a>. It follows <a href=\"https:\/\/w3c.github.io\/mediacapture-main\/#example-6\">best practices<\/a> for things like extracting selected <code>deviceId<\/code>s (Firefox users will thank you), and using <code>{exact}<\/code> constraints sparingly to allow fallback for removed devices.<\/p>\n<p>If you end up needing to write your own, make sure to try it out in all major browsers. Interactive device selection can be tricky. There&#8217;s a lot of state to keep track of! <\/p>\n<h2>Long-term solutions and future improvements<\/h2>\n<p>Work in standardization and implementations continues to improve this experience further. The challenge is balancing user experience with privacy and interoperability. Here are some recent improvements made to the spec:<\/p>\n<ol>\n<li>Extend device exposure to camera if microphone is in use and vice versa <a href=\"https:\/\/github.com\/w3c\/mediacapture-main\/pull\/1038\">#1038<\/a><\/li>\n<li>Set device information exposure to true once permission is granted even if capture fails <a href=\"https:\/\/github.com\/w3c\/mediacapture-main\/pull\/1039\">#1039<\/a><\/li>\n<\/ol>\n<p>Other improvements are still being discussed:<\/p>\n<ol>\n<li>Should enumerateDevices exposure survive same origin navigation? <a href=\"https:\/\/github.com\/w3c\/mediacapture-main\/issues\/1043\">#1043<\/a><\/li>\n<\/ol>\n<p>There are also promising <a href=\"https:\/\/github.com\/mozilla\/standards-positions\/issues\/1245\">discussions about PEPC<\/a> (Page-Embedded Permission Control), that may someday put <em>native<\/em> <code>&lt;camera&gt;<\/code> and <code>&lt;microphone&gt;<\/code> mute-toggles into the browsers. Once we have those, it&#8217;s easy to imagine a device selection drop-list hanging off of them. This would put device selection back in the browser, and put the horse back in front of the cart!<\/p>\n<p>But it is still early days here. I hope the demo and suggestions are helpful right away. And stay tuned for updates on this! Any questions? Ask me on <a href=\"https:\/\/x.com\/jibrewery\/status\/1932939319846605132\">X<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"One-time camera and microphone permissions are now in Chrome (since M116), joining Firefox and Safari. This means that per-session permissions are now available to use cross-browser. Chrome calls the option &#8220;Allow this time&#8221;, where &#8220;this time&#8221; (as in &#8220;one-time&#8221;) refers to the scope of the grant, which the browser forgets once the user closes the [&hellip;]","protected":false},"author":1399,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"coauthors":[301098],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>One-time permissions are here to stay! - Advancing WebRTC<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"One-time permissions are here to stay! - Advancing WebRTC\" \/>\n<meta property=\"og:description\" content=\"One-time camera and microphone permissions are now in Chrome (since M116), joining Firefox and Safari. This means that per-session permissions are now available to use cross-browser. Chrome calls the option &#8220;Allow this time&#8221;, where &#8220;this time&#8221; (as in &#8220;one-time&#8221;) refers to the scope of the grant, which the browser forgets once the user closes the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/\" \/>\n<meta property=\"og:site_name\" content=\"Advancing WebRTC\" \/>\n<meta property=\"article:published_time\" content=\"2025-06-11T19:00:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-24T23:20:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png\" \/>\n<meta name=\"author\" content=\"Jan-Ivar Bruaroey\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jan-Ivar Bruaroey\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/\",\"url\":\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/\",\"name\":\"One-time permissions are here to stay! - Advancing WebRTC\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png\",\"datePublished\":\"2025-06-11T19:00:01+00:00\",\"dateModified\":\"2025-06-24T23:20:22+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/f2eb9712b8d85b70aebe1faf24e731fd\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#primaryimage\",\"url\":\"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png\",\"contentUrl\":\"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/webrtc\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"One-time permissions are here to stay!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#website\",\"url\":\"https:\/\/blog.mozilla.org\/webrtc\/\",\"name\":\"Advancing WebRTC\",\"description\":\"Committed to moving Firefox and WebRTC forward\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.mozilla.org\/webrtc\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/f2eb9712b8d85b70aebe1faf24e731fd\",\"name\":\"Jan-Ivar Bruaroey\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/image\/5f3d49a61b032619d0d33c4cc7c7433f\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/16d7e05dc9f8a855a02e0796b00aad3f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/16d7e05dc9f8a855a02e0796b00aad3f?s=96&d=mm&r=g\",\"caption\":\"Jan-Ivar Bruaroey\"},\"url\":\"https:\/\/blog.mozilla.org\/webrtc\/author\/jbruaroeymozilla-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"One-time permissions are here to stay! - Advancing WebRTC","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/","og_locale":"en_US","og_type":"article","og_title":"One-time permissions are here to stay! - Advancing WebRTC","og_description":"One-time camera and microphone permissions are now in Chrome (since M116), joining Firefox and Safari. This means that per-session permissions are now available to use cross-browser. Chrome calls the option &#8220;Allow this time&#8221;, where &#8220;this time&#8221; (as in &#8220;one-time&#8221;) refers to the scope of the grant, which the browser forgets once the user closes the [&hellip;]","og_url":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/","og_site_name":"Advancing WebRTC","article_published_time":"2025-06-11T19:00:01+00:00","article_modified_time":"2025-06-24T23:20:22+00:00","og_image":[{"url":"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png"}],"author":"Jan-Ivar Bruaroey","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jan-Ivar Bruaroey","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/","url":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/","name":"One-time permissions are here to stay! - Advancing WebRTC","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#primaryimage"},"image":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png","datePublished":"2025-06-11T19:00:01+00:00","dateModified":"2025-06-24T23:20:22+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/f2eb9712b8d85b70aebe1faf24e731fd"},"breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#primaryimage","url":"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png","contentUrl":"https:\/\/blog.mozilla.org\/webrtc\/files\/2025\/04\/OneTimePermissionsChrome-700x488.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/webrtc\/one-time-permissions-are-here-to-stay\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/webrtc\/"},{"@type":"ListItem","position":2,"name":"One-time permissions are here to stay!"}]},{"@type":"WebSite","@id":"https:\/\/blog.mozilla.org\/webrtc\/#website","url":"https:\/\/blog.mozilla.org\/webrtc\/","name":"Advancing WebRTC","description":"Committed to moving Firefox and WebRTC forward","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.mozilla.org\/webrtc\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/f2eb9712b8d85b70aebe1faf24e731fd","name":"Jan-Ivar Bruaroey","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/webrtc\/#\/schema\/person\/image\/5f3d49a61b032619d0d33c4cc7c7433f","url":"https:\/\/secure.gravatar.com\/avatar\/16d7e05dc9f8a855a02e0796b00aad3f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/16d7e05dc9f8a855a02e0796b00aad3f?s=96&d=mm&r=g","caption":"Jan-Ivar Bruaroey"},"url":"https:\/\/blog.mozilla.org\/webrtc\/author\/jbruaroeymozilla-com\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/posts\/489"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/users\/1399"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/comments?post=489"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/posts\/489\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/media?parent=489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/categories?post=489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/tags?post=489"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webrtc\/wp-json\/wp\/v2\/coauthors?post=489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}