mirror of
https://github.com/kkapsner/CanvasBlocker
synced 2025-07-04 20:46:39 +02:00
parent
e2efb727b9
commit
f3f6df229f
5 changed files with 122 additions and 58 deletions
|
@ -90,5 +90,46 @@
|
|||
}
|
||||
};
|
||||
|
||||
const changedPropertiesByWindow = new WeakMap();
|
||||
scope.changeProperty = function(window, group, {object, name, type, changed}){
|
||||
let changedProperties = changedPropertiesByWindow.get(scope.getWrapped(window));
|
||||
if (!changedProperties){
|
||||
changedProperties = [];
|
||||
changedPropertiesByWindow.set(scope.getWrapped(window), changedProperties);
|
||||
}
|
||||
const descriptor = Object.getOwnPropertyDescriptor(object, name);
|
||||
const original = descriptor[type];
|
||||
descriptor[type] = changed;
|
||||
Object.defineProperty(object, name, descriptor);
|
||||
changedProperties.push({group, object, name, type, original});
|
||||
};
|
||||
scope.revertProperties = function(window, group){
|
||||
window = scope.getWrapped(window);
|
||||
let changedProperties = changedPropertiesByWindow.get(window);
|
||||
if (!changedProperties){
|
||||
return;
|
||||
}
|
||||
if (group){
|
||||
const remainingProperties = changedProperties.filter(function({group}){
|
||||
return group !== group;
|
||||
});
|
||||
changedPropertiesByWindow.set(window, remainingProperties);
|
||||
changedProperties = changedProperties.filter(function({group}){
|
||||
return group === group;
|
||||
});
|
||||
}
|
||||
else {
|
||||
changedPropertiesByWindow.delete(window);
|
||||
}
|
||||
|
||||
for (let i = changedProperties.length - 1; i >= 0; i -= 1){
|
||||
const {object, name, type, original} = changedProperties[i];
|
||||
logging.verbose("reverting", name, "on", object);
|
||||
const descriptor = Object.getOwnPropertyDescriptor(object, name);
|
||||
descriptor[type] = original;
|
||||
Object.defineProperty(object, name, descriptor);
|
||||
}
|
||||
};
|
||||
|
||||
Object.seal(scope);
|
||||
}());
|
Loading…
Add table
Add a link
Reference in a new issue