| 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 |
| @@ -331,19 +341,20 @@ |
| { |
| isDirty = 0; |
| defaultMatcher.clear(); |
| ElemHide.clear(); |
| ElemHideEmulation.clear(); |
| ElemHideExceptions.clear(); |
| Snippets.clear(); |
| + |
| for (let subscription of filterStorage.subscriptions()) |
| { |
| if (!subscription.disabled) |
| - addFilters(subscription.filters); |
| + addSubscriptionFilters(subscription); |
| } |
| } |
| function onSave() |
| { |
| isDirty = 0; |
| } |