Fix verbose mode not applying to newly injected scriptlets

Related commit:
869a653fdf
This commit is contained in:
Raymond Hill 2024-01-25 13:30:41 -05:00
parent aa56fe1224
commit 49a6dc868f
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
3 changed files with 33 additions and 19 deletions

View File

@ -158,7 +158,7 @@ function safeSelf() {
};
if ( scriptletGlobals.bcSecret !== undefined ) {
const bc = new self.BroadcastChannel(scriptletGlobals.bcSecret);
safe.logLevel = 1;
safe.logLevel = scriptletGlobals.logLevel || 1;
safe.sendToLogger = (type, ...args) => {
if ( args.length === 0 ) { return; }
const text = `[${document.location.hostname || document.location.href}]${args.join(' ')}`;
@ -692,7 +692,10 @@ function replaceNodeTextFn(
? before.replace(rePattern, replacement)
: replacement;
node.textContent = after;
safe.uboLog(logPrefix, `Replace result:\n${after.trim()}`);
if ( safe.logLevel > 1 ) {
safe.uboLog(logPrefix, `Text before:\n${before.trim()}`);
}
safe.uboLog(logPrefix, `Text after:\n${after.trim()}`);
return sedCount === 0 || (sedCount -= 1) !== 0;
};
const handleMutations = mutations => {

View File

@ -21,7 +21,7 @@
'use strict';
import webext from './webext.js';
import { broadcast } from './broadcast.js';
import { hostnameFromURI } from './uri-utils.js';
import { i18n, i18n$ } from './i18n.js';
import { dom, qs$, qsa$ } from './dom.js';
@ -3043,20 +3043,7 @@ dom.on('#pause', 'click', pauseNetInspector);
dom.on('#logLevel', 'click', ev => {
const level = dom.cl.toggle(ev.currentTarget, 'active') ? 2 : 1;
webext.tabs.query({
discarded: false,
url: [ 'http://*/*', 'https://*/*' ],
}).then(tabs => {
for ( const tab of tabs ) {
const { status } = tab;
if ( status !== 'loading' && status !== 'complete' ) { continue; }
webext.tabs.executeScript(tab.id, {
allFrames: true,
file: `/js/scriptlets/scriptlet-loglevel-${level}.js`,
matchAboutBlank: true,
});
}
});
broadcast({ what: 'loggerLevelChanged', level });
});
dom.on('#netInspector', 'copy', ev => {

View File

@ -210,6 +210,7 @@ export class ScriptletFilteringEngineEx extends ScriptletFilteringEngine {
this.warSecret = undefined;
this.scriptletCache = new MRUCache(32);
this.isDevBuild = undefined;
this.logLevel = 1;
this.bc = onBroadcast(msg => {
switch ( msg.what ) {
case 'filteringBehaviorChanged': {
@ -226,8 +227,25 @@ export class ScriptletFilteringEngineEx extends ScriptletFilteringEngine {
/* fall through */
case 'loggerEnabled':
case 'loggerDisabled':
this.scriptletCache.reset();
contentScriptRegisterer.reset();
this.clearCache();
break;
case 'loggerLevelChanged':
this.logLevel = msg.level;
vAPI.tabs.query({
discarded: false,
url: [ 'http://*/*', 'https://*/*' ],
}).then(tabs => {
for ( const tab of tabs ) {
const { status } = tab;
if ( status !== 'loading' && status !== 'complete' ) { continue; }
vAPI.tabs.executeScript(tab.id, {
allFrames: true,
file: `/js/scriptlets/scriptlet-loglevel-${this.logLevel}.js`,
matchAboutBlank: true,
});
}
});
this.clearCache();
break;
}
});
@ -247,6 +265,11 @@ export class ScriptletFilteringEngineEx extends ScriptletFilteringEngine {
contentScriptRegisterer.reset();
}
clearCache() {
this.scriptletCache.reset();
contentScriptRegisterer.reset();
}
retrieve(request) {
const { hostname } = request;
@ -289,6 +312,7 @@ export class ScriptletFilteringEngineEx extends ScriptletFilteringEngine {
};
if ( logger.enabled ) {
options.scriptletGlobals.bcSecret = bcSecret;
options.scriptletGlobals.logLevel = this.logLevel;
}
scriptletDetails = super.retrieve(request, options);