Files
lbmk/config/firefox/default/patches/0005-canvas-permission.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

165 lines
5.1 KiB
Diff

From e0a864992baea169d5f20b366ecdbe918ce1bcba Mon Sep 17 00:00:00 2001
From: LibreWolf Developers <noreply@librewolf.net>
Date: Sun, 6 Sep 2026 10:09:20 +0100
Subject: [PATCH 05/52] canvas-permission.patch
---
browser/modules/SitePermissions.sys.mjs | 98 ++++++++++++++++++-
.../resistfingerprinting/RFPHelper.sys.mjs | 10 +-
2 files changed, 105 insertions(+), 3 deletions(-)
diff --git a/browser/modules/SitePermissions.sys.mjs b/browser/modules/SitePermissions.sys.mjs
index 3cf23c809c23..b112014e0d49 100644
--- a/browser/modules/SitePermissions.sys.mjs
+++ b/browser/modules/SitePermissions.sys.mjs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
+import { RFPHelper } from "resource://gre/modules/RFPHelper.sys.mjs";
var gStringBundle = Services.strings.createBundle(
"chrome://browser/locale/sitePermissions.properties"
@@ -807,6 +808,67 @@ export var SitePermissions = {
return null;
}
},
+
+ /**
+ * Computes whether the canvas image extraction prompt is enabled
+ * based on Baseline/FPP settings and their respective overrides.
+ *
+ * @returns {boolean} true if CanvasImageExtractionPrompt/AllTargets is active
+ */
+ _computeCanvasImageExtractionEnabled() {
+ const fppEnabled = this.fingerprintingProtectionEnabled;
+ const baselineEnabled = this.baselineFingerprintingProtectionEnabled;
+
+ if (fppEnabled) {
+ const defaults = RFPHelper.getTargetDefaults();
+ const active = new Set(defaults);
+ const overrides = this.fingerprintingProtectionOverrides;
+ this._applyOverrides(active, overrides);
+ if (active.has("CanvasImageExtractionPrompt")) {
+ return true;
+ }
+ }
+
+ if (baselineEnabled) {
+ const defaults = RFPHelper.getTargetDefaultsBaseline();
+ const active = new Set(defaults);
+ const overrides = this.baselineFingerprintingProtectionOverrides;
+ this._applyOverrides(active, overrides);
+ if (active.has("CanvasImageExtractionPrompt")) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ /**
+ * Applies override flags to an active set of targets.
+ *
+ * @param {Set} active - The active targets set
+ * @param {string} overridesString - The override string (e.g., "+CanvasImageExtractionPrompt,+AllTargets")
+ */
+ _applyOverrides(active, overridesString) {
+ for (const flag of overridesString.split(",").filter(Boolean)) {
+ if (flag.startsWith("+")) {
+ const target = flag.slice(1);
+ if (
+ target === "AllTargets" ||
+ target === "CanvasImageExtractionPrompt"
+ ) {
+ active.add("CanvasImageExtractionPrompt");
+ }
+ } else if (flag.startsWith("-")) {
+ const target = flag.slice(1);
+ if (
+ target === "AllTargets" ||
+ target === "CanvasImageExtractionPrompt"
+ ) {
+ active.delete("CanvasImageExtractionPrompt");
+ }
+ }
+ }
+ },
};
let gPermissions = {
@@ -1069,7 +1131,10 @@ let gPermissions = {
canvas: {
get disabled() {
- return !SitePermissions.resistFingerprinting;
+ return (
+ !SitePermissions.resistFingerprinting &&
+ !SitePermissions._computeCanvasImageExtractionEnabled()
+ );
},
},
@@ -1133,6 +1198,37 @@ XPCOMUtils.defineLazyPreferenceGetter(
false,
SitePermissions.invalidatePermissionList.bind(SitePermissions)
);
+XPCOMUtils.defineLazyPreferenceGetter(
+ SitePermissions,
+ "fingerprintingProtectionEnabled",
+ "privacy.fingerprintingProtection",
+ false,
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
+);
+
+XPCOMUtils.defineLazyPreferenceGetter(
+ SitePermissions,
+ "fingerprintingProtectionOverrides",
+ "privacy.fingerprintingProtection.overrides",
+ "",
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
+);
+
+XPCOMUtils.defineLazyPreferenceGetter(
+ SitePermissions,
+ "baselineFingerprintingProtectionEnabled",
+ "privacy.baselineFingerprintingProtection",
+ false,
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
+);
+
+XPCOMUtils.defineLazyPreferenceGetter(
+ SitePermissions,
+ "baselineFingerprintingProtectionOverrides",
+ "privacy.baselineFingerprintingProtection.overrides",
+ "",
+ SitePermissions.invalidatePermissionList.bind(SitePermissions)
+);
XPCOMUtils.defineLazyPreferenceGetter(
SitePermissions,
diff --git a/toolkit/components/resistfingerprinting/RFPHelper.sys.mjs b/toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
index f82d7309e129..d11f8a011fac 100644
--- a/toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
+++ b/toolkit/components/resistfingerprinting/RFPHelper.sys.mjs
@@ -208,8 +208,14 @@ class _RFPHelper {
return;
}
- let loadContext = notificationCallbacks.getInterface(Ci.nsILoadContext);
- if (!loadContext || !loadContext.isContent) {
+ let loadContext;
+ try {
+ loadContext = notificationCallbacks.getInterface(Ci.nsILoadContext);
+ } catch (e) {
+ return;
+ }
+
+ if (!loadContext.isContent) {
return;
}
--
2.47.3