mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2024-12-22 21:00:23 +01:00
parent
2c141277e8
commit
2e91f85d8f
@ -84,6 +84,9 @@
|
|||||||
const forEachFunction = function(windowToProcess, callback){
|
const forEachFunction = function(windowToProcess, callback){
|
||||||
apiNames.forEach(function(name){
|
apiNames.forEach(function(name){
|
||||||
const changedFunction = changedFunctions[name];
|
const changedFunction = changedFunctions[name];
|
||||||
|
if (changedFunction.name){
|
||||||
|
name = changedFunction.name;
|
||||||
|
}
|
||||||
getAllFunctionObjects(windowToProcess, changedFunction).forEach(function(object){
|
getAllFunctionObjects(windowToProcess, changedFunction).forEach(function(object){
|
||||||
if (object){
|
if (object){
|
||||||
callback({name, object: object, changedFunction});
|
callback({name, object: object, changedFunction});
|
||||||
@ -317,6 +320,9 @@
|
|||||||
function interceptFunctions(windowToProcess, siteStatus, {checkStack, ask, notify, prefs}){
|
function interceptFunctions(windowToProcess, siteStatus, {checkStack, ask, notify, prefs}){
|
||||||
apiNames.forEach(function(name){
|
apiNames.forEach(function(name){
|
||||||
const changedFunction = changedFunctions[name];
|
const changedFunction = changedFunctions[name];
|
||||||
|
if (changedFunction.name){
|
||||||
|
name = changedFunction.name;
|
||||||
|
}
|
||||||
const functionStatus = changedFunction.getStatus(undefined, siteStatus, prefs);
|
const functionStatus = changedFunction.getStatus(undefined, siteStatus, prefs);
|
||||||
logging.verbose("status for", name, ":", functionStatus);
|
logging.verbose("status for", name, ":", functionStatus);
|
||||||
if (!functionStatus.active) return;
|
if (!functionStatus.active) return;
|
||||||
|
@ -244,6 +244,34 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function offscreenToBlobCallback(args, check){
|
||||||
|
const {prefs, notify, window, original} = check;
|
||||||
|
if (canvasSizeShouldBeFaked(this, prefs)){
|
||||||
|
try {
|
||||||
|
const options = args[0];
|
||||||
|
const canvas = window.document.createElement("canvas");
|
||||||
|
canvas.width = this.width;
|
||||||
|
canvas.height = this.height;
|
||||||
|
const context = canvas.getContext("2d");
|
||||||
|
context.drawImage(this.transferToImageBitmap(), 0, 0);
|
||||||
|
const fakeCanvas = getFakeCanvas(window, canvas, prefs);
|
||||||
|
if (fakeCanvas !== canvas){
|
||||||
|
notify("fakedReadout");
|
||||||
|
}
|
||||||
|
return new window.Promise(function(resolve){
|
||||||
|
fakeCanvas.toBlob(resolve, options && options.type, options && options.quality);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (error){
|
||||||
|
logging.warning("Error while faking:", error);
|
||||||
|
return original.call(this, ...args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return original.call(this, ...args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const isPointCache = Object.create(null);
|
const isPointCache = Object.create(null);
|
||||||
function getIsPointCacheIndex(x, y, values){
|
function getIsPointCacheIndex(x, y, values){
|
||||||
return String.fromCodePoint(...values, x, y);
|
return String.fromCodePoint(...values, x, y);
|
||||||
@ -496,7 +524,28 @@
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
convertToBlob: {
|
||||||
|
type: "readout",
|
||||||
|
getStatus: createGetStatus("readout"),
|
||||||
|
object: ["OffscreenCanvas"],
|
||||||
|
fakeGenerator: function(checker){
|
||||||
|
return function convertToBlob(){
|
||||||
|
return checkerWrapper(checker, this, arguments, offscreenToBlobCallback);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
offscreenToBlob: {
|
||||||
|
name: "toBlob",
|
||||||
|
type: "readout",
|
||||||
|
getStatus: createGetStatus("readout"),
|
||||||
|
object: ["OffscreenCanvas"],
|
||||||
|
fakeGenerator: function(checker){
|
||||||
|
return function toBlob(){
|
||||||
|
return checkerWrapper(checker, this, arguments, offscreenToBlobCallback);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
Object.keys(scope.changedFunctions).forEach(function(key){
|
Object.keys(scope.changedFunctions).forEach(function(key){
|
||||||
scope.changedFunctions[key].api = "canvas";
|
scope.changedFunctions[key].api = "canvas";
|
||||||
|
@ -93,7 +93,9 @@
|
|||||||
{name: "Canvas-API", level: 1},
|
{name: "Canvas-API", level: 1},
|
||||||
"getContext @ canvas",
|
"getContext @ canvas",
|
||||||
{message: "readout", level: 2},
|
{message: "readout", level: 2},
|
||||||
"toDataURL @ canvas", "toBlob @ canvas", "mozGetAsFile @ canvas", "getImageData @ canvas",
|
"toDataURL @ canvas",
|
||||||
|
"toBlob @ canvas", "convertToBlob @ canvas", "mozGetAsFile @ canvas",
|
||||||
|
"getImageData @ canvas",
|
||||||
"isPointInPath @ canvas", "isPointInStroke @ canvas",
|
"isPointInPath @ canvas", "isPointInStroke @ canvas",
|
||||||
{message: "input", level: 2},
|
{message: "input", level: 2},
|
||||||
"fillText @ canvas", "strokeText @ canvas",
|
"fillText @ canvas", "strokeText @ canvas",
|
||||||
|
@ -4,6 +4,7 @@ Version 1.3:
|
|||||||
|
|
||||||
new features:
|
new features:
|
||||||
- added link to FAQ
|
- added link to FAQ
|
||||||
|
- added offscreen canvas protection
|
||||||
|
|
||||||
fixes:
|
fixes:
|
||||||
-
|
-
|
||||||
|
Loading…
x
Reference in New Issue
Block a user