Index: lib/child/requestNotifier.js |
=================================================================== |
--- a/lib/child/requestNotifier.js |
+++ b/lib/child/requestNotifier.js |
@@ -32,22 +32,24 @@ let requestEntryMaxId = 0; |
* @type Map.<number,RequestNotifier> |
*/ |
let notifiers = new Map(); |
addMessageListener("AdblockPlus:StartWindowScan", onStartScan); |
addMessageListener("AdblockPlus:ShutdownNotifier", onNotifierShutdown); |
addMessageListener("AdblockPlus:FlashNodes", onFlashNodes); |
addMessageListener("AdblockPlus:RetrieveNodeSize", onRetrieveNodeSize); |
+addMessageListener("AdblockPlus:RetrieveWindowStats", onRetrieveWindowStats); |
onShutdown.add(() => { |
removeMessageListener("AdblockPlus:StartWindowScan", onStartScan); |
removeMessageListener("AdblockPlus:ShutdownNotifier", onNotifierShutdown); |
removeMessageListener("AdblockPlus:FlashNodes", onFlashNodes); |
removeMessageListener("AdblockPlus:RetrieveNodeSize", onRetrieveNodeSize); |
+ removeMessageListener("AdblockPlus:RetrieveWindowStats", onRetrieveWindowStats); |
}); |
function onStartScan(message) |
{ |
let {notifierID, outerWindowID} = message.data; |
let window = Services.wm.getOuterWindowWithId(outerWindowID); |
if (window) |
new RequestNotifier(window, notifierID); |
@@ -71,16 +73,30 @@ function onFlashNodes(message) |
function onRetrieveNodeSize(message) |
{ |
let {notifierID, responseID, requests} = message.data; |
let notifier = notifiers.get(notifierID); |
if (notifier) |
notifier.retrieveNodeSize(requests, responseID); |
} |
+function onRetrieveWindowStats(message) |
+{ |
+ let {responseID, outerWindowID} = message.data; |
+ let window = Services.wm.getOuterWindowWithId(outerWindowID); |
+ if (window) |
+ { |
+ let stats = RequestNotifier.getWindowStatistics(window); |
+ sendAsyncMessage("AdblockPlus:RetrieveWindowStatsResponse", { |
+ responseID, |
+ stats |
+ }); |
+ } |
+} |
+ |
/** |
* 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} window window to attach the notifier to |
* @param {Integer} notifierID Parent notifier ID to be messaged |
*/ |
function RequestNotifier(window, notifierID) |
@@ -333,8 +349,20 @@ RequestNotifier.addNodeData = function(n |
stats.filters[filter] = 1; |
} |
// Notify listeners |
for (let notifier of notifiers.values()) |
if (!notifier.window || notifier.window == topWnd) |
notifier.notifyListener(node, entry); |
} |
+ |
+/** |
+ * Retrieves the statistics for a window. |
+ * @return {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; |
+} |