summaryrefslogtreecommitdiff
path: root/data/extensions/jsr@javascriptrestrictor/fp_code_builders.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/jsr@javascriptrestrictor/fp_code_builders.js')
-rw-r--r--data/extensions/jsr@javascriptrestrictor/fp_code_builders.js54
1 files changed, 48 insertions, 6 deletions
diff --git a/data/extensions/jsr@javascriptrestrictor/fp_code_builders.js b/data/extensions/jsr@javascriptrestrictor/fp_code_builders.js
index 0d98e9f..e906d46 100644
--- a/data/extensions/jsr@javascriptrestrictor/fp_code_builders.js
+++ b/data/extensions/jsr@javascriptrestrictor/fp_code_builders.js
@@ -109,7 +109,7 @@ var additional_wrappers = [
*
* \returns Injectable code created from FPD wrappers.
*/
-function fp_generate_from_wrappers(fpd_wrappers, fpdTrackCallers) {
+function fp_generate_from_wrappers(fpd_wrappers) {
// define wrapper for each FPD endpoint (using default JSS definition of wrappers)
let tmp_build_wrapping_code = {};
for (let wrap_item of fpd_wrappers) {
@@ -134,7 +134,7 @@ function fp_generate_from_wrappers(fpd_wrappers, fpdTrackCallers) {
let fp_wrapped_codes = {};
for (let build_item in tmp_build_wrapping_code) {
try {
- fp_wrapped_codes[build_item] = build_code(fpdTrackCallers, tmp_build_wrapping_code[build_item]);
+ fp_wrapped_codes[build_item] = build_code(tmp_build_wrapping_code[build_item]);
} catch (e) {
console.error(e);
fp_wrapped_codes[build_item] = "";
@@ -152,10 +152,10 @@ function fp_generate_from_wrappers(fpd_wrappers, fpdTrackCallers) {
*
* \returns Modified injectable code that also contains FPD wrapping code.
*/
-function fp_update_wrapping_code(code, jss_wrappers, fpd_wrappers, fpdTrackCallers) {
+function fp_update_wrapping_code(code, jss_wrappers, fpd_wrappers) {
const jss_wrapper_resources = jss_wrappers.map(x => x[0]);
const fpd_wrappers_filtered = fpd_wrappers.filter(w => !jss_wrapper_resources.includes(w[0]));
- const fpd_wrapped_codes = fp_generate_from_wrappers(fpd_wrappers_filtered, fpdTrackCallers);
+ const fpd_wrapped_codes = fp_generate_from_wrappers(fpd_wrappers_filtered);
const fpd_code = joinWrappingCode(Object.values(fpd_wrapped_codes));
return code.replace("// FPD_S\n", `// FPD_S\n${additional_wrappers_init_code} ${fpd_code}`);
}
@@ -167,8 +167,8 @@ function fp_update_wrapping_code(code, jss_wrappers, fpd_wrappers, fpdTrackCalle
*
* \returns Injectable code containing only FPD wrapping code.
*/
-function fp_generate_wrapping_code(fpd_wrappers, fpdTrackCallers) {
- let fpd_wrapped_codes = fp_generate_from_wrappers(fpd_wrappers, fpdTrackCallers);
+function fp_generate_wrapping_code(fpd_wrappers) {
+ let fpd_wrapped_codes = fp_generate_from_wrappers(fpd_wrappers);
return generate_code("// FPD_S\n" + additional_wrappers_init_code + joinWrappingCode(Object.values(fpd_wrapped_codes)) + "\n// FPD_E");
}
@@ -297,3 +297,45 @@ function fp_append_reporting_to_jss_wrappers(fpd_wrappers) {
}
}
}
+
+function fp_assemble_injection(currentLevel, fpdWrappers, initializer = '') {
+ // Append argument reporting setting to JSS wrapper definitions
+ fp_append_reporting_to_jss_wrappers(fpdWrappers);
+ // Generate wrapping code
+ let code = wrap_code(currentLevel.wrappers);
+ // Generate FPD wrapping code
+ if (fpdWrappers) {
+ if (!code) {
+ code = fp_generate_wrapping_code(fpdWrappers);
+ }
+ else {
+ code = fp_update_wrapping_code(code, currentLevel.wrappers, fpdWrappers);
+ }
+ }
+ // Insert farbling WASM module into wrapped code if enabled, only when farbling is actually used
+ if (currentLevel.wasm && (currentLevel.audiobuffer === 1 || currentLevel.htmlcanvaselement === 1)) {
+ code = insert_wasm_code(code);
+ }
+ initializer ||= `
+ {
+ env.port.onMessage = msg => {
+ return msg.domainHash && init(msg);
+ };
+ let conf = env.port.postMessage({init: true});
+ if (conf?.domainHash) init(conf);
+ }
+ `;
+ var injected_code = `(() => {
+ let inited = false;
+ const init = ({domainHash, fpdTrackCallers}) => {
+ if (inited) return;
+ inited = true;
+ ${crc16}
+ ${alea}
+ var prng = alea(domainHash); // Do not use this in wrappers, create your own prng to generate repeatable sequences
+ ${code}
+ };
+ ${initializer}
+ })()`;
+ return injected_code;
+}