123 lines
3.8 KiB
JavaScript
123 lines
3.8 KiB
JavaScript
/* 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`
|
|
* - `permissionToTranslation` at https://github.com/mozilla-mobile/firefox-android/blob/d9c08c387917e3e53963386ad53229e69d52da6e/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/Addon.kt#L174-L206
|
|
* - https://extensionworkshop.com/documentation/develop/request-the-right-permissions/#advised-permissions
|
|
* - https://support.mozilla.org/en-US/kb/permission-request-messages-firefox-extensions
|
|
*
|
|
* 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",
|
|
"trialML",
|
|
"userScripts",
|
|
"webNavigation",
|
|
]);
|
|
|
|
export const DATA_COLLECTION_PERMISSIONS = new Set([
|
|
"authenticationInfo",
|
|
"bookmarksInfo",
|
|
"browsingActivity",
|
|
"financialAndPaymentInfo",
|
|
"healthInfo",
|
|
"locationInfo",
|
|
"personalCommunications",
|
|
"personallyIdentifyingInfo",
|
|
"searchTerms",
|
|
"technicalAndInteraction",
|
|
"websiteActivity",
|
|
"websiteContent",
|
|
]);
|
|
|
|
/**
|
|
* 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
|
|
* A permission name.
|
|
* @param {boolean} [short=false] short
|
|
* An optional parameter to indicate whether to
|
|
* get l10n IDs for short-form or long-form
|
|
* strings. The default is to return short-form
|
|
* string IDs.
|
|
* @returns {string | null}
|
|
*/
|
|
export function permissionToL10nId(permission, short = false) {
|
|
if (DATA_COLLECTION_PERMISSIONS.has(permission)) {
|
|
const prefix = short ? "short" : "long";
|
|
return `webext-perms-description-data-${prefix}-${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}`;
|
|
}
|