Index: lib/stats.js |
=================================================================== |
--- a/lib/stats.js |
+++ b/lib/stats.js |
@@ -1,6 +1,6 @@ |
/* |
* This file is part of Adblock Plus <http://adblockplus.org/>, |
- * Copyright (C) 2006-2013 Eyeo GmbH |
+ * Copyright (C) 2006-2014 Eyeo GmbH |
* |
* Adblock Plus is free software: you can redistribute it and/or modify |
* it under the terms of the GNU General Public License version 3 as |
@@ -24,25 +24,26 @@ |
let {FilterNotifier} = require("filterNotifier"); |
let badgeColor = "#646464"; |
+let statsPerPage = new ext.PageMap(); |
/** |
- * Get statistics for specified tab |
+ * Get statistics for specified page |
* @param {String} key field key |
- * @param {Number} tabId tab ID (leave undefined for total stats) |
+ * @param {Page} page field page |
* @return {Number} field value |
*/ |
-let getStats = exports.getStats = function getStats(key, tab) |
+let getStats = exports.getStats = function getStats(key, page) |
{ |
- if (!tab) |
+ if (!page) |
return (key in Prefs.stats_total ? Prefs.stats_total[key] : 0); |
- let frameData = getFrameData(tab, 0); |
- return (frameData && key in frameData ? frameData[key] : 0); |
+ let pageStats = statsPerPage.get(page); |
+ return pageStats ? pageStats.blocked : 0; |
}; |
-FilterNotifier.addListener(function(action, item, newValue, oldValue, tab) |
+FilterNotifier.addListener(function(action, item, newValue, oldValue, page) |
{ |
- if (action != "filter.hitCount" || !tab) |
+ if (action != "filter.hitCount" || !page) |
return; |
let blocked = item instanceof BlockingFilter; |
@@ -56,64 +57,53 @@ |
Prefs.stats_total.blocked = 1; |
Prefs.stats_total = Prefs.stats_total; |
- let frameData = getFrameData(tab, 0); |
- if (frameData) |
+ let pageStats = statsPerPage.get(page); |
+ if (!pageStats) |
{ |
- if ("blocked" in frameData) |
- frameData.blocked++; |
- else |
- frameData.blocked = 1; |
+ pageStats = {}; |
+ statsPerPage.set(page, pageStats); |
} |
+ if ("blocked" in pageStats) |
+ pageStats.blocked++; |
+ else |
+ pageStats.blocked = 1; |
// Update number in icon |
if (Prefs.show_statsinicon) |
{ |
- tab.browserAction.setBadge({ |
+ page.browserAction.setBadge({ |
color: badgeColor, |
- number: frameData.blocked |
+ number: pageStats.blocked |
}); |
} |
} |
}); |
-/** |
- * Execute function for each tab in any window |
- * @param {Function} func function to be executed |
- */ |
-function forEachTab(func) |
-{ |
- ext.windows.getAll(function(windows) |
- { |
- for each (let window in windows) |
- { |
- window.getAllTabs(function(tabs) |
- { |
- for (let i = 0; i < tabs.length; i++) |
- func(tabs[i]); |
- }); |
- } |
- }); |
-} |
- |
Prefs.addListener(function(name) |
{ |
if (name != "show_statsinicon") |
return; |
- forEachTab(function(tab) |
+ ext.pages.query({}, function(pages) |
{ |
- let badge = null; |
- if (Prefs.show_statsinicon) |
+ for (var i = 0; i < pages.length; i++) |
{ |
- let frameData = getFrameData(tab, 0); |
- if (frameData && "blocked" in frameData) |
+ let page = pages[i]; |
+ let badge = null; |
+ |
+ if (Prefs.show_statsinicon) |
{ |
- badge = { |
- color: badgeColor, |
- number: frameData.blocked |
- }; |
+ let pageStats = statsPerPage.get(page); |
+ if (pageStats && "blocked" in pageStats) |
+ { |
+ badge = { |
+ color: badgeColor, |
+ number: pageStats.blocked |
+ }; |
+ } |
} |
+ |
+ page.browserAction.setBadge(badge); |
} |
- tab.browserAction.setBadge(badge); |
}); |
}); |