mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-01 00:38:50 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			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}`;
 | |
| }
 | 
