aboutsummaryrefslogtreecommitdiff
path: root/modules/firefox.home/chrome/extensionsManager.uc.js
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2024-08-25 17:16:40 +0530
committerAkshay Nair <phenax5@gmail.com>2024-08-25 17:16:40 +0530
commit86d3b43cbc880da156b81c9f5f30396d1f7de308 (patch)
treeb90b297297df998f776a820c87a4433b5fae17d9 /modules/firefox.home/chrome/extensionsManager.uc.js
parent0d0e62aedf8bfd8393f5ad17e369a95ddc12137f (diff)
downloadnixos-config-86d3b43cbc880da156b81c9f5f30396d1f7de308.tar.gz
nixos-config-86d3b43cbc880da156b81c9f5f30396d1f7de308.zip
firefox: Add broken extension manager uc
Diffstat (limited to '')
-rw-r--r--modules/firefox.home/chrome/extensionsManager.uc.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/modules/firefox.home/chrome/extensionsManager.uc.js b/modules/firefox.home/chrome/extensionsManager.uc.js
new file mode 100644
index 0000000..f5f3ed2
--- /dev/null
+++ b/modules/firefox.home/chrome/extensionsManager.uc.js
@@ -0,0 +1,73 @@
+// ==UserScript==
+// @name Custom New Tab
+// @version 1.0
+// @description Load a custom link or local file, instead of the default new tab page
+// @startup UC.extensionsManager.init(win)
+// @shutdown UC.extensionsManager.destroy();
+// ==/UserScript==
+
+(() => {
+ const ENABLE = false;
+
+ // Managed in about:config
+ const EXTENSION_SETTINGS_PREF = 'extensions.uc.userExtensionSettings'
+
+ const getSettings = () => {
+ try {
+ return JSON.parse(xPref.get(EXTENSION_SETTINGS_PREF) || 'null') ?? {};
+ } catch (e) {
+ return {};
+ }
+ }
+
+ const saveSettings = (settings) =>
+ xPref.set(EXTENSION_SETTINGS_PREF, JSON.stringify(settings));
+
+ const updateExtensionSetting = (id, update) => {
+ const settings = getSettings();
+ settings.extensions[id] ??= {};
+ settings.extensions[id] = update(settings.extensions[id] ?? {}) ?? {};
+ saveSettings(settings);
+ }
+
+ const getCurrentTabHost = () => gBrowser.selectedTab.linkedBrowser.currentURI.host.trim() || null;
+
+ const module = {
+ disableForHost(id, host = getCurrentTabHost()) {
+ updateExtensionSetting(id, s => {
+ const urls = new Set(s.disabledHosts || []);
+ urls.add(host);
+ s.disabledHosts = [...urls];
+ return s;
+ });
+ },
+
+ async onTabChange() {
+ const currentHost = getCurrentTabHost();
+ if (!currentHost) return;
+
+ const settings = getSettings();
+ const addons = await AddonManager.getAllAddons();
+ addons.forEach(addon => {
+ const disabledHosts = settings?.extensions[addon.id].disabledHosts ?? [];
+ const shouldDisable = disabledHosts.includes(currentHost)
+
+ if (addon.isActive && shouldDisable)
+ return addon.disable();
+ if (!addon.isActive && !shouldDisable)
+ return addon.enable();
+ })
+ },
+
+ init(_win) {
+ if (!ENABLE) return;
+
+ Services.obs.addObserver(module.onTabChange, 'TabSelect');
+ },
+ destroy() {
+ Services.obs.removeObserver(module.onTabChange, 'TabSelect');
+ },
+ };
+
+ UC.extensionsManager = module;
+})();