Release v2.4.0 — Erzwungene Einstellungen: about:config-Prefs bei jedem Start setzen

Neuer forcedPrefs-WebExtension-Experiment (Services.prefs) setzt beim Start
globale Prefs (Startseite aus, Kartenansicht, nicht gruppiert, absteigend,
3-Spalten-Layout, nicht auto-gelesen) sowie pro Identität die Signatur-/
Antwort-Einstellungen. Pro Setting im Options-Dialog (⚙-Tab) abschaltbar.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015PZHd9vRsBiH8cKYdQo1Yv
This commit is contained in:
Kendrick Bollens
2026-07-22 14:24:43 +02:00
parent 83d0d52a05
commit d244273e44
8 changed files with 260 additions and 1 deletions

61
experiments/prefs/api.js Normal file
View File

@@ -0,0 +1,61 @@
"use strict";
// Privilegierter Parent-Scope: schreibt/liest about:config-Prefs über Services.prefs.
// Der Modulpfad von ExtensionCommon wechselte mitten im TB-Lebenszyklus:
// TB 115+ -> ExtensionCommon.sys.mjs (ESM)
// TB 109-114 -> ExtensionCommon.jsm (JSM)
// Deshalb defensiv laden, damit dieselbe api.js über die Flotte funktioniert.
var { ExtensionCommon } = (() => {
try {
return ChromeUtils.importESModule(
"resource://gre/modules/ExtensionCommon.sys.mjs"
);
} catch (e) {
return ChromeUtils.import("resource://gre/modules/ExtensionCommon.jsm");
}
})();
// `Services` ist im privilegierten ExtensionAPI-Sandbox in TB 109+ global
// (stellt Services.prefs = nsIPrefBranch bereit); kein Import nötig.
this.forcedPrefs = class extends ExtensionCommon.ExtensionAPI {
getAPI(context) {
return {
forcedPrefs: {
async setPref(name, type, value) {
switch (type) {
case "bool":
Services.prefs.setBoolPref(name, !!value);
break;
case "int":
Services.prefs.setIntPref(name, value | 0);
break;
case "string":
// setStringPref ist unicode-sicher (im Gegensatz zu setCharPref).
Services.prefs.setStringPref(name, String(value));
break;
default:
throw new Error("forcedPrefs.setPref: unknown type " + type);
}
return true;
},
async getPref(name, type) {
if (Services.prefs.getPrefType(name) === Services.prefs.PREF_INVALID) {
return null;
}
switch (type) {
case "bool":
return Services.prefs.getBoolPref(name, false);
case "int":
return Services.prefs.getIntPref(name, 0);
case "string":
return Services.prefs.getStringPref(name, "");
default:
throw new Error("forcedPrefs.getPref: unknown type " + type);
}
},
},
};
}
};