An extension can declare both required and optional permissions. In general, you should:
Advantages of required permissions:
Advantages of optional permissions:
Declare optional permissions in your extension
manifest with the optional_permissions
key, using the
same format as the permissions
field:
{ "name": "My extension", ... "optional_permissions": [ "tabs", "http://www.google.com/" ], ... }
You can specify any of the following as optional permissions:
Request the permissions from within a user gesture using
permissions.request()
:
document.querySelector('#my-button').addEventListener('click', function(event) { // Permissions must be requested from inside a user gesture, like a button's // click handler. chrome.permissions.request({ permissions: ['tabs'], origins: ['http://www.google.com/'] }, function(granted) { // The callback argument will be true if the user granted the permissions. if (granted) { doSomething(); } else { doSomethingElse(); } }); });
Chrome prompts the user if adding the permissions results in different warning messages than the user has already seen and accepted. For example, the previous code might result in a prompt like this:
To check whether your extension has a specific permission or set of
permissions, use permission.contains()
:
chrome.permissions.contains({ permissions: ['tabs'], origins: ['http://www.google.com/'] }, function(result) { if (result) { // The extension has the permissions. } else { // The extension doesn't have the permissions. } });
You should remove permissions when you no longer need them.
After a permission has been removed, calling
permissions.request()
usually adds the permission back without
prompting the user.
chrome.permissions.remove({ permissions: ['tabs'], origins: ['http://www.google.com/'] }, function(removed) { if (removed) { // The permissions have been removed. } else { // The permissions have not been removed (e.g., you tried to remove // required permissions). } });