43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
/**
|
|
* How to use:
|
|
*
|
|
* 1. Insert "ReferenceCounter.add('unique key'); after "addEventListener()"
|
|
* 2. Insert "ReferenceCounter.remove('unique key'); after "removeEventListener()"
|
|
* 3. Open and close windows multiple times.
|
|
* 4. Go to the browser console and run the script:
|
|
* (function() { let { ReferenceCounter } = Components.utils.import('resource://treestyletab-modules/ReferenceCounter.js', {}); return ReferenceCounter.report() })();
|
|
*
|
|
* Expected result for good case:
|
|
*
|
|
* Blank array is returned.
|
|
*
|
|
* Expected result for bad case:
|
|
*
|
|
* Not-removed counters are reported as the elements of the returned array.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
var EXPORTED_SYMBOLS = ['ReferenceCounter'];
|
|
|
|
var ReferenceCounter = {
|
|
_listeners: {},
|
|
add: function(aKey) {
|
|
this._listeners[aKey] = this._listeners[aKey] || 0;
|
|
this._listeners[aKey]++;
|
|
},
|
|
remove: function(aKey) {
|
|
this._listeners[aKey] = this._listeners[aKey] || 0;
|
|
this._listeners[aKey]--;
|
|
},
|
|
report: function() {
|
|
var keys = [];
|
|
Object.keys(this._listeners).forEach(function(aKey) {
|
|
if (this._listeners[aKey] <= 1)
|
|
return;
|
|
keys.push(aKey+'('+this._listeners[aKey]+')');
|
|
}, this);
|
|
return keys;
|
|
}
|
|
};
|