mirror of https://github.com/gorhill/uBlock.git
[mv3] Honor scriptlets' target world in Firefox
When the target world of a scriptlet is the ISOLATED one, skip Blob-based injection in Firefox, as the current world is always the ISOLATED one. This should make ISOLATED world-based scriptlets more reliable (i.e. execute sooner) in Firefox.
This commit is contained in:
parent
607bba6eaf
commit
6af4494946
|
@ -59,6 +59,7 @@ export function init() {
|
||||||
const entry = {
|
const entry = {
|
||||||
name: fn.name,
|
name: fn.name,
|
||||||
code: fn.toString(),
|
code: fn.toString(),
|
||||||
|
world: scriptlet.world || 'MAIN',
|
||||||
dependencies: scriptlet.dependencies,
|
dependencies: scriptlet.dependencies,
|
||||||
requiresTrust: scriptlet.requiresTrust === true,
|
requiresTrust: scriptlet.requiresTrust === true,
|
||||||
};
|
};
|
||||||
|
@ -96,6 +97,7 @@ export function compile(details) {
|
||||||
scriptletFiles.set(scriptletToken, {
|
scriptletFiles.set(scriptletToken, {
|
||||||
name: resourceEntry.name,
|
name: resourceEntry.name,
|
||||||
code: createScriptletCoreCode(scriptletToken),
|
code: createScriptletCoreCode(scriptletToken),
|
||||||
|
world: resourceEntry.world,
|
||||||
args: new Map(),
|
args: new Map(),
|
||||||
hostnames: new Map(),
|
hostnames: new Map(),
|
||||||
entities: new Map(),
|
entities: new Map(),
|
||||||
|
@ -165,6 +167,7 @@ export async function commit(rulesetId, path, writeFn) {
|
||||||
);
|
);
|
||||||
content = safeReplace(content, /\$rulesetId\$/, rulesetId, 0);
|
content = safeReplace(content, /\$rulesetId\$/, rulesetId, 0);
|
||||||
content = safeReplace(content, /\$scriptletName\$/, details.name, 0);
|
content = safeReplace(content, /\$scriptletName\$/, details.name, 0);
|
||||||
|
content = safeReplace(content, '$world$', details.world);
|
||||||
content = safeReplace(content,
|
content = safeReplace(content,
|
||||||
'self.$argsList$',
|
'self.$argsList$',
|
||||||
JSON.stringify(Array.from(details.args.keys()).map(a => JSON.parse(a)))
|
JSON.stringify(Array.from(details.args.keys()).map(a => JSON.parse(a)))
|
||||||
|
|
|
@ -132,8 +132,10 @@ argsList.length = 0;
|
||||||
// 'MAIN' world not yet supported in Firefox, so we inject the code into
|
// 'MAIN' world not yet supported in Firefox, so we inject the code into
|
||||||
// 'MAIN' ourself when environment in Firefox.
|
// 'MAIN' ourself when environment in Firefox.
|
||||||
|
|
||||||
|
const targetWorld = '$world$';
|
||||||
|
|
||||||
// Not Firefox
|
// Not Firefox
|
||||||
if ( typeof wrappedJSObject !== 'object' ) {
|
if ( typeof wrappedJSObject !== 'object' || targetWorld === 'ISOLATED' ) {
|
||||||
return uBOL_$scriptletName$();
|
return uBOL_$scriptletName$();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue