mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-09-19 21:20:31 +02:00
2b34aeea5d
Signed-off-by: Leah Rowe <leah@libreboot.org>
165 lines
5.1 KiB
Diff
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
|
|
|