Stay organized with collections Save and categorize content based on your preferences.
DescriptionUse the chrome.permissions
API to request declared optional permissions at run time rather than install time, so users understand why the permissions are needed and grant only those that are necessary.
Permission warnings exist to describe the capabilities granted by an API, but some of these warnings may not be obvious. The Permissions API allows developers to explain permission warnings and introduce new features gradually which gives users a risk-free introduction to the extension. This way, users can specify how much access they are willing to grant and which features they want to enable.
For example, the optional permissions extension's core functionality is overriding the new tab page. One feature is displaying the user's goal of the day. This feature only requires the storage permission, which does not include a warning. The extension has an additional feature, that users can enable by clicking the following button:
An extension button that enables additional features.Displaying the user's top sites requires the topSites permission, which has the following warning.
An extension warning fortopSites
API Implement optional permissions Step 1: Decide which permissions are required and which are optional
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"],
"optional_host_permissions": ["https://www.google.com/"],
...
}
If you want to request hosts that you only discover at runtime, include "https://*/*"
in your extension's optional_host_permissions
field. This lets you specify any origin in "Permissions.origins"
as long as it has a matching scheme.
Permissions that can not be specified as optional
Most Chrome extension permissions can be specified as optional, with the following exceptions.
View Declare Permissions for further information on available permissions and their warnings.
Step 3: Request optional permissionsRequest the permissions from within a user gesture using permissions.request()
:
document.querySelector('#my-button').addEventListener('click', (event) => {
// Permissions must be requested from inside a user gesture, like a button's
// click handler.
chrome.permissions.request({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (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:
An example permission confirmation prompt. Step 4: Check the extension's current permissionsTo check whether your extension has a specific permission or set of permissions, use permission.contains()
:
chrome.permissions.contains({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (result) => {
if (result) {
// The extension has the permissions.
} else {
// The extension doesn't have the permissions.
}
});
Step 5: Remove 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: ['https://www.google.com/']
}, (removed) => {
if (removed) {
// The permissions have been removed.
} else {
// The permissions have not been removed (e.g., you tried to remove
// required permissions).
}
});
Types Properties
origins
string[] optional
The list of host permissions, including those specified in the optional_permissions
or permissions
keys in the manifest, and those associated with Content Scripts.
permissions
string[] optional
List of named permissions (does not include hosts or origins).
chrome.permissions.addHostAccessRequest(
request: object,
callback?: function,
)
Adds a host access request. Request will only be signaled to the user if extension can be granted access to the host in the request. Request will be reset on cross-origin navigation. When accepted, grants persistent access to the site’s top origin
ParametersdocumentId
string optional
The id of a document where host access requests can be shown. Must be the top-level document within a tab. If provided, the request is shown on the tab of the specified document and is removed when the document navigates to a new origin. Adding a new request will override any existent request for tabId
. This or tabId
must be specified.
The URL pattern where host access requests can be shown. If provided, host access requests will only be shown on URLs that match this pattern.
The id of the tab where host access requests can be shown. If provided, the request is shown on the specified tab and is removed when the tab navigates to a new origin. Adding a new request will override an existent request for documentId
. This or documentId
must be specified.
callback
function optional
The callback
parameter looks like:
() => void
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.permissions.contains(
permissions: Permissions,
callback?: function,
)
Checks if the extension has the specified permissions.
Parameterscallback
function optional
The callback
parameter looks like:
(result: boolean) => void
True if the extension has the specified permissions. If an origin is specified as both an optional permission and a content script match pattern, this will return false
unless both permissions are granted.
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.permissions.getAll(
callback?: function,
)
Gets the extension's current set of permissions.
Parameterscallback
function optional
The callback
parameter looks like:
(permissions: Permissions) => void
The extension's active permissions. Note that the origins
property will contain granted origins from those specified in the permissions
and optional_permissions
keys in the manifest and those associated with Content Scripts.
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.permissions.remove(
permissions: Permissions,
callback?: function,
)
Removes access to the specified permissions. If there are any problems removing the permissions, runtime.lastError
will be set.
callback
function optional
The callback
parameter looks like:
(removed: boolean) => void
True if the permissions were removed.
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.permissions.removeHostAccessRequest(
request: object,
callback?: function,
)
Removes a host access request, if existent.
ParametersdocumentId
string optional
The id of a document where host access request will be removed. Must be the top-level document within a tab. This or tabId
must be specified.
The URL pattern where host access request will be removed. If provided, this must exactly match the pattern of an existing host access request.
The id of the tab where host access request will be removed. This or documentId
must be specified.
callback
function optional
The callback
parameter looks like:
() => void
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.permissions.request(
permissions: Permissions,
callback?: function,
)
Requests access to the specified permissions, displaying a prompt to the user if necessary. These permissions must either be defined in the optional_permissions
field of the manifest or be required permissions that were withheld by the user. Paths on origin patterns will be ignored. You can request subsets of optional origin permissions; for example, if you specify *://*\/*
in the optional_permissions
section of the manifest, you can request http://example.com/
. If there are any problems requesting the permissions, runtime.lastError
will be set.
callback
function optional
The callback
parameter looks like:
(granted: boolean) => void
True if the user granted the specified permissions.
Promises are supported in Manifest V3 and later, but callbacks are provided for backward compatibility. You cannot use both on the same function call. The promise resolves with the same type that is passed to the callback.
chrome.permissions.onAdded.addListener(
callback: function,
)
Fired when the extension acquires new permissions.
ParametersThe callback
parameter looks like:
(permissions: Permissions) => void
chrome.permissions.onRemoved.addListener(
callback: function,
)
Fired when access to permissions has been removed from the extension.
ParametersThe callback
parameter looks like:
(permissions: Permissions) => void
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-01-30 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-01-30 UTC."],[],[]]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4