RuntimePermissions.jsm

Add-ons using the techniques described in this document are considered a legacy technology in Firefox. Don't use these techniques to develop new add-ons. Use WebExtensions instead. If you maintain an add-on which uses the techniques described here, consider migrating it to use WebExtensions.

Starting from Firefox 53, no new legacy add-ons will be accepted on addons.mozilla.org (AMO) for desktop Firefox and Firefox for Android.

Starting from Firefox 57, WebExtensions will be the only supported extension type. Desktop Firefox and Firefox for Android will not load other extension types.

Even before Firefox 57, changes coming up in the Firefox platform will break many legacy extensions. These changes include multiprocess Firefox (e10s), sandboxing, and multiple content processes. Legacy extensions that are affected by these changes should migrate to WebExtensions if they can. See the "Compatibility Milestones" document for more information.

A wiki page containing resources, migration paths, office hours, and more, is available to help developers transition to the new technologies.

The RuntimePermissions API is new in Firefox 46.

The RuntimePermissions API is only available to privileged code running on Firefox for Android, and is intended for use by Firefox for Android add-ons.

Summary

Contains the RuntimePermissions object, which can be used to check whether one or more runtime permissions have been granted to Firefox for Android, and to ask for them if they have not.

Import the RuntimePermissions module with code like this:

Components.utils.import("resource://gre/modules/RuntimePermissions.jsm");

Examples

This example asks for the CAMERA and RECORD_AUDIO permissions, and logs the result.

Components.utils.import("resource://gre/modules/RuntimePermissions.jsm");
var permitted = RuntimePermissions.waitForPermissions([
    RuntimePermissions.CAMERA,
    RuntimePermissions.RECORD_AUDIO
  ]);
permitted.then((permissionGranted) => {
  console.log(permissionGranted);
});

This example checks whether the CAMERA and RECORD_AUDIO permissions have already been granted and logs the result.

Components.utils.import("resource://gre/modules/RuntimePermissions.jsm");
var permitted = RuntimePermissions.checkPermissions([
    RuntimePermissions.CAMERA,
    RuntimePermissions.RECORD_AUDIO
  ]);
permitted.then((permissionAlreadyGranted) => {
  console.log(permissionAlreadyGranted);
});

Methods

waitForPermissions()

waitForPermissions(permission);

Checks whether the given permission(s) have been granted to Firefox for Android. If any of them have not, prompts the user for the permissions which have not been granted.

Note that add-ons can only request permissions that are defined in the manifest for Firefox for Android. Those permissions are defined as constants in the RuntimePermissions object.

Arguments

permission
A single permission, or an array of permissions, to check/request. The permissions are specified using the constants defined in the RuntimePermissions object.

Return value

A Promise, which resolves to true if all requested permissions were granted, and false otherwise.

checkPermissions()

The checkPermissions() function is new in Firefox 55.

checkPermissions(permission);

Checks whether the given permission(s) have been already granted to Firefox for Android. It does not prompt the user.

Arguments

permission
A single permission, or an array of permissions, to check. The permissions are specified using the constants defined in the RuntimePermissions object.

Return value

A Promise, which resolves to true if all requested permissions are already granted, and false otherwise.

Constants

These constants can be passed into waitForPermissions() or checkPermissions().

CAMERA

The name of the Android CAMERA permission.

RECORD_AUDIO

The name of the Android RECORD_AUDIO permission.

WRITE_EXTERNAL_STORAGE

The name of the Android WRITE_EXTERNAL_STORAGE permission.

 

Document Tags and Contributors

 Contributors to this page: rebloor, andrewtruongmoz, wbamberg, brainbreaker
 Last updated by: rebloor,