Browse Source

refactor: use Reflect.ownKeys

tophf 3 years ago
parent
commit
38dc69c6ca
2 changed files with 6 additions and 11 deletions
  1. 2 5
      src/injected/web/gm-global-wrapper.js
  2. 4 6
      src/injected/web/safe-globals-web.js

+ 2 - 5
src/injected/web/gm-global-wrapper.js

@@ -59,7 +59,7 @@ const updateGlobalDesc = name => {
   }
 };
 [SafeEventTarget, Object]::forEach(src => {
-  getOwnPropertyNames(src = src[PROTO])::forEach(key => {
+  reflectOwnKeys(src = src[PROTO])::forEach(key => {
     inheritedKeys[key] = src;
   });
 });
@@ -118,8 +118,6 @@ function makeOwnKeys(local, globals) {
   /** Note that arrays can be eavesdropped via prototype setters like '0','1',...
    * on `push` and `arr[i] = 123`, as well as via getters if you read beyond
    * its length or from an unassigned `hole`. */
-  const names = getOwnPropertyNames(local)::filter(notIncludedIn, globals.get);
-  const symbols = getOwnPropertySymbols(local)::filter(notIncludedIn, globals.get);
   const frameIndexes = [];
   for (let i = 0, len = window::getWindowLength(); i < len && window::hasOwnProperty(i); i += 1) {
     if (!(i in local)) {
@@ -129,8 +127,7 @@ function makeOwnKeys(local, globals) {
   return safeConcat(
     frameIndexes,
     globals === globalKeysSet ? globalKeys : globals.toArray(),
-    names,
-    symbols,
+    reflectOwnKeys(local)::filter(notIncludedIn, globals.get),
   );
 }
 

+ 4 - 6
src/injected/web/safe-globals-web.js

@@ -36,8 +36,6 @@ export let
   assign,
   defineProperty,
   describeProperty,
-  getOwnPropertyNames,
-  getOwnPropertySymbols,
   getPrototypeOf,
   objectKeys,
   objectValues,
@@ -72,6 +70,7 @@ export let
   logging,
   mathRandom,
   parseFromString, // DOMParser
+  reflectOwnKeys,
   stopImmediatePropagation,
   then,
   // various getters
@@ -127,8 +126,6 @@ export const VAULT = (() => {
     // Object - using SafeObject to pacify eslint without disabling the rule
     defineProperty = (SafeObject = Object) && res[i += 1] || SafeObject.defineProperty,
     describeProperty = res[i += 1] || SafeObject.getOwnPropertyDescriptor,
-    getOwnPropertyNames = res[i += 1] || SafeObject.getOwnPropertyNames,
-    getOwnPropertySymbols = res[i += 1] || SafeObject.getOwnPropertySymbols,
     getPrototypeOf = res[i += 1] || SafeObject.getPrototypeOf,
     assign = res[i += 1] || SafeObject.assign,
     objectKeys = res[i += 1] || SafeObject.keys,
@@ -163,6 +160,7 @@ export const VAULT = (() => {
     logging = res[i += 1] || createNullObj((srcFF || src).console),
     mathRandom = res[i += 1] || src.Math.random,
     parseFromString = res[i += 1] || SafeDOMParser[PROTO].parseFromString,
+    reflectOwnKeys = res[i += 1] || src.Reflect.ownKeys,
     stopImmediatePropagation = res[i += 1] || src.Event[PROTO].stopImmediatePropagation,
     then = res[i += 1] || src.Promise[PROTO].then,
     // various getters
@@ -175,8 +173,8 @@ export const VAULT = (() => {
       || (() => getOwnProp(window, 'parent')), // Chrome<=85 https://crrev.com/793165
     // various values
     builtinGlobals = res[i += 1] || [
-      getOwnPropertyNames(srcWindow),
-      src !== srcWindow && getOwnPropertyNames(src),
+      reflectOwnKeys(srcWindow),
+      src !== srcWindow && reflectOwnKeys(src),
     ],
   ];
   // Well-known Symbols are unforgeable