From e1f2c6f88d87c91faa5e3864adc0d0b361dd303e Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 30 May 2025 18:15:25 -0400 Subject: [PATCH] [mv3] Code review --- platform/mv3/extension/js/develop.js | 2 - platform/mv3/extension/js/dnr-parser.js | 106 ++++++------------------ platform/mv3/safari/ext-compat.js | 19 ++++- 3 files changed, 39 insertions(+), 88 deletions(-) diff --git a/platform/mv3/extension/js/develop.js b/platform/mv3/extension/js/develop.js index f4b1c8311..e79580b15 100644 --- a/platform/mv3/extension/js/develop.js +++ b/platform/mv3/extension/js/develop.js @@ -257,8 +257,6 @@ function getAutocompleteCandidates(from) { { token: 'urlFilter:', after: ' ' }, { token: 'initiatorDomains:', after: '\n - ' }, { token: 'excludedInitiatorDomains:', after: '\n - ' }, - { token: 'domains:', after: '\n - ' }, - { token: 'excludedDomains:', after: '\n - ' }, { token: 'requestDomains:', after: '\n - ' }, { token: 'excludedRequestDomains:', after: '\n - ' }, { token: 'resourceTypes:', after: '\n - ' }, diff --git a/platform/mv3/extension/js/dnr-parser.js b/platform/mv3/extension/js/dnr-parser.js index 68d243df0..a852a5f03 100644 --- a/platform/mv3/extension/js/dnr-parser.js +++ b/platform/mv3/extension/js/dnr-parser.js @@ -89,14 +89,10 @@ const perScopeParsers = { const { key, val } = node; switch ( key ) { case 'action': - if ( val !== undefined ) { return false; } - rule.action = {}; - scope.push('action'); - break; case 'condition': if ( val !== undefined ) { return false; } - rule.condition = {}; - scope.push('condition'); + rule[key] = {}; + scope.push(key); break; case 'priority': { const n = parseInt(val, 10); @@ -121,12 +117,9 @@ const perScopeParsers = { scope.push('redirect'); break; case 'requestHeaders': - rule.action.requestHeaders = []; - scope.push('requestHeaders'); - break; case 'responseHeaders': - rule.action.responseHeaders = []; - scope.push('responseHeaders'); + rule.action[key] = []; + scope.push(key); break; default: return false; @@ -137,18 +130,14 @@ const perScopeParsers = { const { key, val } = node; switch ( key ) { case 'extensionPath': - rule.action.redirect.extensionPath = val; - break; case 'regexSubstitution': - rule.action.redirect.regexSubstitution = val; + case 'url': + rule.action.redirect[key] = val; break; case 'transform': rule.action.redirect.transform = {}; scope.push('transform'); break; - case 'url': - rule.action.redirect.url = val; - break; default: return false; } @@ -181,12 +170,9 @@ const perScopeParsers = { if ( val !== undefined ) { return false; } switch ( key ) { case 'addOrReplaceParams': - rule.action.redirect.transform.queryTransform.addOrReplaceParams = []; - scope.push('addOrReplaceParams'); - break; case 'removeParams': - rule.action.redirect.transform.queryTransform.removeParams = []; - scope.push('removeParams'); + rule.action.redirect.transform.queryTransform[key] = []; + scope.push(key); break; default: return false; @@ -205,10 +191,8 @@ const perScopeParsers = { const item = rule.action.redirect.transform.queryTransform.addOrReplaceParams.at(-1); switch ( key ) { case 'key': - item.key = val; - break; case 'value': - item.value = val; + item[key] = val; break; case 'replaceOnly': if ( validBoolValues.includes(val) === false ) { return false; } @@ -235,10 +219,8 @@ const perScopeParsers = { const item = rule.action.requestHeaders.at(-1); switch ( key ) { case 'header': - item.header = val; - break; case 'value': - item.value = val; + item[key] = val; break; case 'operation': if ( validHeaderOpValues.includes(val) === false ) { return false; } @@ -260,10 +242,8 @@ const perScopeParsers = { const item = rule.action.responseHeaders.at(-1); switch ( key ) { case 'header': - item.header = val; - break; case 'value': - item.value = val; + item[key] = val; break; case 'operation': if ( validHeaderOpValues.includes(val) === false ) { return false; } @@ -286,55 +266,23 @@ const perScopeParsers = { rule.condition.isUrlFilterCaseSensitive = val === 'true'; break; case 'regexFilter': - if ( val === undefined ) { return false; } - rule.condition.regexFilter = val; - break; case 'urlFilter': if ( val === undefined ) { return false; } - rule.condition.urlFilter = val; + rule.condition[key] = val; break; case 'initiatorDomains': - case 'domains': - rule.condition[key] = []; - scope.push(key); - break; case 'excludedInitiatorDomains': - case 'excludedDomains': + case 'requestDomains': + case 'excludedRequestDomains': + case 'resourceTypes': + case 'excludedResourceTypes': + case 'requestMethods': + case 'excludedRequestMethods': + case 'responseHeaders': + case 'excludedResponseHeaders': rule.condition[key] = []; scope.push(key); break; - case 'requestDomains': - rule.condition.requestDomains = []; - scope.push('requestDomains'); - break; - case 'excludedRequestDomains': - rule.condition.excludedRequestDomains = []; - scope.push('excludedRequestDomains'); - break; - case 'resourceTypes': - rule.condition.resourceTypes = []; - scope.push('resourceTypes'); - break; - case 'excludedResourceTypes': - rule.condition.excludedResourceTypes = []; - scope.push('excludedResourceTypes'); - break; - case 'requestMethods': - rule.condition.requestMethods = []; - scope.push('requestMethods'); - break; - case 'excludedRequestMethods': - rule.condition.excludedRequestMethods = []; - scope.push('excludedRequestMethods'); - break; - case 'responseHeaders': - rule.condition.responseHeaders = []; - scope.push('responseHeaders'); - break; - case 'excludedResponseHeaders': - rule.condition.excludedResponseHeaders = []; - scope.push('excludedResponseHeaders'); - break; default: return false; } @@ -408,12 +356,9 @@ const perScopeParsers = { item.header = node.val; break; case 'values': - item.values = []; - scope.push('values'); - break; case 'excludedValues': - item.excludedValues = []; - scope.push('excludedValues'); + item[node.key] = []; + scope.push(node.key); break; default: return false; @@ -446,12 +391,9 @@ const perScopeParsers = { item.header = node.val; break; case 'values': - item.values = []; - scope.push('values'); - break; case 'excludedValues': - item.excludedValues = []; - scope.push('excludedValues'); + item[node.key] = []; + scope.push(node.key); break; default: return false; diff --git a/platform/mv3/safari/ext-compat.js b/platform/mv3/safari/ext-compat.js index 0d56155e2..a88c20c7c 100644 --- a/platform/mv3/safari/ext-compat.js +++ b/platform/mv3/safari/ext-compat.js @@ -54,10 +54,21 @@ const prepareUpdateRules = optionsBefore => { const addRulesAfter = addRules?.filter(isSupportedRule); if ( Boolean(addRulesAfter?.length || removeRuleIds?.length) === false ) { return; } addRulesAfter?.forEach(r => { - if ( r.action.redirect?.regexSubstitution === undefined ) { return; } - if ( r.condition.requestDomains === undefined ) { return; } - r.condition.domains = r.condition.requestDomains; - delete r.condition.requestDomains; + if ( r.action?.redirect?.regexSubstitution ) { + if ( r.condition?.requestDomains ) { + r.condition.domains = r.condition.requestDomains; + delete r.condition.requestDomains; + return; + } + } + if ( r.condition?.initiatorDomains ) { + r.condition.domains = r.condition.initiatorDomains; + delete r.condition.initiatorDomains; + } + if ( r.condition?.excludedInitiatorDomains ) { + r.condition.excludedDomains = r.condition.excludedInitiatorDomains; + delete r.condition.excludedInitiatorDomains; + } }); const optionsAfter = {}; if ( addRulesAfter?.length ) { optionsAfter.addRules = addRulesAfter; }