From 04f821194d1acdf70ed427b8adf79716574ee73e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Luba=C5=84ski?= Date: Wed, 14 Feb 2024 12:50:23 +0100 Subject: [PATCH] Limit danger badge only for SERP tabs & minor perf optimization (#1477) --- extension-manifest-v3/src/background/stats.js | 13 ++++---- .../src/notifications/opera-serp.js | 30 +++++++++++++++++-- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/extension-manifest-v3/src/background/stats.js b/extension-manifest-v3/src/background/stats.js index af9234b7b..631ad3be6 100644 --- a/extension-manifest-v3/src/background/stats.js +++ b/extension-manifest-v3/src/background/stats.js @@ -17,7 +17,7 @@ import { order } from '@ghostery/ui/categories'; import DailyStats from '/store/daily-stats.js'; import Options, { observe } from '/store/options.js'; -import { shouldShowOperaSerpAlert } from '/notifications/opera-serp.js'; +import { shouldSetDangerBadgeForTabId } from '/notifications/opera-serp.js'; import AutoSyncingMap from '/utils/map.js'; import Request from './utils/request.js'; @@ -38,10 +38,7 @@ function setBadgeColor(color = '#3f4146' /* gray-600 */) { } observe('terms', async (terms) => { - if ( - !terms || - (__PLATFORM__ === 'opera' && (await shouldShowOperaSerpAlert())) - ) { + if (!terms) { await chromeAction.setBadgeText({ text: '!' }); setBadgeColor('#f13436' /* danger-500 */); } else { @@ -53,6 +50,12 @@ observe('terms', async (terms) => { async function refreshIcon(tabId) { const options = await store.resolve(Options); + if (options.terms && __PLATFORM__ === 'opera') { + shouldSetDangerBadgeForTabId(tabId).then((danger) => { + setBadgeColor(danger ? '#f13436' /* danger-500 */ : undefined); + }); + } + const stats = tabStats.get(tabId); if (!stats) return; diff --git a/extension-manifest-v3/src/notifications/opera-serp.js b/extension-manifest-v3/src/notifications/opera-serp.js index d9f67af3d..f93cdb047 100644 --- a/extension-manifest-v3/src/notifications/opera-serp.js +++ b/extension-manifest-v3/src/notifications/opera-serp.js @@ -77,8 +77,34 @@ export async function showOperaSerpNotification(tabId) { } export async function shouldShowOperaSerpAlert() { - if (await isSerpSupported()) return false; + const options = await store.resolve(Options); + if (options.onboarding.serpShown < NOTIFICATION_SHOW_LIMIT) { + if (await isSerpSupported()) { + store.set(options, { + onboarding: { serpShown: NOTIFICATION_SHOW_LIMIT }, + }); + return false; + } + return true; + } + + return false; +} + +export async function shouldSetDangerBadgeForTabId(tabId) { const options = await store.resolve(Options); - return options.onboarding.serpShown < NOTIFICATION_SHOW_LIMIT; + + if (options.onboarding.serpShown < NOTIFICATION_SHOW_LIMIT) { + try { + await chrome.scripting.insertCSS({ + target: { tabId }, + css: '', + }); + + return false; + } catch (e) { + return true; + } + } }