From 482ffdaee4176135bc479effe0640b6773b6d10b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20T=C3=B3ta?= Date: Mon, 1 Jul 2024 15:30:29 +0300 Subject: [PATCH] AG-33958 Show rules with $permissions modifier in the filtering log Merge in EXTENSIONS/browser-extension from feature/AG-33958 to v4.4 Squashed commit of the following: commit b2b23e6120eb6a41b4a11116b654fff75be74e92 Author: scripthunter7 Date: Fri Jun 28 20:13:53 2024 +0200 add to log store commit 393fe7f26666af488729624549aa90b0849d7081 Merge: f606c6d38 af927a7ba Author: scripthunter7 Date: Fri Jun 28 20:11:11 2024 +0200 Merge branch 'v4.4' into feature/AG-33958 commit f606c6d38dfbacfc19ecd95d8e074ee9c4a21346 Author: scripthunter7 Date: Fri Jun 28 20:01:17 2024 +0200 categorize permission rules commit a31279336075b31292000d348011148b9758c88c Author: scripthunter7 Date: Fri Jun 28 20:00:25 2024 +0200 handle permissions rules at background --- Extension/src/background/api/filtering-log.ts | 1 + .../src/background/services/filtering-log.ts | 51 +++++++++++++++++++ .../components/RequestWizard/utils.js | 2 + .../pages/filtering-log/filteringLogStatus.js | 3 +- .../pages/filtering-log/stores/LogStore.js | 2 + 5 files changed, 58 insertions(+), 1 deletion(-) diff --git a/Extension/src/background/api/filtering-log.ts b/Extension/src/background/api/filtering-log.ts index ebf2a4ee1c..6e2bfef503 100644 --- a/Extension/src/background/api/filtering-log.ts +++ b/Extension/src/background/api/filtering-log.ts @@ -47,6 +47,7 @@ export type FilteringEventRuleData = { allowlistRule?: boolean, allowlistStealthRule?: boolean, cspRule?: boolean, + permissionsRule?: boolean, modifierValue?: string, cookieRule?: boolean, contentRule?: boolean, diff --git a/Extension/src/background/services/filtering-log.ts b/Extension/src/background/services/filtering-log.ts index 7fb3674200..7b2c15c659 100644 --- a/Extension/src/background/services/filtering-log.ts +++ b/Extension/src/background/services/filtering-log.ts @@ -36,6 +36,7 @@ import { StealthAllowlistActionEvent, CspReportBlockedEvent, getDomain, + ApplyPermissionsRuleEvent, } from '@adguard/tswebextension'; import { messageHandler } from '../message-handler'; @@ -115,6 +116,11 @@ export class FilteringLogService { FilteringLogService.onApplyCspRule, ); + defaultFilteringLog.addEventListener( + FilteringEventType.ApplyPermissionsRule, + FilteringLogService.onApplyPermissionsRule, + ); + defaultFilteringLog.addEventListener( FilteringEventType.ApplyCosmeticRule, FilteringLogService.onApplyCosmeticRule, @@ -288,6 +294,51 @@ export class FilteringLogService { } } + /** + * Records the application of the rule with $permissions modifier. + * + * @param ruleEvent Item of {@link ApplyPermissionsRuleEvent}. + * @param ruleEvent.data Data for this event. + */ + private static async onApplyPermissionsRule({ data }: ApplyPermissionsRuleEvent): Promise { + const { + tabId, + filterId, + ruleIndex, + isAllowlist, + isImportant, + isDocumentLevel, + isCsp, + isCookie, + advancedModifier, + frameDomain, + ...eventData + } = data; + + filteringLogApi.addEventData(tabId, { + ...eventData, + // TODO: Fix `string | null` vs `string | undefined` inconsistency + frameDomain: frameDomain ?? undefined, + requestDomain: getDomain(eventData.requestUrl) ?? undefined, + requestRule: { + filterId, + ruleIndex, + allowlistRule: isAllowlist, + isImportant, + documentLevelRule: isDocumentLevel, + isStealthModeRule: filterId === AntiBannerFiltersId.StealthModeFilterId, + cspRule: isCsp, + permissionsRule: true, + cookieRule: isCookie, + modifierValue: advancedModifier ?? undefined, + }, + }); + + if (!SettingsApi.getSetting(SettingOption.DisableCollectHits)) { + HitStatsApi.addRuleHit(filterId, ruleIndex); + } + } + /** * Records the application of the rule with $removeparam modifier. * diff --git a/Extension/src/pages/filtering-log/components/RequestWizard/utils.js b/Extension/src/pages/filtering-log/components/RequestWizard/utils.js index a22c7a1b68..2046713a35 100644 --- a/Extension/src/pages/filtering-log/components/RequestWizard/utils.js +++ b/Extension/src/pages/filtering-log/components/RequestWizard/utils.js @@ -156,6 +156,8 @@ export const getRequestEventType = (event) => { return 'WebRTC'; case RequestType.Csp: return 'CSP'; + case RequestType.PermissionsPolicy: + return 'Permissions Policy'; case RequestType.CspReport: return 'CSP report'; case RequestType.Cookie: diff --git a/Extension/src/pages/filtering-log/filteringLogStatus.js b/Extension/src/pages/filtering-log/filteringLogStatus.js index e4fd8b58b4..1119549a7a 100644 --- a/Extension/src/pages/filtering-log/filteringLogStatus.js +++ b/Extension/src/pages/filtering-log/filteringLogStatus.js @@ -75,6 +75,7 @@ export const getStatusMode = (event) => { scriptRule, cookieRule, cspRule, + permissionsRule, } = requestRule; if (allowlistRule) { @@ -89,7 +90,7 @@ export const getStatusMode = (event) => { } else { mode = StatusMode.BLOCKED; } - } else if (cspRule) { + } else if (cspRule || permissionsRule) { mode = StatusMode.MODIFIED; } else { mode = StatusMode.BLOCKED; diff --git a/Extension/src/pages/filtering-log/stores/LogStore.js b/Extension/src/pages/filtering-log/stores/LogStore.js index cc534f397c..989298c168 100644 --- a/Extension/src/pages/filtering-log/stores/LogStore.js +++ b/Extension/src/pages/filtering-log/stores/LogStore.js @@ -164,6 +164,7 @@ const initEventTypesFilters = { RequestType.Font, RequestType.Websocket, RequestType.Csp, + RequestType.PermissionsPolicy, RequestType.Cookie, RequestType.Ping, RequestType.WebRTC, @@ -429,6 +430,7 @@ class LogStore { || filteringEvent.requestRule?.cssRule || filteringEvent.requestRule?.scriptRule || filteringEvent.requestRule?.cspRule + || filteringEvent.requestRule?.permissionsRule || filteringEvent.replaceRules || filteringEvent.removeParam || filteringEvent.removeHeader);