| // 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); |
| } |