Files
lbmk/config/firefox/default/patches/0019-lw-permissions.patch.patch
T
Leah Rowe 2b34aeea5d WIP: convert to lwmk
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-08 06:44:40 +01:00

278 lines
10 KiB
Diff

From 62fca4b579e3ad49fa5b8ad09b04d9bec7640261 Mon Sep 17 00:00:00 2001
From: LibreWolf Developers <noreply@librewolf.net>
Date: Sun, 6 Sep 2026 10:10:22 +0100
Subject: [PATCH 19/52] lw-permissions.patch
---
.../base/content/navigator-toolbox.inc.xhtml | 6 ++
.../preferences/config/permissions-data.mjs | 82 +++++++++++++++++++
.../preferences/dialogs/sitePermissions.js | 14 ++++
browser/modules/SitePermissions.sys.mjs | 51 ++++++++++++
browser/modules/moz.build | 2 +
browser/themes/shared/preferences/privacy.css | 8 ++
6 files changed, 163 insertions(+)
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index da5ce8e0cfc5..f23d366e0b56 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -283,6 +283,10 @@
data-l10n-id="urlbar-autoplay-media-blocked"/>
<image data-permission-id="canvas" class="blocked-permission-icon canvas-icon" role="button"
data-l10n-id="urlbar-canvas-blocked"/>
+ <image data-permission-id="media-key-system-access" class="blocked-permission-icon drm-icon" role="button"
+ data-l10n-id="urlbar-eme-blocked"/>
+ <image data-permission-id="webgl" class="blocked-permission-icon webgl-icon" role="button"
+ data-l10n-id="urlbar-webgl-blocked"/>
<image data-permission-id="midi" class="blocked-permission-icon midi-icon" role="button"
data-l10n-id="urlbar-midi-blocked"/>
<image data-permission-id="serial" class="blocked-permission-icon serial-icon" role="button"
@@ -314,6 +318,8 @@
data-l10n-id="urlbar-addons-notification-anchor"/>
<image id="canvas-notification-icon" class="notification-anchor-icon" role="button"
data-l10n-id="urlbar-canvas-notification-anchor"/>
+ <image id="webgl-notification-icon" class="notification-anchor-icon" role="button"
+ data-l10n-id="urlbar-webgl-notification-anchor"/>
<image id="indexedDB-notification-icon" class="notification-anchor-icon indexedDB-icon" role="button"
data-l10n-id="urlbar-indexed-db-notification-anchor"/>
<image id="password-notification-icon" class="notification-anchor-icon" role="button"
diff --git a/browser/components/preferences/config/permissions-data.mjs b/browser/components/preferences/config/permissions-data.mjs
index 021036868962..e9f9ae828c2c 100644
--- a/browser/components/preferences/config/permissions-data.mjs
+++ b/browser/components/preferences/config/permissions-data.mjs
@@ -63,6 +63,11 @@ Preferences.addAll([
{ id: PREF_ADDON_RECOMMENDATIONS_ENABLED, type: "bool" },
{ id: PREF_UPLOAD_ENABLED, type: "bool" },
{ id: "datareporting.usage.uploadEnabled", type: "bool" },
+
+ { id: "browser.eme.ui.enabled", type: "bool" },
+ { id: "librewolf.webgl.prompt", type: "bool" },
+ { id: "media.eme.require-app-approval", type: "bool" },
+ { id: "webgl.disabled", type: "bool" },
]);
/**
@@ -498,6 +503,53 @@ Preferences.addSetting(
})
);
+Preferences.addSetting({
+ id: "emeEnabled",
+ pref: "media.eme.enabled",
+});
+Preferences.addSetting({
+ id: "emePermissionPromptEnabled",
+ pref: "media.eme.require-app-approval",
+});
+Preferences.addSetting({
+ id: "emeUIEnabled",
+ pref: "browser.eme.ui.enabled",
+});
+Preferences.addSetting({
+ id: "emeSettingsButton",
+ onUserClick: () => showPermissionExceptions({ permissionType: "media-key-system-access" }),
+ deps: ["emeEnabled", "emePermissionPromptEnabled", "emeUIEnabled"],
+ visible: deps => {
+ return deps.emeEnabled.value && deps.emePermissionPromptEnabled.value && deps.emeUIEnabled.value;
+ },
+});
+
+Preferences.addSetting({
+ id: "webglPermissionPromptEnabled",
+ pref: "librewolf.webgl.prompt",
+});
+Preferences.addSetting({
+ id: "webglDisabled",
+ pref: "webgl.disabled",
+});
+Preferences.addSetting({
+ id: "webglSettingsButton",
+ onUserClick: () => showPermissionExceptions({ permissionType: "webgl" }),
+ deps: ["webglPermissionPromptEnabled", "webglDisabled"],
+ visible: deps => {
+ return deps.webglPermissionPromptEnabled.value && !deps.webglDisabled.value;
+ },
+});
+
+Preferences.addSetting({
+ id: "canvasSettingsButton",
+ onUserClick: () => showPermissionExceptions({ permissionType: "canvas" }),
+ deps: ["resistFingerprinting"],
+ visible: deps => {
+ return deps.resistFingerprinting.value;
+ },
+});
+
SettingGroupManager.registerGroups({
permissions: {
id: "permissions",
@@ -607,6 +659,36 @@ SettingGroupManager.registerGroups({
"permissions-remove.label,permissions-remove-all.label,permissions-site-xr-window2.title,permissions-site-xr-desc,permissions-site-xr-disable-label,permissions-site-xr-disable-desc,",
},
},
+ {
+ id: "webglSettingsButton",
+ control: "moz-box-button",
+ l10nId: "permissions-webgl2",
+ controlAttrs: {
+ ".iconSrc": "chrome://browser/skin/notification-icons/webgl.svg",
+ "search-l10n-ids":
+ "permissions-remove.label,permissions-remove-all.label,permissions-site-webgl-window2.title,permissions-site-webgl-desc",
+ },
+ },
+ {
+ id: "canvasSettingsButton",
+ control: "moz-box-button",
+ l10nId: "permissions-canvas2",
+ controlAttrs: {
+ ".iconSrc": "chrome://browser/skin/canvas.svg",
+ "search-l10n-ids":
+ "permissions-remove.label,permissions-remove-all.label,permissions-site-canvas-window2.title,permissions-site-canvas-desc",
+ },
+ },
+ {
+ id: "emeSettingsButton",
+ control: "moz-box-button",
+ l10nId: "permissions-eme2",
+ controlAttrs: {
+ ".iconSrc": "chrome://browser/skin/drm-icon.svg",
+ "search-l10n-ids":
+ "permissions-remove.label,permissions-remove-all.label,permissions-site-eme-window2.title,permissions-site-eme-desc,permissions-site-eme-disable-label,permissions-site-eme-disable-desc",
+ },
+ },
],
},
{
diff --git a/browser/components/preferences/dialogs/sitePermissions.js b/browser/components/preferences/dialogs/sitePermissions.js
index 013c0df347bb..633b9f3e4512 100644
--- a/browser/components/preferences/dialogs/sitePermissions.js
+++ b/browser/components/preferences/dialogs/sitePermissions.js
@@ -40,6 +40,20 @@ const sitePermissionsL10n = {
disableLabel: "permissions-site-xr-disable-label",
disableDescription: "permissions-site-xr-disable-desc",
},
+ "media-key-system-access": {
+ window: "permissions-site-eme-window2",
+ description: "permissions-site-eme-desc",
+ disableLabel: "permissions-site-eme-disable-label",
+ disableDescription: "permissions-site-eme-disable-desc",
+ },
+ webgl: {
+ window: "permissions-site-webgl-window2",
+ description: "permissions-site-webgl-desc",
+ },
+ canvas: {
+ window: "permissions-site-canvas-window2",
+ description: "permissions-site-canvas-desc",
+ },
camera: {
window: "permissions-site-camera-window2",
description: "permissions-site-camera-desc",
diff --git a/browser/modules/SitePermissions.sys.mjs b/browser/modules/SitePermissions.sys.mjs
index b112014e0d49..9e2a36111674 100644
--- a/browser/modules/SitePermissions.sys.mjs
+++ b/browser/modules/SitePermissions.sys.mjs
@@ -1138,6 +1138,21 @@ let gPermissions = {
},
},
+ "media-key-system-access": {
+ labelID: "eme",
+ exactHostMatch: true,
+ get disabled() {
+ return !SitePermissions.emeEnabled || !SitePermissions.emePermissionPromptEnabled || !SitePermissions.emeUIEnabled;
+ },
+ },
+
+ webgl: {
+// exactHostMatch: true,
+ get disabled() {
+ return !SitePermissions.webglPermissionPromptEnabled || SitePermissions.webglDisabled;
+ },
+ },
+
midi: {
exactHostMatch: true,
get disabled() {
@@ -1171,6 +1186,42 @@ let gPermissions = {
},
};
+XPCOMUtils.defineLazyPreferenceGetter(
+ SitePermissions,
+ "emeEnabled",
+ "media.eme.enabled",
+ false,
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
+);
+XPCOMUtils.defineLazyPreferenceGetter(
+ SitePermissions,
+ "emePermissionPromptEnabled",
+ "media.eme.require-app-approval",
+ true,
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
+);
+XPCOMUtils.defineLazyPreferenceGetter(
+ SitePermissions,
+ "emeUIEnabled",
+ "browser.eme.ui.enabled",
+ true,
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
+);
+XPCOMUtils.defineLazyPreferenceGetter(
+ SitePermissions,
+ "webglPermissionPromptEnabled",
+ "librewolf.webgl.prompt",
+ true,
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
+);
+XPCOMUtils.defineLazyPreferenceGetter(
+ SitePermissions,
+ "webglDisabled",
+ "webgl.disabled",
+ false,
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
+);
+
SitePermissions.midiPermissionEnabled = Services.prefs.getBoolPref(
"dom.webmidi.enabled"
);
diff --git a/browser/modules/moz.build b/browser/modules/moz.build
index eebf824044aa..d8dfd195fc73 100644
--- a/browser/modules/moz.build
+++ b/browser/modules/moz.build
@@ -150,9 +150,11 @@ EXTRA_JS_MODULES += [
MOZ_SRC_FILES += [
"CanvasPermissionPromptHelper.sys.mjs",
"ContextId.sys.mjs",
+ "EMEPermissionPrompt.sys.mjs",
"ObserverForwarder.sys.mjs",
"PrivateBrowsingUI.sys.mjs",
"SerialDeviceSharingHelper.sys.mjs",
+ "WebGLPermissionPromptHelper.sys.mjs",
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
diff --git a/browser/themes/shared/preferences/privacy.css b/browser/themes/shared/preferences/privacy.css
index 896619be9a33..cbe70bc6455d 100644
--- a/browser/themes/shared/preferences/privacy.css
+++ b/browser/themes/shared/preferences/privacy.css
@@ -37,6 +37,14 @@
list-style-image: url(chrome://browser/skin/notification-icons/xr.svg);
}
+.drm-icon {
+ list-style-image: url(chrome://browser/skin/drm-icon.svg);
+}
+
+.webgl-icon {
+ list-style-image: url(chrome://browser/skin/notification-icons/webgl.svg);
+}
+
.camera-icon {
list-style-image: url(chrome://browser/skin/notification-icons/camera.svg);
}
--
2.47.3