diff --git a/common/content/browser.js b/common/content/browser.js index bfbbc861..e5529a30 100644 --- a/common/content/browser.js +++ b/common/content/browser.js @@ -28,8 +28,11 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), "content-document-global-created": function (win, uri) { let top = util.topWindow(win); - if (top == window) - this._triggerLoadAutocmd("PageLoadPre", win.document, win.location.href != "null" ? window.location.href : uri); + if (uri == "null") + uri = null; + + if (top == window && (win.location.href || uri)) + this._triggerLoadAutocmd("PageLoadPre", win.document, win.location.href || uri); } }, diff --git a/common/content/events.js b/common/content/events.js index 9e36d766..3c72b4e8 100644 --- a/common/content/events.js +++ b/common/content/events.js @@ -1315,7 +1315,10 @@ var Events = Module("events", { }, keyup: function onKeyUp(event) { - this.keyEvents.push(event); + if (this.type == "keydown") + this.keyEvents.push(event); + else + this.keyEvents = []; let isMacro = event.isMacro || this.feedingEvent && this.feedingEvent.isMacro; if (this.lastKeyFake && !isMacro) diff --git a/common/content/mappings.js b/common/content/mappings.js index ed4104d6..97042113 100644 --- a/common/content/mappings.js +++ b/common/content/mappings.js @@ -663,7 +663,9 @@ var Mappings = Module("mappings", { function uniqueModes(modes) { let chars = [k for ([k, v] in Iterator(modules.modes.modeChars)) if (v.every(function (mode) modes.indexOf(mode) >= 0))]; - return array.uniq(modes.filter(function (m) chars.indexOf(m.char) < 0).concat(chars)); + return array.uniq(modes.filter(function (m) chars.indexOf(m.char) < 0) + .map(function (m) m.name.toLowerCase()) + .concat(chars)); } commands.add(["feedkeys", "fk"], diff --git a/common/modules/base.jsm b/common/modules/base.jsm index ded0ab18..0310cfc1 100644 --- a/common/modules/base.jsm +++ b/common/modules/base.jsm @@ -68,11 +68,9 @@ if (!Object.defineProperties) } if (!Object.freeze) Object.freeze = function freeze(obj) {}; -if (!Object.getOwnPropertyDescriptor) - Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(obj, prop) { +if (!Object.getPropertyDescriptor) + Object.getPropertyDescriptor = function getOwnPropertyDescriptor(obj, prop) { try { - if (!hasOwnProperty.call(obj, prop)) - return undefined; let desc = { configurable: true, enumerable: propertyIsEnumerable.call(obj, prop) @@ -93,6 +91,11 @@ if (!Object.getOwnPropertyDescriptor) throw e.stack ? e : Error(e); } }; +if (!Object.getOwnPropertyDescriptor) + Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(obj, prop) { + if (hasOwnProperty.call(obj, prop)) + return Object.getPropertyDescriptor(obj, prop); + }; if (!Object.getOwnPropertyNames) Object.getOwnPropertyNames = function getOwnPropertyNames(obj, _debugger) { try { diff --git a/common/modules/contexts.jsm b/common/modules/contexts.jsm index e5791435..57c18197 100644 --- a/common/modules/contexts.jsm +++ b/common/modules/contexts.jsm @@ -374,12 +374,19 @@ var Contexts = Module("contexts", { bindMacro: function (args, default_, params) { const { dactyl, events, modules } = this.modules; + function Proxy(obj, key) Class.Property({ + configurable: true, + enumerable: true, + get: function Proxy_get() process(obj[key]), + set: function Proxy_set(val) obj[key] = val + }) + let process = util.identity; if (callable(params)) var makeParams = function makeParams(self, args) - iter.toObject([k, process(v)] - for ([k, v] in iter(params.apply(self, args)))); + let (obj = params.apply(self, args)) + iter.toObject([k, Proxy(obj, k)] for (k in properties(obj))); else if (params) makeParams = function makeParams(self, args) iter.toObject([name, process(args[i])] diff --git a/common/modules/javascript.jsm b/common/modules/javascript.jsm index 7d8de811..82f1152b 100644 --- a/common/modules/javascript.jsm +++ b/common/modules/javascript.jsm @@ -54,7 +54,7 @@ var JavaScript = Module("javascript", { lazyInit: true, - newContext: function () this.modules.newContext(this.modules.userContext), + newContext: function () this.modules.newContext(this.modules.userContext, true), get completers() JavaScript.completers, // For backward compatibility diff --git a/common/modules/util.jsm b/common/modules/util.jsm index fe5fab3c..d183b9c8 100644 --- a/common/modules/util.jsm +++ b/common/modules/util.jsm @@ -1326,9 +1326,15 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), if (desc.value instanceof Class.Property) desc = desc.value.init(k) || desc.value; - for (let obj = object; obj && !orig; obj = Object.getPrototypeOf(obj)) - if (orig = Object.getOwnPropertyDescriptor(obj, k)) - Object.defineProperty(original, k, orig); + if (k in object) { + for (let obj = object; obj && !orig; obj = Object.getPrototypeOf(obj)) + if (orig = Object.getOwnPropertyDescriptor(obj, k)) + Object.defineProperty(original, k, orig); + + if (!orig) + if (orig = Object.getPropertyDescriptor(object, k)) + Object.defineProperty(original, k, orig); + } // Guard against horrible add-ons that use eval-based monkey // patching. @@ -1668,7 +1674,7 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), catch (e) {} let ary = host.split("."); - ary = [ary.slice(i).join(".") for (i in util.range(ary.length - 1, 0, -1))]; + ary = [ary.slice(i).join(".") for (i in util.range(ary.length, 0, -1))]; return ary.filter(function (h) h.length >= base.length); }, @@ -1928,7 +1934,7 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), let res = [], seen = {}; (function rec(frame) { try { - res = res.concat(util.subdomains(frame.location.host)); + res = res.concat(util.subdomains(frame.location.hostname)); } catch (e) {} Array.forEach(frame.frames, rec);