From eb6494eca5818645b646cced6806e68210250add Mon Sep 17 00:00:00 2001 From: kkapsner Date: Wed, 1 Feb 2017 10:49:33 +0100 Subject: [PATCH] Shared persistent rnd between processes. Fixes #103. --- lib/main.js | 14 ++++++++++++++ lib/randomSupplies.js | 19 +++++++++++++++---- releaseNotes.txt | 1 + 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/lib/main.js b/lib/main.js index acaa7f0..7865b1f 100644 --- a/lib/main.js +++ b/lib/main.js @@ -38,6 +38,20 @@ processes.port.emit("canvasBlocker-unload"); }); + // persistent rng + const persistentRnd = Object.create(null); + processes.port.on("canvasBlocker-new-domain-rnd", function(process, data){ + processes.port.emit("canvasBlocker-set-domain-rnd", data); + persistentRnd[data.domain] = data.rnd; + }); + processes.on("attach", function(process){ + if (process.isRemote){ + for (var name in persistentRnd){ + process.port.emit("canvasBlocker-set-domain-rnd", {domain: name, rnd: persistentRnd[name]}); + } + } + }); + // show release notes var data = require("sdk/self").data; preferences.on("showReleaseNotes", function(){ diff --git a/lib/randomSupplies.js b/lib/randomSupplies.js index c7ba96c..344519c 100644 --- a/lib/randomSupplies.js +++ b/lib/randomSupplies.js @@ -16,16 +16,27 @@ } return window.location.host; } - const persistentRnd = Object.create(null); - exports.persistent = { - getRng: function(length, window){ + const getPersistentRnd = (function(){ + const {process} = require("sdk/remote/child"); + process.port.on("canvasBlocker-set-domain-rnd", function(process, {domain, rnd}){ + persistentRnd[domain] = new Uint8Array(rnd); + }); + + const persistentRnd = Object.create(null); + return function getPersistentRnd(window){ var domain = getDomain(window); if (!persistentRnd[domain]){ // create the (sub-)domains random numbers if not existing persistentRnd[domain] = new Uint8Array(128); window.crypto.getRandomValues(persistentRnd[domain]); + process.port.emit("canvasBlocker-new-domain-rnd", {domain, rnd: persistentRnd[domain]}); } - var bitSet = persistentRnd[domain]; + return persistentRnd[domain]; + } + }()); + exports.persistent = { + getRng: function(length, window){ + var bitSet = getPersistentRnd(window); return function(value, i){ // use the last 7 bits from the value for the index of the diff --git a/releaseNotes.txt b/releaseNotes.txt index 5a07149..545e66a 100644 --- a/releaseNotes.txt +++ b/releaseNotes.txt @@ -12,6 +12,7 @@ Version 0.3.6: - removed error message when notification can not be closed - about:blank pages are treated with respect to the opening page - removed memory leak + - persistent rnd same for all tabs/windows with e10s enabled Version 0.3.5 new features: