treestyletab/modules/ReferenceCounter.js
2015-11-10 03:00:43 +09:00

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;
}
};