1
0
mirror of https://github.com/kkapsner/CanvasBlocker synced 2025-04-18 08:08:28 +02:00

Added protection from undefined properties.

DOMRect has some new properties that are only in nightly at the moment.
This commit is contained in:
kkapsner 2018-09-05 15:50:59 +02:00
parent 350fdd3278
commit 1d5953e8c7

View File

@ -100,7 +100,13 @@
forEachFunction(function({name, object}){ forEachFunction(function({name, object}){
var map = originalPropertyDescriptors[name] || new WeakMap(); var map = originalPropertyDescriptors[name] || new WeakMap();
originalPropertyDescriptors[name] = map; originalPropertyDescriptors[name] = map;
map.set(object, Object.getOwnPropertyDescriptor(object, name));
const originalPropertyDescriptor = Object.getOwnPropertyDescriptor(object, name);
if (!originalPropertyDescriptor){
return;
}
map.set(object, originalPropertyDescriptor);
Object.defineProperty( Object.defineProperty(
object, object,
name, name,
@ -145,11 +151,14 @@
if (preIntercepted){ if (preIntercepted){
preIntercepted = false; preIntercepted = false;
forEachFunction(function({name, object}){ forEachFunction(function({name, object}){
Object.defineProperty( const originalPropertyDescriptor = originalPropertyDescriptors[name].get(object);
object, if (originalPropertyDescriptor){
name, Object.defineProperty(
originalPropertyDescriptors[name].get(object) object,
); name,
originalPropertyDescriptor
);
}
}); });
} }
}; };
@ -286,26 +295,28 @@
var original = constructor.prototype[name]; var original = constructor.prototype[name];
const checker = generateChecker(name, changedFunction, siteStatus, original); const checker = generateChecker(name, changedFunction, siteStatus, original);
var descriptor = Object.getOwnPropertyDescriptor(constructor.prototype, name); var descriptor = Object.getOwnPropertyDescriptor(constructor.prototype, name);
if (descriptor.hasOwnProperty("value")){ if (descriptor){
if (changedFunction.fakeGenerator){ if (descriptor.hasOwnProperty("value")){
descriptor.value = exportFunction( if (changedFunction.fakeGenerator){
changedFunction.fakeGenerator(checker), descriptor.value = exportFunction(
window changedFunction.fakeGenerator(checker),
); window
);
}
else {
descriptor.value = null;
}
} }
else { else {
descriptor.value = null; descriptor.get = exportFunction(function(){
return exportFunction(
changedFunction.fakeGenerator(checker),
window
);
}, window);
} }
Object.defineProperty(constructor.prototype, name, descriptor);
} }
else {
descriptor.get = exportFunction(function(){
return exportFunction(
changedFunction.fakeGenerator(checker),
window
);
}, window);
}
Object.defineProperty(constructor.prototype, name, descriptor);
} }
}); });
} }
@ -319,7 +330,7 @@
const object = objectGetter(getWrapped(window)); const object = objectGetter(getWrapped(window));
if (object){ if (object){
const descriptor = Object.getOwnPropertyDescriptor(object, name); const descriptor = Object.getOwnPropertyDescriptor(object, name);
if (descriptor.hasOwnProperty("get")){ if (descriptor && descriptor.hasOwnProperty("get")){
var original = descriptor.get; var original = descriptor.get;
const checker = generateChecker(name, changedGetter, siteStatus, original); const checker = generateChecker(name, changedGetter, siteStatus, original);
const getter = changedGetter.getterGenerator(checker); const getter = changedGetter.getterGenerator(checker);