From 4f0d1301ab48e62afb3424609834c6353a0a5eee Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sat, 3 Aug 2024 20:09:21 -0400 Subject: [PATCH] Improve `trusted-replace-node-text` scriptlet Related discussion: https://github.com/brave/adblock-resources/pull/194 --- assets/resources/scriptlets.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index 6e9dcd60ea4b8..c95412867332b 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -730,6 +730,18 @@ function replaceNodeTextFn( safe.uboLog(logPrefix, 'Quitting'); } }; + const textContentFactory = (( ) => { + const out = { createScript: s => s }; + const { trustedTypes: tt } = self; + if ( tt instanceof Object ) { + if ( typeof tt.getPropertyType === 'function' ) { + if ( tt.getPropertyType('script', 'textContent') === 'TrustedScript' ) { + return tt.createPolicy('uBO', out); + } + } + } + return out; + })(); let sedCount = extraArgs.sedCount || 0; const handleNode = node => { const before = node.textContent; @@ -747,7 +759,9 @@ function replaceNodeTextFn( const after = pattern !== '' ? before.replace(rePattern, replacement) : replacement; - node.textContent = after; + node.textContent = node.nodeName === 'SCRIPT' + ? textContentFactory.createScript(after) + : after; if ( safe.logLevel > 1 ) { safe.uboLog(logPrefix, `Text before:\n${before.trim()}`); }