diff options
-rw-r--r-- | common/content/commandline.js | 2 | ||||
-rw-r--r-- | common/content/dactyl.js | 23 | ||||
-rw-r--r-- | common/content/mow.js | 2 | ||||
-rw-r--r-- | common/modules/base.jsm | 160 | ||||
-rw-r--r-- | common/modules/bootstrap.jsm | 4 | ||||
-rw-r--r-- | common/modules/contexts.jsm | 6 | ||||
-rw-r--r-- | common/modules/dom-e4x.jsm | 54 | ||||
-rw-r--r-- | common/modules/dom.jsm | 24 | ||||
-rw-r--r-- | common/modules/javascript.jsm | 7 | ||||
-rw-r--r-- | common/modules/overlay.jsm | 16 | ||||
-rw-r--r-- | common/modules/util.jsm | 2 |
11 files changed, 83 insertions, 217 deletions
diff --git a/common/content/commandline.js b/common/content/commandline.js index e5714b8a..3edfbbe4 100644 --- a/common/content/commandline.js +++ b/common/content/commandline.js @@ -684,7 +684,7 @@ var CommandLine = Module("commandline", { * Displays the multi-line output of a command, preceded by the last * executed ex command string. * - * @param {XML} xml The output as an E4X XML object. + * @param {object} xml The output as a JSON XML object. */ commandOutput: function commandOutput(xml) { if (!this.command) diff --git a/common/content/dactyl.js b/common/content/dactyl.js index 02c7f1b8..6731fc34 100644 --- a/common/content/dactyl.js +++ b/common/content/dactyl.js @@ -216,22 +216,11 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { applyTriggerObserver: function triggerObserver(type, args) { if (type in this._observers) - this._observers[type] = this._observers[type].filter(function (callback) { - if (callback.get()) { - try { - try { - callback.get().apply(null, args); - } - catch (e if e.message == "can't wrap XML objects") { - // Horrible kludge. - callback.get().apply(null, [String(args[0])].concat(args.slice(1))); - } - } - catch (e) { - dactyl.reportError(e); - } - return true; - } + this._observers[type] = this._observers[type] + .filter(callback => { + callback = callback.get(); + if (callback) + util.trapErrors(() => callback.apply(null, args)); }); }, @@ -1922,7 +1911,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { // dactyl.hideGUI(); if (dactyl.userEval("typeof document", null, "test.js") === "undefined") - jsmodules.__proto__ = XPCSafeJSObjectWrapper(window); + jsmodules.__proto__ = window; if (dactyl.commandLineOptions.preCommands) dactyl.commandLineOptions.preCommands.forEach(function (cmd) { diff --git a/common/content/mow.js b/common/content/mow.js index 7149f9cb..0d1dfeca 100644 --- a/common/content/mow.js +++ b/common/content/mow.js @@ -1,6 +1,6 @@ // Copyright (c) 2006-2008 by Martin Stubenschrott <stubenschrott@vimperator.org> // Copyright (c) 2007-2011 by Doug Kearns <dougkearns@gmail.com> -// Copyright (c) 2008-2013 Kris Maglione <maglione.k@gmail.com> +// Copyright (c) 2008-2014 Kris Maglione <maglione.k@gmail.com> // // This work is licensed for reuse under an MIT license. Details are // given in the LICENSE.txt file included with this file. diff --git a/common/modules/base.jsm b/common/modules/base.jsm index 7828c35f..c15a5519 100644 --- a/common/modules/base.jsm +++ b/common/modules/base.jsm @@ -29,11 +29,6 @@ let { __lookupGetter__, __lookupSetter__, __defineGetter__, __defineSetter__, hasOwnProperty = Function.call.bind(hasOwnProperty); propertyIsEnumerable = Function.call.bind(propertyIsEnumerable); -if (typeof XPCSafeJSObjectWrapper === "undefined") - this.XPCSafeJSObjectWrapper = XPCNativeWrapper; - -let getGlobalForObject = Cu.getGlobalForObject || (obj => obj.__parent__); - function require(module_, target) { if (/^[A-Za-z0-9]+:/.test(module_)) return module(module_); @@ -149,16 +144,55 @@ function require_(obj, name, from, targetName) { defineModule("base", { // sed -n 's/^(const|var|function) ([a-zA-Z0-9_]+).*/ "\2",/p' base.jsm | sort | fmt exports: [ - "ErrorBase", "Cc", "Ci", "Class", "Cr", "Cs", "Cu", "Finished", - "Module", "JSMLoader", "RealSet", "Set", "Struct", "StructBase", - "Timer", "UTF8", "XPCOM", "XPCOMShim", "XPCOMUtils", - "XPCSafeJSObjectWrapper", "array", "bind", "call", "callable", - "ctypes", "curry", "debuggerProperties", "defineModule", - "deprecated", "endModule", "forEach", "hasOwnProperty", - "isArray", "isGenerator", "isinstance", "isObject", "isString", - "isSubclass", "isXML", "iter", "iterAll", "iterOwnProperties", - "keys", "literal", "memoize", "modujle", "octal", "properties", - "require", "set", "update", "values", "update_" + "Cc", + "Ci", + "Class", + "Cr", + "Cs", + "Cu", + "ErrorBase", + "Finished", + "JSMLoader", + "Module", + "RealSet", + "Set", + "Struct", + "StructBase", + "Timer", + "UTF8", + "XPCOM", + "XPCOMShim", + "XPCOMUtils", + "array", + "bind", + "call", + "callable", + "ctypes", + "curry", + "defineModule", + "deprecated", + "endModule", + "forEach", + "hasOwnProperty", + "isArray", + "isGenerator", + "isObject", + "isString", + "isSubclass", + "isinstance", + "iter", + "iterAll", + "iterOwnProperties", + "keys", + "literal", + "memoize", + "modujle", + "octal", + "properties", + "require", + "set", + "update", + "values", ] }); @@ -201,24 +235,9 @@ function literal(/* comment */) { } /** - * Returns a list of all of the top-level properties of an object, by - * way of the debugger. - * - * @param {object} obj - * @returns [jsdIProperty] - */ -function debuggerProperties(obj) { - if (loaded.services && services.debugger.isOn) { - let res = {}; - services.debugger.wrapValue(obj).getProperties(res, {}); - return res.value; - } -} - -/** * Iterates over the names of all of the top-level properties of an * object or, if prototypes is given, all of the properties in the - * prototype chain below the top. Uses the debugger if possible. + * prototype chain below the top. * * @param {object} obj The object to inspect. * @param {boolean} properties Whether to inspect the prototype chain @@ -230,7 +249,7 @@ function prototype(obj) XPCNativeWrapper.unwrap(obj).__proto__ || Object.getPrototypeOf(XPCNativeWrapper.unwrap(obj)); -function properties(obj, prototypes, debugger_) { +function properties(obj, prototypes) { let orig = obj; let seen = RealSet(["dactylPropertyNames"]); @@ -277,13 +296,7 @@ function properties(obj, prototypes, debugger_) { } for (; obj; obj = prototypes && prototype(obj)) { - try { - if (!debugger_ || !services.debugger.isOn) - var iter = (v for each (v in props(obj))); - } - catch (e) {} - if (!iter) - iter = (prop.name.stringValue for (prop in values(debuggerProperties(obj)))); + var iter = (v for each (v in props(obj))); for (let key in iter) if (!prototypes || !seen.has(key) && obj != orig) { @@ -603,22 +616,12 @@ function isinstance(object, interfaces) { function isObject(obj) typeof obj === "object" && obj != null || obj instanceof Ci.nsISupports; /** - * Returns true if obje is an E4X XML object. - * @deprecated - */ -function isXML(obj) typeof obj === "xml"; - -/** * Returns true if and only if its sole argument is an * instance of the builtin Array type. The array may come from * any window, frame, namespace, or execution context, which * is not the case when using (obj instanceof Array). */ -var isArray = - Array.isArray - // This is bloody stupid. - ? function isArray(val) Array.isArray(val) || val && val.constructor && val.constructor.name === "Array" - : function isArray(val) objproto.toString.call(val) == "[object Array]"; +var { isArray } = Array; /** * Returns true if and only if its sole argument is an @@ -740,33 +743,6 @@ function update(target) { } return target; } -function update_(target) { - for (let i = 1; i < arguments.length; i++) { - let src = arguments[i]; - Object.getOwnPropertyNames(src || {}).forEach(function (k) { - let desc = Object.getOwnPropertyDescriptor(src, k); - if (desc.value instanceof Class.Property) - desc = desc.value.init(k, target) || desc.value; - - try { - if (typeof desc.value === "function" && target.__proto__ && !(desc.value instanceof Ci.nsIDOMElement /* wtf? */)) { - let func = desc.value.wrapped || desc.value; - if (!func.superapply) { - func.__defineGetter__("super", function get_super_() Object.getPrototypeOf(target)[k]); - func.superapply = function super_apply(self, args) - let (meth = Object.getPrototypeOf(target)[k]) - meth && meth.apply(self, args); - func.supercall = function super_call(self, ...args) - func.superapply(self, args); - } - } - Object.defineProperty(target, k, desc); - } - catch (e) {} - }); - } - return target; -} /** * @constructor Class @@ -812,8 +788,10 @@ function Class(...args) { return res !== undefined ? res : self; \n\ })', "constructor", (name || superclass.className).replace(/\W/g, "_")) - .replace("PARAMS", /^function .*?\((.*?)\)/.exec(args[0] && args[0].init || Class.prototype.init)[1] - .replace(/\b(self|res|Constructor)\b/g, "$1_"))); + .replace("PARAMS", + /^function .*?\((.*?)\)/ + .exec(args[0] && args[0].init || Class.prototype.init)[1] + .replace(/\b(self|res|Constructor)\b/g, "$1_"))); Constructor.className = name || superclass.className || superclass.name; @@ -842,21 +820,14 @@ function Class(...args) { return Constructor; } -if (Cu.getGlobalForObject) - Class.objectGlobal = function (object) { - try { - return Cu.getGlobalForObject(object); - } - catch (e) { - return null; - } - }; -else - Class.objectGlobal = function (object) { - while (object.__parent__) - object = object.__parent__; - return object; - }; +Class.objectGlobal = function (object) { + try { + return Cu.getGlobalForObject(object); + } + catch (e) { + return null; + } +}; /** * @class Class.Property @@ -1089,7 +1060,6 @@ Class.makeClosure = function makeClosure() { return _closure; } - let x = /commandline/i.test(this); iter(properties(this), properties(this, true)).forEach(function (k) { if (!__lookupGetter__.call(this, k) && callable(this[k])) closure[k] = closure(this[k]); diff --git a/common/modules/bootstrap.jsm b/common/modules/bootstrap.jsm index 4206133a..9df81ca6 100644 --- a/common/modules/bootstrap.jsm +++ b/common/modules/bootstrap.jsm @@ -1,4 +1,4 @@ -// Copyright (c) 2011-2012 Kris Maglione <maglione.k@gmail.com> +// Copyright (c) 2011-2014 Kris Maglione <maglione.k@gmail.com> // // This work is licensed for reuse under an MIT license. Details are // given in the LICENSE.txt file included with this file. @@ -6,8 +6,8 @@ var EXPORTED_SYMBOLS = ["require"]; -// Deal with cross-compartment XML passing issues. function create(proto) Object.create(proto); + this["import"] = function import_(obj) { let res = {}; for each (let key in Object.getOwnPropertyNames(obj)) diff --git a/common/modules/contexts.jsm b/common/modules/contexts.jsm index e90bb08d..7c3b72e3 100644 --- a/common/modules/contexts.jsm +++ b/common/modules/contexts.jsm @@ -480,14 +480,8 @@ var Contexts = Module("contexts", { getDocs: function getDocs(context) { try { - if (isinstance(context, ["Sandbox"])) { - let info = "INFO" in context && Cu.evalInSandbox("this.INFO instanceof XML ? INFO.toXMLString() : this.INFO", context); - return /^</.test(info) ? XML(info) : info; - } if (DOM.isJSONXML(context.INFO)) return context.INFO; - if (typeof context.INFO == "xml" && config.haveGecko(null, "14.*")) - return context.INFO; } catch (e) {} return null; diff --git a/common/modules/dom-e4x.jsm b/common/modules/dom-e4x.jsm deleted file mode 100644 index c83810bb..00000000 --- a/common/modules/dom-e4x.jsm +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2007-2011 by Doug Kearns <dougkearns@gmail.com> -// Copyright (c) 2008-2012 Kris Maglione <maglione.k@gmail.com> -// -// This work is licensed for reuse under an MIT license. Details are -// given in the LICENSE.txt file included with this file. -/* use strict */ - -defineModule("dom", { - exports: ["fromXML"] -}); - -lazyRequire("highlight", ["highlight"]); - -var XBL = Namespace("xbl", "http://www.mozilla.org/xbl"); -var XHTML = Namespace("html", "http://www.w3.org/1999/xhtml"); -var XUL = Namespace("xul", "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); -var NS = Namespace("dactyl", "http://vimperator.org/namespaces/liberator"); - -function fromXML(node, doc, nodes) { - XML.ignoreWhitespace = XML.prettyPrinting = false; - if (typeof node === "string") // Sandboxes can't currently pass us XML objects. - node = XML(node); - - if (node.length() != 1) { - let domnode = doc.createDocumentFragment(); - for each (let child in node) - domnode.appendChild(fromXML(child, doc, nodes)); - return domnode; - } - - switch (node.nodeKind()) { - case "text": - return doc.createTextNode(String(node)); - case "element": - let domnode = doc.createElementNS(node.namespace(), node.localName()); - - for each (let attr in node.@*::*) - if (attr.name() != "highlight") - domnode.setAttributeNS(attr.namespace(), attr.localName(), String(attr)); - - for each (let child in node.*::*) - domnode.appendChild(fromXML(child, doc, nodes)); - if (nodes && node.@key) - nodes[node.@key] = domnode; - - if ("@highlight" in node) - highlight.highlightNode(domnode, String(node.@highlight), nodes || true); - return domnode; - default: - return null; - } -} - -// vim: set fdm=marker sw=4 sts=4 ts=8 et ft=javascript: diff --git a/common/modules/dom.jsm b/common/modules/dom.jsm index 8bce37f5..5061133f 100644 --- a/common/modules/dom.jsm +++ b/common/modules/dom.jsm @@ -55,8 +55,6 @@ var DOM = Class("DOM", { if (val == null) ; - else if (typeof val == "xml" && context instanceof Ci.nsIDOMDocument) - this[length++] = DOM.fromXML(val, context, this.nodes); else if (DOM.isJSONXML(val)) { if (context instanceof Ci.nsIDOMDocument) this[length++] = DOM.fromJSON(val, context, this.nodes); @@ -1510,21 +1508,6 @@ var DOM = Class("DOM", { return str.replace(regexp, m => map[m]); }, - /** - * Converts an E4X XML literal to a DOM node. Any attribute named - * highlight is present, it is transformed into dactyl:highlight, - * and the named highlight groups are guaranteed to be loaded. - * - * @param {Node} node - * @param {Document} doc - * @param {Object} nodes If present, nodes with the "key" attribute are - * stored here, keyed to the value thereof. - * @returns {Node} - */ - fromXML: deprecated("DOM.fromJSON", { get: function fromXML() - prefs.get("javascript.options.xml.chrome") !== false - && require("dom-e4x").fromXML }), - fromJSON: update(function fromJSON(xml, doc, nodes, namespaces) { if (!doc) doc = document; @@ -1540,8 +1523,6 @@ var DOM = Class("DOM", { if (isinstance(args, ["String", "Number", "Boolean", _])) return doc.createTextNode(args); - if (isXML(args)) - return DOM.fromXML(args, doc, nodes); if (isObject(args) && "toDOM" in args) return args.toDOM(doc, namespaces, nodes); if (args instanceof Ci.nsIDOMNode) @@ -1666,11 +1647,6 @@ var DOM = Class("DOM", { return indent + DOM.escapeHTML(String(args), true); - if (isXML(args)) - return indent + - args.toXMLString() - .replace(/^/m, indent); - if (isObject(args) && "toDOM" in args) return indent + services.XMLSerializer() diff --git a/common/modules/javascript.jsm b/common/modules/javascript.jsm index d1c3e37d..c51c1790 100644 --- a/common/modules/javascript.jsm +++ b/common/modules/javascript.jsm @@ -81,7 +81,7 @@ var JavaScript = Module("javascript", { yield "wrappedJSObject"; } - for (let key in iter(globals, properties(obj, !toplevel, true))) + for (let key in iter(globals, properties(obj, !toplevel))) if (!seen.has(key)) { seen.add(key); yield key; @@ -89,7 +89,8 @@ var JavaScript = Module("javascript", { // Properties aren't visible in an XPCNativeWrapper until // they're accessed. - for (let key in properties(this.getKey(obj, "wrappedJSObject"), !toplevel, true)) + for (let key in properties(this.getKey(obj, "wrappedJSObject"), + !toplevel)) try { if (key in obj && !seen.has(key)) { seen.add(key); @@ -638,7 +639,7 @@ var JavaScript = Module("javascript", { "ROCSSPrimitiveValue", "RangeError", "ReferenceError", "RegExp", "StopIteration", "String", "SyntaxError", "TypeError", "URIError", "Uint16Array", "Uint32Array", "Uint8Array", "XML", "XMLHttpProgressEvent", - "XMLList", "XMLSerializer", "XPCNativeWrapper", "XPCSafeJSWrapper", + "XMLList", "XMLSerializer", "XPCNativeWrapper", "XULControllers", "constructor", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "escape", "eval", "isFinite", "isNaN", "isXMLName", "parseFloat", "parseInt", "undefined", "unescape", "uneval" diff --git a/common/modules/overlay.jsm b/common/modules/overlay.jsm index c52ba4ad..796dd736 100644 --- a/common/modules/overlay.jsm +++ b/common/modules/overlay.jsm @@ -1,4 +1,4 @@ -// Copyright (c) 2009-2013 Kris Maglione <maglione.k@gmail.com> +// Copyright (c) 2009-2014 Kris Maglione <maglione.k@gmail.com> // // This work is licensed for reuse under an MIT license. Details are // given in the LICENSE.txt file included with this file. @@ -240,16 +240,12 @@ var Overlay = Module("Overlay", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReferen if (elem = doc.getElementById(String(elem))) { // Urgh. Hack. let namespaces; - if (attrs && !isXML(attrs)) + if (attrs) namespaces = iter([k.slice(6), DOM.fromJSON.namespaces[v] || v] for ([k, v] in Iterator(attrs)) if (/^xmlns(?:$|:)/.test(k))).toObject(); - let node; - if (isXML(xml)) - node = DOM.fromXML(xml, doc, obj.objects); - else - node = DOM.fromJSON(xml, doc, obj.objects, namespaces); + let node = DOM.fromJSON(xml, doc, obj.objects, namespaces); if (!(node instanceof Ci.nsIDOMDocumentFragment)) savedElems.push(node); @@ -259,12 +255,6 @@ var Overlay = Module("Overlay", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReferen fn(elem, node); - if (isXML(attrs)) - // Evilness and such. - let (oldAttrs = attrs) { - attrs = (attr for each (attr in oldAttrs)); - } - for (let attr in attrs || []) { let [ns, localName] = DOM.parseNamespace(attr); let name = attr; diff --git a/common/modules/util.jsm b/common/modules/util.jsm index b05fc199..beab864d 100644 --- a/common/modules/util.jsm +++ b/common/modules/util.jsm @@ -1246,7 +1246,7 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]), * * This is similar to Perl's extended regular expression format. * - * @param {string|XML} expr The expression to compile into a RegExp. + * @param {string} expr The expression to compile into a RegExp. * @param {string} flags Flags to apply to the new RegExp. * @param {object} tokens The tokens to substitute. @optional * @returns {RegExp} A custom regexp object. |