Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/requestNotifier.js

Issue 29329502: Issue 3222 - Add unique request notifier ID (Closed)
Patch Set: Created Oct. 29, 2015, 6:45 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/requestNotifier.js
===================================================================
--- a/lib/requestNotifier.js
+++ b/lib/requestNotifier.js
@@ -22,49 +22,56 @@
Cu.import("resource://gre/modules/Services.jsm");
let {Utils} = require("utils");
let {BlockingFilter, WhitelistFilter, ElemHideBase, ElemHideFilter, ElemHideException} = require("filterClasses");
let nodeData = new WeakMap();
let windowStats = new WeakMap();
let windowSelection = new WeakMap();
+let requestNotifierMaxId = 0;
let requestEntryMaxId = 0;
/**
- * List of notifiers in use - these notifiers need to receive notifications on
- * new requests.
- * @type RequestNotifier[]
+ * Active RequestNotifier instances by their ID
+ * @type Map
*/
-let activeNotifiers = [];
+let notifiers = new Map();
/**
* Creates a notifier object for a particular window. After creation the window
* will first be scanned for previously saved requests. Once that scan is
* complete only new requests for this window will be reported.
* @param {Window} wnd window to attach the notifier to
* @param {Function} listener listener to be called whenever a new request is found
* @param {Object} [listenerObj] "this" pointer to be used when calling the listener
*/
function RequestNotifier(wnd, listener, listenerObj)
{
this.window = wnd;
this.listener = listener;
this.listenerObj = listenerObj || null;
- activeNotifiers.push(this);
+ this.id = ++requestNotifierMaxId;
+ notifiers.set(this.id, this);
if (wnd)
this.startScan(wnd);
else
this.scanComplete = true;
}
exports.RequestNotifier = RequestNotifier;
RequestNotifier.prototype =
{
/**
+ * The unique ID of this notifier.
+ * @type Integer
+ */
+ id: null,
+
+ /**
* The window this notifier is associated with.
* @type Window
*/
window: null,
/**
* The listener to be called when a new request is found.
* @type Function
@@ -88,19 +95,17 @@ RequestNotifier.prototype =
* will no longer be called after that.
*/
shutdown: function()
{
delete this.window;
delete this.listener;
delete this.listenerObj;
- for (let i = activeNotifiers.length - 1; i >= 0; i--)
- if (activeNotifiers[i] == this)
- activeNotifiers.splice(i, 1);
+ notifiers.delete(this.id);
},
/**
* Notifies listener about a new request.
* @param {Window} wnd
* @param {Node} node
* @param {RequestEntry} entry
*/
@@ -280,17 +285,17 @@ function RequestEntry(node, topWnd, cont
if (filter.text in stats.filters)
stats.filters[filter.text]++;
else
stats.filters[filter.text] = 1;
}
// Notify listeners
- for (let notifier of activeNotifiers)
+ for (let notifier of notifiers.values())
if (!notifier.window || notifier.window == topWnd)
notifier.notifyListener(topWnd, node, this);
}
RequestEntry.prototype =
{
/**
* id of request (used to determine last entry attached to a node)
* @type integer
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld