Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* Localization object holding the fluent definitions of permission descriptions
* of WebExtension APIs defined in toolkit.
*
* This is exported to allow builds (e.g. Thunderbird) to extend or modify the
* object via its addResourceIds() method.
*/
export const PERMISSION_L10N = new Localization(
[
"toolkit/global/extensions.ftl",
"toolkit/global/extensionPermissions.ftl",
"branding/brand.ftl",
],
true
);
/**
* List of permissions that are associated with a permission message.
*
* Keep this list in sync with:
* - The messages in `toolkit/locales/en-US/toolkit/global/extensionPermissions.ftl`
*
* This is exported to allow builds (e.g. Thunderbird) to extend or modify the set.
*/
export const PERMISSIONS_WITH_MESSAGE = new Set([
"bookmarks",
"browserSettings",
"browsingData",
"clipboardRead",
"clipboardWrite",
"declarativeNetRequest",
"declarativeNetRequestFeedback",
"devtools",
"downloads",
"downloads.open",
"find",
"geolocation",
"history",
"management",
"nativeMessaging",
"notifications",
"pkcs11",
"privacy",
"proxy",
"sessions",
"tabs",
"tabHide",
"topSites",
"webNavigation",
]);
/**
* Overrides for permission description l10n identifiers,
* which by default use the pattern `webext-perms-description-${permission}`
* where `permission` is sanitized to be a valid Fluent identifier.
*
* This is exported to allow builds (e.g. Thunderbird) to extend or modify the map.
*/
export const PERMISSION_L10N_ID_OVERRIDES = new Map();
/**
* Maps a permission name to its l10n identifier.
*
* Returns `null` for permissions not in `PERMISSIONS_WITH_MESSAGE`.
*
* The default `webext-perms-description-${permission}` mapping
* may be overridden by entries in `PERMISSION_L10N_ID_OVERRIDES`.
*
* @param {string} permission
* @returns {string | null}
*/
export function permissionToL10nId(permission) {
if (!PERMISSIONS_WITH_MESSAGE.has(permission)) {
return null;
}
if (PERMISSION_L10N_ID_OVERRIDES.has(permission)) {
return PERMISSION_L10N_ID_OVERRIDES.get(permission);
}
// Sanitize input to end up with a valid l10n id.
// E.g. "<all_urls>" to "all-urls", "downloads.open" to "downloads-open".
const sanitized = permission
.replace(/[^a-zA-Z0-9]+/g, "-")
.replace(/^-|-$/g, "");
return `webext-perms-description-${sanitized}`;
}