1
0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2024-06-20 02:22:46 +02:00

Simplified code structure

This commit is contained in:
kkapsner 2019-12-12 23:44:02 +01:00
parent 0d331d91a6
commit af1dfe755c
2 changed files with 100 additions and 95 deletions

View File

@ -315,40 +315,42 @@
const changedFunction = changedFunctions[name]; const changedFunction = changedFunctions[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){ if (!functionStatus.active) return;
getAllFunctionObjects(windowToProcess, changedFunction).forEach(function(object){
if (object){ getAllFunctionObjects(windowToProcess, changedFunction).forEach(function(object){
const original = object[name]; if (!object) return;
const checker = generateChecker({
name, changedFunction, siteStatus, original, const original = object[name];
window: windowToProcess, prefs, checkStack, ask, notify const checker = generateChecker({
}); name, changedFunction, siteStatus, original,
const descriptor = Object.getOwnPropertyDescriptor(object, name); window: windowToProcess, prefs, checkStack, ask, notify
if (descriptor){
if (descriptor.hasOwnProperty("value")){
if (changedFunction.fakeGenerator){
descriptor.value = exportFunction(
changedFunction.fakeGenerator(checker, original, windowToProcess),
windowToProcess
);
}
else {
descriptor.value = null;
}
}
else {
descriptor.get = exportFunction(function(){
return exportFunction(
changedFunction.fakeGenerator(checker),
windowToProcess
);
}, windowToProcess);
}
Object.defineProperty(object, name, descriptor);
}
}
}); });
} const descriptor = Object.getOwnPropertyDescriptor(object, name);
if (!descriptor) return;
if (descriptor.hasOwnProperty("value")){
if (changedFunction.fakeGenerator){
descriptor.value = extension.exportFunctionWithName(
changedFunction.fakeGenerator(checker, original, windowToProcess),
windowToProcess,
original.name
);
}
else {
descriptor.value = null;
}
}
else {
descriptor.get = extension.exportFunctionWithName(function(){
return extension.exportFunctionWithName(
changedFunction.fakeGenerator(checker),
windowToProcess,
original.name
);
}, windowToProcess, descriptor.get.name);
}
Object.defineProperty(object, name, descriptor);
});
}); });
} }
function interceptGetters(windowToProcess, siteStatus, {checkStack, ask, notify, prefs}){ function interceptGetters(windowToProcess, siteStatus, {checkStack, ask, notify, prefs}){
@ -356,71 +358,70 @@
const name = changedGetter.name; const name = changedGetter.name;
const functionStatus = changedGetter.getStatus(undefined, siteStatus, prefs); const functionStatus = changedGetter.getStatus(undefined, siteStatus, prefs);
logging.verbose("status for", changedGetter, ":", functionStatus); logging.verbose("status for", changedGetter, ":", functionStatus);
if (functionStatus.active){ if (!functionStatus.active) return;
changedGetter.objectGetters.forEach(function(objectGetter){
const object = objectGetter(extension.getWrapped(windowToProcess));
if (object){
const descriptor = Object.getOwnPropertyDescriptor(object, name);
if (descriptor && descriptor.hasOwnProperty("get")){
const original = descriptor.get;
const checker = generateChecker({
name, changedFunction: changedGetter, siteStatus, original,
window: windowToProcess, prefs, checkStack, ask, notify
});
const getter = changedGetter.getterGenerator(checker, original, windowToProcess);
descriptor.get = extension.exportFunctionWithName(getter, windowToProcess, original.name);
if (descriptor.hasOwnProperty("set") && descriptor.set && changedGetter.setterGenerator){ changedGetter.objectGetters.forEach(function(objectGetter){
const original = descriptor.set; const object = objectGetter(extension.getWrapped(windowToProcess));
const setter = changedGetter.setterGenerator( if (!object) return;
windowToProcess,
original,
prefs
);
descriptor.set = extension.exportFunctionWithName(setter, windowToProcess, original.name);
}
Object.defineProperty(object, name, descriptor); const descriptor = Object.getOwnPropertyDescriptor(object, name);
} if (!descriptor) return;
else if (
changedGetter.valueGenerator && if (descriptor.hasOwnProperty("get")){
descriptor && descriptor.hasOwnProperty("value") const original = descriptor.get;
){ const checker = generateChecker({
const protectedAPIFeatures = prefs("protectedAPIFeatures"); name, changedFunction: changedGetter, siteStatus, original,
if ( window: windowToProcess, prefs, checkStack, ask, notify
functionStatus.active && });
( const getter = changedGetter.getterGenerator(checker, original, windowToProcess);
!protectedAPIFeatures.hasOwnProperty(name + " @ " + changedGetter.api) || descriptor.get = extension.exportFunctionWithName(getter, windowToProcess, original.name);
protectedAPIFeatures[name + " @ " + changedGetter.api]
) if (descriptor.hasOwnProperty("set") && descriptor.set && changedGetter.setterGenerator){
){ const original = descriptor.set;
switch (functionStatus.mode){ const setter = changedGetter.setterGenerator(
case "ask": case "block": case "fake": windowToProcess,
descriptor.value = changedGetter.valueGenerator({ original,
mode: functionStatus.mode, prefs
original: descriptor.value, );
notify: function notifyCallback(messageId){ descriptor.set = extension.exportFunctionWithName(setter, windowToProcess, original.name);
notify({ }
url: getURL(windowToProcess),
errorStack: (new Error()).stack, Object.defineProperty(object, name, descriptor);
messageId, }
timestamp: new Date(), else if (
functionName: name, changedGetter.valueGenerator &&
api: changedGetter.api descriptor.hasOwnProperty("value")
}); ){
} const protectedAPIFeatures = prefs("protectedAPIFeatures");
if (
!protectedAPIFeatures.hasOwnProperty(name + " @ " + changedGetter.api) ||
protectedAPIFeatures[name + " @ " + changedGetter.api]
){
switch (functionStatus.mode){
case "ask": case "block": case "fake":
descriptor.value = changedGetter.valueGenerator({
mode: functionStatus.mode,
original: descriptor.value,
notify: function notifyCallback(messageId){
notify({
url: getURL(windowToProcess),
errorStack: (new Error()).stack,
messageId,
timestamp: new Date(),
functionName: name,
api: changedGetter.api
}); });
Object.defineProperty(object, name, descriptor); }
break; });
} Object.defineProperty(object, name, descriptor);
} break;
}
else {
logging.error("Try to fake non getter property:", changedGetter);
} }
} }
}); }
} else {
logging.error("Try to fake non getter property:", changedGetter);
}
});
}); });
} }
scope.intercept = function intercept({subject: windowToProcess}, apis){ scope.intercept = function intercept({subject: windowToProcess}, apis){

View File

@ -85,6 +85,10 @@
{ {
"version": "0.5.15RC1", "version": "0.5.15RC1",
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-0.5.15RC1-an+fx.xpi" "update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-0.5.15RC1-an+fx.xpi"
},
{
"version": "0.5.15RC2",
"update_link": "https://canvasblocker.kkapsner.de/versions/canvasblocker_beta-0.5.15RC2-an+fx.xpi"
} }
] ]
} }