summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/ExtensionPermissionMessages.sys.mjs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--toolkit/components/extensions/ExtensionPermissionMessages.sys.mjs95
1 files changed, 95 insertions, 0 deletions
diff --git a/toolkit/components/extensions/ExtensionPermissionMessages.sys.mjs b/toolkit/components/extensions/ExtensionPermissionMessages.sys.mjs
new file mode 100644
index 0000000000..2edf3a5d7b
--- /dev/null
+++ b/toolkit/components/extensions/ExtensionPermissionMessages.sys.mjs
@@ -0,0 +1,95 @@
+/* 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",
+ "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}`;
+}