1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-01-08 04:54:11 +01:00

Add util.weakReference that won't crash if you pass null.

This commit is contained in:
Kris Maglione
2011-10-01 23:02:00 -04:00
parent c9583ac72f
commit 84a68bff9a
12 changed files with 25 additions and 15 deletions

View File

@@ -127,11 +127,12 @@ var Buffer = Module("Buffer", {
*/
get lastInputField() {
let field = this.localStore.lastInputField && this.localStore.lastInputField.get();
let doc = field && field.ownerDocument;
let win = doc && doc.defaultView;
return win && doc === win.document ? field : null;
},
set lastInputField(value) { this.localStore.lastInputField = value && Cu.getWeakReference(value); },
set lastInputField(value) { this.localStore.lastInputField = util.weakReference(value); },
/**
* @property {nsIURI} The current top-level document.
@@ -241,7 +242,7 @@ var Buffer = Module("Buffer", {
return frame && frame.get() || this.win;
},
set focusedFrame(frame) {
this.localStore.focusedFrame = Cu.getWeakReference(frame);
this.localStore.focusedFrame = util.weakReference(frame);
},
/**

View File

@@ -30,7 +30,7 @@ var Group = Class("Group", {
get contexts() this.modules.contexts,
set lastDocument(val) { this._lastDocument = val && Cu.getWeakReference(val); },
set lastDocument(val) { this._lastDocument = util.weakReference(val); },
get lastDocument() this._lastDocument && this._lastDocument.get(),
modifiable: true,

View File

@@ -339,10 +339,10 @@ var RangeFinder = Module("rangefinder", {
*/
var RangeFind = Class("RangeFind", {
init: function init(window, content, matchCase, backward, elementPath, regexp) {
this.window = Cu.getWeakReference(window);
this.window = util.weakReference(window);
this.content = content;
this.baseDocument = Cu.getWeakReference(this.content.document);
this.baseDocument = util.weakReference(this.content.document);
this.elementPath = elementPath || null;
this.reverse = Boolean(backward);
@@ -381,7 +381,7 @@ var RangeFind = Class("RangeFind", {
this.range.selectionController.scrollSelectionIntoView(
this.range.selectionController.SELECTION_NORMAL, 0, false);
this.store.focusedFrame = Cu.getWeakReference(range.startContainer.ownerDocument.defaultView);
this.store.focusedFrame = util.weakReference(range.startContainer.ownerDocument.defaultView);
},
cancel: function cancel() {

View File

@@ -74,7 +74,7 @@ var Overlay = Module("Overlay", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReferen
[self, events] = [event, event[callback || "events"]];
for (let [event, callback] in Iterator(events)) {
let args = [Cu.getWeakReference(target),
let args = [util.weakReference(target),
event,
util.wrapCallback(callback, self),
capture,

View File

@@ -113,7 +113,7 @@ var Prefs = Module("prefs", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference])
if (!this._observers[pref])
this._observers[pref] = [];
this._observers[pref].push(!strong ? Cu.getWeakReference(callback) : { get: function () callback });
this._observers[pref].push(!strong ? util.weakReference(callback) : { get: function () callback });
},
/**

View File

@@ -214,7 +214,7 @@ var Storage = Module("Storage", {
if (ref) {
let refs = overlay.getData(ref, "storage-refs");
refs.push(callback);
var callbackRef = Cu.getWeakReference(callback);
var callbackRef = util.weakReference(callback);
}
else {
callbackRef = { get: function () callback };

View File

@@ -96,7 +96,7 @@ var Hive = Class("Hive", {
get modifiable() this.name !== "system",
addRef: function (obj) {
this.refs.push(Cu.getWeakReference(obj));
this.refs.push(util.weakReference(obj));
this.dropRef(null);
},
dropRef: function (obj) {

View File

@@ -1550,6 +1550,15 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
return res.filter(function (h) !Set.add(seen, h.spec));
},
/**
* Like Cu.getWeakReference, but won't crash if you pass null.
*/
weakReference: function weakReference(jsval) {
if (jsval == null)
return { get: function get() null };
return Cu.getWeakReference(jsval);
},
/**
* Wraps native exceptions thrown by the called function so that a
* proper stack trace may be retrieved from them.