Index: lib/filterListener.js |
=================================================================== |
--- a/lib/filterListener.js |
+++ b/lib/filterListener.js |
@@ -214,77 +214,87 @@ |
ElemHideExceptions.remove(filter); |
} |
else if (filter instanceof SnippetFilter) |
Snippets.remove(filter); |
} |
const primes = [101, 109, 131, 149, 163, 179, 193, 211, 229, 241]; |
-function addFilters(filters) |
+function addSubscriptionFilters(subscription) |
{ |
// We add filters using pseudo-random ordering. Reason is that ElemHide will |
// assign consecutive filter IDs that might be visible to the website. The |
// randomization makes sure that no conclusion can be made about the actual |
// filters applying there. We have ten prime numbers to use as iteration step, |
// any of those can be chosen as long as the array length isn't divisible by |
// it. |
- let len = filters.length; |
+ let len = subscription.filterCount; |
if (!len) |
return; |
let current = (Math.random() * len) | 0; |
let step; |
do |
{ |
step = primes[(Math.random() * primes.length) | 0]; |
} while (len % step == 0); |
for (let i = 0; i < len; i++, current = (current + step) % len) |
- addFilter(filters[current]); |
+ addFilter(subscription.filterAt(current)); |
} |
function onSubscriptionAdded(subscription) |
{ |
FilterListener.setDirty(1); |
if (!subscription.disabled) |
- addFilters(subscription.filters); |
+ addSubscriptionFilters(subscription); |
} |
function onSubscriptionRemoved(subscription) |
{ |
FilterListener.setDirty(1); |
if (!subscription.disabled) |
- subscription.filters.forEach(removeFilter); |
+ { |
+ for (let filter of subscription.filters()) |
+ removeFilter(filter); |
+ } |
} |
function onSubscriptionDisabled(subscription, newValue) |
{ |
FilterListener.setDirty(1); |
if (filterStorage.knownSubscriptions.has(subscription.url)) |
{ |
if (newValue == false) |
- addFilters(subscription.filters); |
+ { |
+ addSubscriptionFilters(subscription); |
+ } |
else |
- subscription.filters.forEach(removeFilter); |
+ { |
+ for (let filter of subscription.filters()) |
+ removeFilter(filter); |
+ } |
} |
} |
function onSubscriptionUpdated(subscription, oldFilters) |
{ |
FilterListener.setDirty(1); |
if (!subscription.disabled && |
filterStorage.knownSubscriptions.has(subscription.url)) |
{ |
- oldFilters.forEach(removeFilter); |
- addFilters(subscription.filters); |
+ for (let filter of oldFilters) |
+ removeFilter(filter); |
+ |
+ addSubscriptionFilters(subscription); |
} |
} |
function onFilterHitCount(filter, newValue) |
{ |
if (newValue == 0) |
FilterListener.setDirty(0); |
else |
@@ -334,16 +344,18 @@ |
defaultMatcher.clear(); |
ElemHide.clear(); |
ElemHideEmulation.clear(); |
ElemHideExceptions.clear(); |
Snippets.clear(); |
for (let subscription of filterStorage.subscriptions()) |
{ |
if (!subscription.disabled) |
- addFilters(subscription.filters); |
+ addSubscriptionFilters(subscription); |
+ |
+ subscription.freeFilters(); |
} |
} |
function onSave() |
{ |
isDirty = 0; |
} |