files/en-us/mozilla/add-ons/webextensions/api/permissions/index.md
Enables extensions to request extra permissions at runtime, after they have been installed.
Extensions need permissions to access more powerful WebExtension APIs. They can request permissions at install time by including them in the permissions manifest.json key. The main advantages of asking for permissions at install time are:
In most major browsers, users can see if installed extensions request advanced permissions through the browser's extensions manager.
Using the permissions API, an extension can request additional permissions at runtime. The extension must list these permissions in
optional_permissions key of its manifest.json file for origins and API permissions.gecko.data_collection_permissions.optional property of the browser_specific_settings key of its manifest.json file for data collection permissions.The main advantages of requesting permissions at runtime are:
Note that some permissions are not allowed in optional_permissions.
To use the permissions API, decide which permissions your extension can request at runtime, and list them in optional_permissions and browser_specific_settings.gecko.data_collection_permissions.optional. After this, you can request any permissions included in optional_permissions or browser_specific_settings.gecko.data_collection_permissions.optional. The extension can only make these requests in the handler for a user action (for example, a click handler).
Starting with Firefox 84, users can manage optional permissions of installed extensions from the Add-ons Manager. Extensions that use optional permissions should listen for browser.permissions.onAdded and browser.permissions.onRemoved API events to know when a user grants or revokes these permissions.
For advice on designing your request for runtime permissions, to maximize the likelihood that users grant them, see Request permissions at runtime.
{{WebExtExamples("h2")}}
{{Compat}}
manifest.json permissions propertymanifest.json optional_permissions property[!NOTE] This API is based on Chromium's
chrome.permissionsAPI.