1
0
Fork 0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2025-07-03 03:56:26 +02:00

Added setting "ignoreFrequentColors"

This commit is contained in:
kkapsner 2017-08-07 21:03:34 +02:00
parent 9da251b14d
commit 1733be23f2
8 changed files with 131 additions and 7 deletions

View file

@ -14,6 +14,8 @@
scope = window.scope.modifiedAPI;
}
const colorStatistics = require("./colorStatistics");
// let Cu = require("chrome").Cu;
var randomSupply = null;
@ -52,7 +54,7 @@
};
}
function getFakeCanvas(window, original){
function getFakeCanvas(window, original, prefs){
try {
// original may not be a canvas -> we must not leak an error
var context = getContext(window, original);
@ -61,6 +63,11 @@
var l = desc.length;
var ignoredColors = {};
if (prefs("ignoreFrequentColors")){
var statistic = colorStatistics.compute(source);
ignoredColors = statistic.getMaxColors(prefs("ignoreFrequentColors"));
}
var rng = randomSupply.getPixelRng(l, window, ignoredColors);
for (var i = 0; i < l; i += 4){
@ -175,7 +182,7 @@
return function toDataURL(){
if (canvasSizeShouldBeFaked(this, prefs)){
notify.call(this, "fakedReadout");
return original.apply(getFakeCanvas(window, this), window.Array.from(arguments));
return original.apply(getFakeCanvas(window, this, prefs), window.Array.from(arguments));
}
else {
return original.apply(this, window.Array.from(arguments));
@ -201,7 +208,7 @@
return function toBlob(callback){
if (canvasSizeShouldBeFaked(this, prefs)){
notify.call(this, "fakedReadout");
return original.apply(getFakeCanvas(window, this), window.Array.from(arguments));
return original.apply(getFakeCanvas(window, this, prefs), window.Array.from(arguments));
}
else {
return original.apply(this, window.Array.from(arguments));
@ -228,7 +235,7 @@
return function mozGetAsFile(callback){
if (canvasSizeShouldBeFaked(this, prefs)){
notify.call(this, "fakedReadout");
return original.apply(getFakeCanvas(window, this), window.Array.from(arguments));
return original.apply(getFakeCanvas(window, this, prefs), window.Array.from(arguments));
}
else {
return original.apply(this, window.Array.from(arguments));
@ -257,11 +264,11 @@
var fakeCanvas;
var context = this;
if (this && this.canvas) {
fakeCanvas = getFakeCanvas(window, this.canvas);
fakeCanvas = getFakeCanvas(window, this.canvas, prefs);
}
if (fakeCanvas && fakeCanvas !== this.canvas){
context = window.HTMLCanvasElement.prototype.getContext.call(
getFakeCanvas(window, this.canvas),
fakeCanvas,
"2d"
);
}
@ -349,7 +356,12 @@
var xPixels = pixels;
var ret = original.apply(this, window.Array.from(arguments));
var l = xPixels.length;
var rng = randomSupply.getPixelRng(l, window, {});
var ignoredColors = {};
if (prefs("ignoreFrequentColors")){
var statistic = colorStatistics.compute(pixels);
ignoredColors = statistic.getMaxColors(prefs("ignoreFrequentColors"));
}
var rng = randomSupply.getPixelRng(l, window, ignoredColors);
for (var i = 0; i < l; i += 4){
var [r, g, b, a] = rng(