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

Unified Diff: lib/requestNotifier.js

Issue 29329505: Issue 3222 - Replace the RequestEntry class by a plain object (Closed)
Patch Set: Created Oct. 29, 2015, 6:52 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
@@ -102,17 +102,17 @@ RequestNotifier.prototype =
notifiers.delete(this.id);
},
/**
* Notifies listener about a new request.
* @param {Window} wnd
* @param {Node} node
- * @param {RequestEntry} entry
+ * @param {Object} entry
*/
notifyListener: function(wnd, node, entry)
{
this.listener.call(this.listenerObj, wnd, node, entry, this.scanComplete);
},
/**
* Number of currently posted scan events (will be 0 when the scan finishes
@@ -182,38 +182,87 @@ RequestNotifier.getSelection = function(
* @param {String} contentType request type, e.g. "IMAGE"
* @param {String} docDomain domain of the document that initiated the request
* @param {Boolean} thirdParty will be true if a third-party server has been requested
* @param {String} location the address that has been requested
* @param {Filter} filter filter applied to the request or null if none
*/
RequestNotifier.addNodeData = function(/**Node*/ node, /**Window*/ topWnd, /**String*/ contentType, /**String*/ docDomain, /**Boolean*/ thirdParty, /**String*/ location, /**Filter*/ filter)
{
- return new RequestEntry(node, topWnd, contentType, docDomain, thirdParty, location, filter);
+ let entry = {
+ id: ++requestEntryMaxId,
+ type: contentType,
+ docDomain, thirdParty, location, filter
+ }
+
+ let existingData = nodeData.get(node);
+ if (typeof existingData == "undefined")
+ {
+ existingData = {};
+ nodeData.set(node, existingData);
+ }
+
+ // Add this request to the node data
+ existingData[contentType + " " + location] = entry;
+
+ // Update window statistics
+ if (!windowStats.has(topWnd.document))
+ {
+ windowStats.set(topWnd.document, {
+ items: 0,
+ hidden: 0,
+ blocked: 0,
+ whitelisted: 0,
+ filters: {}
+ });
+ }
+
+ let stats = windowStats.get(topWnd.document);
+ if (!filter || !(filter instanceof ElemHideBase))
+ stats.items++;
+ if (filter)
+ {
+ if (filter instanceof BlockingFilter)
+ stats.blocked++;
+ else if (filter instanceof WhitelistFilter || filter instanceof ElemHideException)
+ stats.whitelisted++;
+ else if (filter instanceof ElemHideFilter)
+ stats.hidden++;
+
+ if (filter.text in stats.filters)
+ stats.filters[filter.text]++;
+ else
+ stats.filters[filter.text] = 1;
+ }
+
+ // Notify listeners
+ for (let notifier of notifiers.values())
+ if (!notifier.window || notifier.window == topWnd)
+ notifier.notifyListener(topWnd, node, entry);
}
/**
* Retrieves the statistics for a window.
* @result {Object} Object with the properties items, blocked, whitelisted, hidden, filters containing statistics for the window (might be null)
*/
RequestNotifier.getWindowStatistics = function(/**Window*/ wnd)
{
if (windowStats.has(wnd.document))
return windowStats.get(wnd.document);
else
return null;
}
/**
- * Retrieves the request entry associated with a DOM node.
+ * Retrieves the request data associated with a DOM node.
* @param {Node} node
* @param {Boolean} noParent if missing or false, the search will extend to the parent nodes until one is found that has data associated with it
* @param {Integer} [type] request type to be looking for
* @param {String} [location] request location to be looking for
- * @result {[Node, RequestEntry]}
+ * @result {[Node, Object]}
* @static
*/
RequestNotifier.getDataForNode = function(node, noParent, type, location)
{
while (node)
{
let data = nodeData.get(node);
if (typeof data != "undefined")
@@ -242,104 +291,8 @@ RequestNotifier.getDataForNode = functio
else
{
node = null;
}
}
return null;
};
-
-function RequestEntry(node, topWnd, contentType, docDomain, thirdParty, location, filter)
-{
- this.type = contentType;
- this.docDomain = docDomain;
- this.thirdParty = thirdParty;
- this.location = location;
- this.filter = filter;
- this.id = ++requestEntryMaxId;
-
- this.attachToNode(node);
-
- // Update window statistics
- if (!windowStats.has(topWnd.document))
- {
- windowStats.set(topWnd.document, {
- items: 0,
- hidden: 0,
- blocked: 0,
- whitelisted: 0,
- filters: {}
- });
- }
-
- let stats = windowStats.get(topWnd.document);
- if (!filter || !(filter instanceof ElemHideBase))
- stats.items++;
- if (filter)
- {
- if (filter instanceof BlockingFilter)
- stats.blocked++;
- else if (filter instanceof WhitelistFilter || filter instanceof ElemHideException)
- stats.whitelisted++;
- else if (filter instanceof ElemHideFilter)
- stats.hidden++;
-
- if (filter.text in stats.filters)
- stats.filters[filter.text]++;
- else
- stats.filters[filter.text] = 1;
- }
-
- // Notify listeners
- 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
- */
- id: 0,
- /**
- * Content type of the request, e.g. "IMAGE"
- * @type String
- */
- type: null,
- /**
- * Domain name of the requesting document
- * @type String
- */
- docDomain: null,
- /**
- * True if the request goes to a different domain than the domain of the containing document
- * @type Boolean
- */
- thirdParty: false,
- /**
- * Address being requested
- * @type String
- */
- location: null,
- /**
- * Filter that was applied to this request (if any)
- * @type Filter
- */
- filter: null,
-
- /**
- * Attaches this request object to a DOM node.
- */
- attachToNode: function(/**Node*/ node)
- {
- let existingData = nodeData.get(node);
- if (typeof existingData == "undefined")
- {
- existingData = {};
- nodeData.set(node, existingData);
- }
-
- // Add this request to the node data
- existingData[this.type + " " + this.location] = this;
- }
-};
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld