blob: a9d80ab10462724e9b1d82548a339329f3ba972c [file] [log] [blame]
// Most options are dynamic, which means whenever they are enabled or disabled,
// the effect is immediate. However, some features aren't controlled directly in
// content scripts or injected scripts but instead in the background
// script/service worker.
//
// An example is the "blockdrafts" feature, which when enabled should enable the
// static ruleset blocking *DraftMessages requests.
import {isOptionEnabled} from '../common/optionsUtils.js';
// List of features controled in the background:
export var bgFeatures = [
'blockdrafts',
];
const blockDraftsRuleset = 'blockDrafts';
export function handleBgOptionChange(feature) {
isOptionEnabled(feature)
.then(enabled => {
switch (feature) {
// #!if ['chromium', 'chromium_mv3'].includes(browser_target)
case 'blockdrafts':
chrome.declarativeNetRequest.getEnabledRulesets(rulesets => {
if (rulesets === undefined) {
throw new Error(
chrome.runtime.lastError.message ??
'Unknown error in chrome.declarativeNetRequest.getEnabledRulesets()');
}
let isRulesetEnabled = rulesets.includes(blockDraftsRuleset);
if (!isRulesetEnabled && enabled)
chrome.declarativeNetRequest.updateEnabledRulesets(
{enableRulesetIds: [blockDraftsRuleset]});
if (isRulesetEnabled && !enabled)
chrome.declarativeNetRequest.updateEnabledRulesets(
{disableRulesetIds: [blockDraftsRuleset]});
});
break;
// #!endif
}
})
.catch(err => {
console.error(
'handleBgOptionChange: error while handling feature "' + feature +
'": ',
err);
});
}
export function handleBgOptionsOnStart() {
for (let feature of bgFeatures) handleBgOptionChange(feature);
}