From 1d5953e8c78bc8ebb2dd91e72c27e503cb3189b0 Mon Sep 17 00:00:00 2001 From: kkapsner Date: Wed, 5 Sep 2018 15:50:59 +0200 Subject: [PATCH] Added protection from undefined properties. DOMRect has some new properties that are only in nightly at the moment. --- lib/intercept.js | 57 +++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/lib/intercept.js b/lib/intercept.js index e35437e..c5055ef 100644 --- a/lib/intercept.js +++ b/lib/intercept.js @@ -100,7 +100,13 @@ forEachFunction(function({name, object}){ var map = originalPropertyDescriptors[name] || new WeakMap(); 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, name, @@ -145,11 +151,14 @@ if (preIntercepted){ preIntercepted = false; forEachFunction(function({name, object}){ - Object.defineProperty( - object, - name, - originalPropertyDescriptors[name].get(object) - ); + const originalPropertyDescriptor = originalPropertyDescriptors[name].get(object); + if (originalPropertyDescriptor){ + Object.defineProperty( + object, + name, + originalPropertyDescriptor + ); + } }); } }; @@ -286,26 +295,28 @@ var original = constructor.prototype[name]; const checker = generateChecker(name, changedFunction, siteStatus, original); var descriptor = Object.getOwnPropertyDescriptor(constructor.prototype, name); - if (descriptor.hasOwnProperty("value")){ - if (changedFunction.fakeGenerator){ - descriptor.value = exportFunction( - changedFunction.fakeGenerator(checker), - window - ); + if (descriptor){ + if (descriptor.hasOwnProperty("value")){ + if (changedFunction.fakeGenerator){ + descriptor.value = exportFunction( + changedFunction.fakeGenerator(checker), + window + ); + } + else { + descriptor.value = null; + } } 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)); if (object){ const descriptor = Object.getOwnPropertyDescriptor(object, name); - if (descriptor.hasOwnProperty("get")){ + if (descriptor && descriptor.hasOwnProperty("get")){ var original = descriptor.get; const checker = generateChecker(name, changedGetter, siteStatus, original); const getter = changedGetter.getterGenerator(checker);