mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2025-12-21 07:17:58 +01:00
Add util.weakReference that won't crash if you pass null.
This commit is contained in:
@@ -205,7 +205,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
|
|||||||
registerObserver: function registerObserver(type, callback, weak) {
|
registerObserver: function registerObserver(type, callback, weak) {
|
||||||
if (!(type in this._observers))
|
if (!(type in this._observers))
|
||||||
this._observers[type] = [];
|
this._observers[type] = [];
|
||||||
this._observers[type].push(weak ? Cu.getWeakReference(callback) : { get: function () callback });
|
this._observers[type].push(weak ? util.weakReference(callback) : { get: function () callback });
|
||||||
},
|
},
|
||||||
|
|
||||||
registerObservers: function registerObservers(obj, prop) {
|
registerObservers: function registerObservers(obj, prop) {
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ var EventHive = Class("EventHive", Contexts.Hive, {
|
|||||||
var [self, events] = this._events(event, callback);
|
var [self, events] = this._events(event, callback);
|
||||||
|
|
||||||
for (let [event, callback] in Iterator(events)) {
|
for (let [event, callback] in Iterator(events)) {
|
||||||
let args = [Cu.getWeakReference(target),
|
let args = [util.weakReference(target),
|
||||||
self ? Cu.getWeakReference(self) : { get: function () null },
|
util.weakReference(self),
|
||||||
event,
|
event,
|
||||||
this.wrapListener(callback, self),
|
this.wrapListener(callback, self),
|
||||||
capture,
|
capture,
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ var Marks = Module("marks", {
|
|||||||
let mark = this.Mark();
|
let mark = this.Mark();
|
||||||
|
|
||||||
if (Marks.isURLMark(name)) {
|
if (Marks.isURLMark(name)) {
|
||||||
mark.tab = Cu.getWeakReference(tabs.getTab());
|
mark.tab = util.weakReference(tabs.getTab());
|
||||||
this._urlMarks.set(name, mark);
|
this._urlMarks.set(name, mark);
|
||||||
var message = "mark.addURL";
|
var message = "mark.addURL";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ var Modes = Module("modes", {
|
|||||||
if (!(id in this.boundProperties))
|
if (!(id in this.boundProperties))
|
||||||
for (let elem in array.iterValues(this._modeStack))
|
for (let elem in array.iterValues(this._modeStack))
|
||||||
elem.saved[id] = { obj: obj, prop: prop, value: obj[prop], test: test };
|
elem.saved[id] = { obj: obj, prop: prop, value: obj[prop], test: test };
|
||||||
this.boundProperties[id] = { obj: Cu.getWeakReference(obj), prop: prop, test: test };
|
this.boundProperties[id] = { obj: util.weakReference(obj), prop: prop, test: test };
|
||||||
},
|
},
|
||||||
|
|
||||||
inSet: false,
|
inSet: false,
|
||||||
|
|||||||
@@ -127,11 +127,12 @@ var Buffer = Module("Buffer", {
|
|||||||
*/
|
*/
|
||||||
get lastInputField() {
|
get lastInputField() {
|
||||||
let field = this.localStore.lastInputField && this.localStore.lastInputField.get();
|
let field = this.localStore.lastInputField && this.localStore.lastInputField.get();
|
||||||
|
|
||||||
let doc = field && field.ownerDocument;
|
let doc = field && field.ownerDocument;
|
||||||
let win = doc && doc.defaultView;
|
let win = doc && doc.defaultView;
|
||||||
return win && doc === win.document ? field : null;
|
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.
|
* @property {nsIURI} The current top-level document.
|
||||||
@@ -241,7 +242,7 @@ var Buffer = Module("Buffer", {
|
|||||||
return frame && frame.get() || this.win;
|
return frame && frame.get() || this.win;
|
||||||
},
|
},
|
||||||
set focusedFrame(frame) {
|
set focusedFrame(frame) {
|
||||||
this.localStore.focusedFrame = Cu.getWeakReference(frame);
|
this.localStore.focusedFrame = util.weakReference(frame);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ var Group = Class("Group", {
|
|||||||
|
|
||||||
get contexts() this.modules.contexts,
|
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(),
|
get lastDocument() this._lastDocument && this._lastDocument.get(),
|
||||||
|
|
||||||
modifiable: true,
|
modifiable: true,
|
||||||
|
|||||||
@@ -339,10 +339,10 @@ var RangeFinder = Module("rangefinder", {
|
|||||||
*/
|
*/
|
||||||
var RangeFind = Class("RangeFind", {
|
var RangeFind = Class("RangeFind", {
|
||||||
init: function init(window, content, matchCase, backward, elementPath, regexp) {
|
init: function init(window, content, matchCase, backward, elementPath, regexp) {
|
||||||
this.window = Cu.getWeakReference(window);
|
this.window = util.weakReference(window);
|
||||||
this.content = content;
|
this.content = content;
|
||||||
|
|
||||||
this.baseDocument = Cu.getWeakReference(this.content.document);
|
this.baseDocument = util.weakReference(this.content.document);
|
||||||
this.elementPath = elementPath || null;
|
this.elementPath = elementPath || null;
|
||||||
this.reverse = Boolean(backward);
|
this.reverse = Boolean(backward);
|
||||||
|
|
||||||
@@ -381,7 +381,7 @@ var RangeFind = Class("RangeFind", {
|
|||||||
this.range.selectionController.scrollSelectionIntoView(
|
this.range.selectionController.scrollSelectionIntoView(
|
||||||
this.range.selectionController.SELECTION_NORMAL, 0, false);
|
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() {
|
cancel: function cancel() {
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ var Overlay = Module("Overlay", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReferen
|
|||||||
[self, events] = [event, event[callback || "events"]];
|
[self, events] = [event, event[callback || "events"]];
|
||||||
|
|
||||||
for (let [event, callback] in Iterator(events)) {
|
for (let [event, callback] in Iterator(events)) {
|
||||||
let args = [Cu.getWeakReference(target),
|
let args = [util.weakReference(target),
|
||||||
event,
|
event,
|
||||||
util.wrapCallback(callback, self),
|
util.wrapCallback(callback, self),
|
||||||
capture,
|
capture,
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ var Prefs = Module("prefs", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference])
|
|||||||
|
|
||||||
if (!this._observers[pref])
|
if (!this._observers[pref])
|
||||||
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 });
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ var Storage = Module("Storage", {
|
|||||||
if (ref) {
|
if (ref) {
|
||||||
let refs = overlay.getData(ref, "storage-refs");
|
let refs = overlay.getData(ref, "storage-refs");
|
||||||
refs.push(callback);
|
refs.push(callback);
|
||||||
var callbackRef = Cu.getWeakReference(callback);
|
var callbackRef = util.weakReference(callback);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
callbackRef = { get: function () callback };
|
callbackRef = { get: function () callback };
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ var Hive = Class("Hive", {
|
|||||||
get modifiable() this.name !== "system",
|
get modifiable() this.name !== "system",
|
||||||
|
|
||||||
addRef: function (obj) {
|
addRef: function (obj) {
|
||||||
this.refs.push(Cu.getWeakReference(obj));
|
this.refs.push(util.weakReference(obj));
|
||||||
this.dropRef(null);
|
this.dropRef(null);
|
||||||
},
|
},
|
||||||
dropRef: function (obj) {
|
dropRef: function (obj) {
|
||||||
|
|||||||
@@ -1550,6 +1550,15 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
|
|||||||
return res.filter(function (h) !Set.add(seen, h.spec));
|
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
|
* Wraps native exceptions thrown by the called function so that a
|
||||||
* proper stack trace may be retrieved from them.
|
* proper stack trace may be retrieved from them.
|
||||||
|
|||||||
Reference in New Issue
Block a user