Ask for the set of permissions listed in the given permissions.Permissions object.

The Permissions argument may contain either an origins property, which is an array of host permissions, or a permissions property, which is an array of API permissions, or both. Permissions must come from the set of permissions defined in the optional_permissions manifest.json key. The origins property may include permissions that match a subset of the hosts matched by an optional permission: for example, if optional_permissions include "*://", then may include "".

The request can only be made inside the handler for a user action.

Depending on a circumstances, the browser will probably handle the request by asking the user whether to grant the requested permissions. Only a single request is made for all requested permissions: thus either all permissions are granted or none of them are.

Any permissions granted are retained by the extension, even over upgrade and disable/enable cycling.

This is an asynchronous function that returns a Promise.


let requesting = browser.permissions.request(
  permissions                // Permissions object


Return value

A Promise that is fulfilled with true if the extension is now granted all the permissions listed in the permissions argument, or false otherwise.

Browser compatibility

BCD tables only load in the browser


This code adds a click handler that asks for various permissions, then logs the result of the request and the extension's permissions after the request completed.

const permissionsToRequest = {
  permissions: ["bookmarks", "history"],
  origins: [""],

async function requestPermissions() {
  function onResponse(response) {
    if (response) {
      console.log("Permission was granted");
    } else {
      console.log("Permission was refused");
    return browser.permissions.getAll();

  const response = await browser.permissions.request(permissionsToRequest);
  const currentPermissions = await onResponse(response);

  console.log(`Current permissions:`, currentPermissions);

  .addEventListener("click", requestPermissions);

Example extensions