 Issue 29329786:
  Issue 3258 - Blockable items: fix Size column  (Closed)
    
  
    Issue 29329786:
  Issue 3258 - Blockable items: fix Size column  (Closed) 
  | Index: lib/requestNotifier.js | 
| =================================================================== | 
| --- a/lib/requestNotifier.js | 
| +++ b/lib/requestNotifier.js | 
| @@ -31,45 +31,54 @@ let requestNotifierMaxId = 0; | 
| let notifiers = new Map(); | 
| let messageManager = Cc["@mozilla.org/parentprocessmessagemanager;1"] | 
| .getService(Ci.nsIMessageListenerManager) | 
| .QueryInterface(Ci.nsIMessageBroadcaster); | 
| Utils.addChildMessageListener("AdblockPlus:FoundNodeData", onNodeData); | 
| Utils.addChildMessageListener("AdblockPlus:ScanComplete", onScanComplete); | 
| +Utils.addChildMessageListener("AdblockPlus:RetrieveNodeSizeResponse", onNodeSizeReceived); | 
| function onNodeData({notifierID, data}) | 
| { | 
| let notifier = notifiers.get(notifierID); | 
| if (notifier) | 
| notifier.notifyListener(data); | 
| } | 
| function onScanComplete(notifierID) | 
| { | 
| let notifier = notifiers.get(notifierID); | 
| if (notifier) | 
| notifier.onComplete(); | 
| } | 
| +function onNodeSizeReceived({notifierID, responseID, size}) | 
| +{ | 
| + let notifier = notifiers.get(notifierID); | 
| + if (notifier) | 
| + notifier.onNodeSizeReceived(responseID, size); | 
| +} | 
| + | 
| /** | 
| * 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 {Integer} outerWindowID ID of the 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(outerWindowID, listener, listenerObj) | 
| { | 
| this.listener = listener; | 
| this.listenerObj = listenerObj || null; | 
| this.id = ++requestNotifierMaxId; | 
| notifiers.set(this.id, this); | 
| + this._nodeSizeCallbacks = new Map(); | 
| messageManager.broadcastAsyncMessage("AdblockPlus:StartWindowScan", { | 
| notifierID: this.id, | 
| outerWindowID: outerWindowID | 
| }); | 
| } | 
| exports.RequestNotifier = RequestNotifier; | 
| @@ -135,16 +144,49 @@ RequestNotifier.prototype = | 
| if (!requests) | 
| requests = []; | 
| messageManager.broadcastAsyncMessage("AdblockPlus:FlashNodes", { | 
| notifierID: this.id, | 
| requests, | 
| scrollToItem | 
| }); | 
| + }, | 
| + | 
| + _nodeSizeMaxResponseID: 0, | 
| + _nodeSizeCallbacks: null, | 
| + | 
| + /** | 
| + * Attempts to calculate the size of the nodes associated with the requests. | 
| + * Callback will only be called on success. | 
| + * @param {number[]} requests list of request IDs that were previously | 
| + * reported by this notifier. | 
| + * @param {Function} callback function to be called with two parameters (x,y) | 
| 
Thomas Greiner
2015/11/24 14:02:20
Suggestion: JSDoc provides a way to document callb
 
Wladimir Palant
2015/11/25 22:22:49
I've seen that but I'd rather not make it too comp
 | 
| + */ | 
| + retrieveNodeSize: function(requests, callback) | 
| + { | 
| + if (!requests) | 
| + requests = []; | 
| + | 
| + let id = ++this._nodeSizeMaxResponseID; | 
| + this._nodeSizeCallbacks.set(id, callback); | 
| + | 
| + messageManager.broadcastAsyncMessage("AdblockPlus:RetrieveNodeSize", { | 
| + notifierID: this.id, | 
| + responseID: id, | 
| + requests, | 
| + }); | 
| + }, | 
| + | 
| + onNodeSizeReceived: function(responseID, size) | 
| + { | 
| + let callback = this._nodeSizeCallbacks.get(responseID); | 
| + this._nodeSizeCallbacks.delete(responseID); | 
| + if (size && typeof callback == "function") | 
| + callback(size); | 
| } | 
| }; | 
| RequestNotifier.storeSelection = function(/**Window*/ wnd, /**String*/ selection) | 
| { | 
| windowSelection.set(wnd.document, selection); | 
| }; | 
| RequestNotifier.getSelection = function(/**Window*/ wnd) /**String*/ |