summaryrefslogtreecommitdiff
path: root/data/extensions/jsr@javascriptrestrictor/document_start.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/jsr@javascriptrestrictor/document_start.js')
-rw-r--r--data/extensions/jsr@javascriptrestrictor/document_start.js64
1 files changed, 26 insertions, 38 deletions
diff --git a/data/extensions/jsr@javascriptrestrictor/document_start.js b/data/extensions/jsr@javascriptrestrictor/document_start.js
index 22f201e..c78aa73 100644
--- a/data/extensions/jsr@javascriptrestrictor/document_start.js
+++ b/data/extensions/jsr@javascriptrestrictor/document_start.js
@@ -26,46 +26,30 @@
var wrappersPort;
var pageConfiguration = null;
-function configureInjection({currentLevel, fpdWrappers, fpdTrackCallers, domainHash}) {
+
+function wrapWindow(currentLevel, fpdWrappers, wrappersConf) {
+ const code = fp_assemble_injection(currentLevel, fpdWrappers, `
+ init(${JSON.stringify(wrappersConf)});
+ `);
+ return patchWindow(code);
+}
+
+function configureInjection({currentLevel, fpdWrappers, fpdTrackCallers, domainHash, incognitoHash, portId}) {
if (pageConfiguration) return; // one shot
pageConfiguration = {currentLevel};
- if(browser.extension.inIncognitoContext){
- // Redefine the domainHash for incognito context:
- // Compute the SHA256 hash of the original hash so that the incognito hash is:
- // * significantly different to the original domainHash,
- // * computationally difficult to revert,
- // * the same for all incognito windows (for the same domain).
- var hash = sha256.create();
- hash.update(JSON.stringify(domainHash));
- domainHash = hash.hex();
- }
- // Append argument reporting setting to JSS wrapper definitions
- fp_append_reporting_to_jss_wrappers(fpdWrappers);
- // Generate wrapping code
- var code = wrap_code(currentLevel.wrappers, fpdTrackCallers);
- // Generate FPD wrapping code
- if (fpdWrappers) {
- if (!code) {
- code = fp_generate_wrapping_code(fpdWrappers, fpdTrackCallers);
- }
- else {
- code = fp_update_wrapping_code(code, currentLevel.wrappers, fpdWrappers, fpdTrackCallers);
- }
+ if (browser.extension.inIncognitoContext) {
+ domainHash = incognitoHash;
}
- // 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);
- }
-
- var aleaCode = `(() => {
- var domainHash = ${JSON.stringify(domainHash)};
- ${crc16}
- ${alea}
- var prng = alea(domainHash); // Do not use this in wrappers, create your own prng to generate repeatable sequences
- ${code}
- })()`;
try {
- wrappersPort = patchWindow(aleaCode);
+ const wrappersConf = {
+ fpdTrackCallers,
+ domainHash,
+ };
+ wrappersPort = portId ? patchWindow({portId}) : wrapWindow(currentLevel, fpdWrappers, wrappersConf);
+
+ // initialize in case the userScript API already injected
+ wrappersPort.postMessage(wrappersConf);
+
wrappersPort.onMessage = msg => {
if (msg.wrapperName) {
let {wrapperName, wrapperType, wrapperArgs, stack} = msg;
@@ -78,10 +62,14 @@ function configureInjection({currentLevel, fpdWrappers, fpdTrackCallers, domainH
stack: stack,
});
}
+ if (msg.init) {
+ // initialize on late demand
+ return wrappersConf;
+ }
}
return true;
} catch (e) {
- console.error(e, `Trying to run\n${aleaCode}`)
+ console.error(e, "Trying to initialize wrappers.");
}
return false;
}
@@ -94,7 +82,7 @@ function configureInjection({currentLevel, fpdWrappers, fpdTrackCallers, domainH
*/
if ("configuration" in window) {
configureInjection(configuration);
-} else {
+} else if ("sendSyncMessage" in browser.runtime) { // not in mv3 chrome
/// Get current level configuration from the background script
configureInjection(browser.runtime.sendSyncMessage({
message: "get wrapping for URL",