blob: f5f3ed24ac58919a1cce902fe96d4d592bee36ac (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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;
})();
|