"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); } }, }, }; } };