1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-23 13:12:27 +01:00

Make things not be broken on FF<29.

This commit is contained in:
Kris Maglione
2014-03-16 21:43:36 -07:00
parent 6d36b7f374
commit 3ea3dcb3db

View File

@@ -111,24 +111,58 @@ var Modules = function Modules(window) {
const BASES = [BASE, "resource://dactyl-local-content/"]; const BASES = [BASE, "resource://dactyl-local-content/"];
let proxyCache = {}; let proxyCache = {};
let proxy = new Proxy(window, { if (config.haveGecko(29))
get: function window_get(target, prop) { var proxy = new Proxy(window, {
// `in`, not `hasOwnProperty`, because we want to return get: function window_get(target, prop) {
// unbound methods in `Object.prototype` // `in`, not `hasOwnProperty`, because we want to return
if (prop in proxyCache) // unbound methods in `Object.prototype`
return proxyCache[prop]; if (prop in proxyCache)
return proxyCache[prop];
let p = target[prop]; let p = target[prop];
if (callable(p)) if (callable(p))
return proxyCache[prop] = p.bind(target); return proxyCache[prop] = p.bind(target);
return p; return p;
}, },
set: function window_set(target, prop, val) { set: function window_set(target, prop, val) {
return target[prop] = val; return target[prop] = val;
} }
}); });
else {
// Bug 814892
let o = {};
// Oh, the brokenness... See bug 793210
Object.preventExtensions(o);
proxy = new Proxy(o, {
get: function window_get(target, prop) {
// `in`, not `hasOwnProperty`, because we want to return
// unbound methods in `Object.prototype`
if (prop in proxyCache)
return proxyCache[prop];
let p = window[prop];
if (callable(p))
return proxyCache[prop] = p.bind(window);
return p;
},
set: function window_set(target, prop, val) {
return window[prop] = val;
},
getOwnPropertyDescriptor: function (target, prop) Object.getOwnPropertyDescriptor(window, prop),
getOwnPropertyNames: function (target, prop) Object.getOwnPropertyNames(window),
defineProperty: function (target, prop, desc) Object.defineProperty(window, prop, desc),
deleteProperty: function (target, prop) { delete window[prop]; },
has: function (target, prop) prop in window,
hasOwn: function (target, prop) hasOwnProperty(window, prop),
enumerate: function (target) (p for (p in window)),
iterate: function (target) (p for (p of window))
});
}
var jsmodules = newContext(proxy, false, "Dactyl `jsmodules`"); var jsmodules = newContext(proxy, false, "Dactyl `jsmodules`");
jsmodules.NAME = "jsmodules"; jsmodules.NAME = "jsmodules";