From 1e1a98f476fd62776e5013ce6d8fc554657aad08 Mon Sep 17 00:00:00 2001 From: wanhose Date: Thu, 12 Sep 2024 19:59:59 +0200 Subject: [PATCH] feat(browser-extension): add extension stylesheet action and improve rules performance --- .../src/scripts/background.js | 55 ++++++++++--------- .../src/styles/extension.css | 3 + 2 files changed, 31 insertions(+), 27 deletions(-) create mode 100644 packages/browser-extension/src/styles/extension.css diff --git a/packages/browser-extension/src/scripts/background.js b/packages/browser-extension/src/scripts/background.js index 5ae7192..c1f1057 100644 --- a/packages/browser-extension/src/scripts/background.js +++ b/packages/browser-extension/src/scripts/background.js @@ -115,7 +115,6 @@ browser.runtime.onMessage.addListener((message, sender, callback) => { case 'DISABLE_ICON': if (isPage && tabId !== undefined) { browser.action.setIcon({ path: '/assets/icons/disabled.png', tabId }, suppressLastError); - browser.action.setBadgeText({ tabId, text: '' }); } break; case 'ENABLE_ICON': @@ -130,11 +129,8 @@ browser.runtime.onMessage.addListener((message, sender, callback) => { break; case 'GET_DATA': storage.get('data', ({ data }) => { - if (data) { - callback(data); - } else { - refreshData(callback); - } + if (data) callback(data); + else refreshData(callback); }); return true; case 'GET_EXCLUSION_LIST': @@ -163,9 +159,19 @@ browser.runtime.onMessage.addListener((message, sender, callback) => { script.insertCSS({ files: ['styles/dialog.css'], target: { tabId } }); } break; + case 'INSERT_EXTENSION_CSS': + if (isPage && tabId !== undefined) { + script.insertCSS({ files: ['styles/extension.css'], target: { tabId } }); + } + break; case 'REFRESH_DATA': refreshData(callback); return true; + case 'RELOAD_TAB': + if (tabId !== undefined) { + browser.tabs.reload(tabId, { bypassCache: true }); + } + break; case 'REPORT': if (tabId !== undefined) { report(message, sender.tab, callback); @@ -173,18 +179,15 @@ browser.runtime.onMessage.addListener((message, sender, callback) => { } break; case 'SET_BADGE': - if (tabId !== undefined) { + if (isPage && tabId !== undefined) { browser.action.setBadgeBackgroundColor({ color: '#6b7280' }); - browser.action.setBadgeText({ tabId, text: message.value }); + browser.action.setBadgeText({ tabId, text: message.value ? `${message.value}` : null }); } break; case 'SET_HOSTNAME_STATE': if (hostname) { - if (message.state.enabled === false) { - storage.set({ [hostname]: message.state }); - } else { - storage.remove(hostname); - } + if (message.state.enabled === false) storage.set({ [hostname]: message.state }); + else storage.remove(hostname); } break; default: @@ -252,22 +255,20 @@ browser.webRequest.onBeforeRequest.addListener( return; } - const hostname = url.split('.').slice(-3).join('.').replace('www.', ''); - const store = await storage.get(hostname); + const hostname = new URL(url).hostname.split('.').slice(-3).join('.').replace('www.', ''); + const { data, ...store } = await storage.get(['data', hostname]); const state = store[hostname] ?? { enabled: true }; - if (state.enabled) { - const { data } = await storage.get('data'); - - if (data?.rules?.length) { - browser.declarativeNetRequest.updateSessionRules({ - addRules: data.rules.map((rule) => ({ - ...rule, - condition: { ...rule.condition, tabIds: [tabId] }, - })), - removeRuleIds: data.rules.map((rule) => rule.id), - }); - } + if (data?.rules?.length) { + browser.declarativeNetRequest.updateSessionRules({ + addRules: state.enabled + ? data.rules.map((rule) => ({ + ...rule, + condition: { ...rule.condition, tabIds: [tabId] }, + })) + : undefined, + removeRuleIds: data.rules.map((rule) => rule.id), + }); } } }, diff --git a/packages/browser-extension/src/styles/extension.css b/packages/browser-extension/src/styles/extension.css new file mode 100644 index 0000000..8875b37 --- /dev/null +++ b/packages/browser-extension/src/styles/extension.css @@ -0,0 +1,3 @@ +*[data-cookie-dialog-monster='true'] { + visibility: hidden !important; +}