| Index: lib/requestBlocker.js | 
| =================================================================== | 
| --- a/lib/requestBlocker.js | 
| +++ b/lib/requestBlocker.js | 
| @@ -19,7 +19,8 @@ | 
| "use strict"; | 
| -let {RegExpFilter, BlockingFilter} = require("filterClasses"); | 
| +let {Filter, RegExpFilter, BlockingFilter} = require("filterClasses"); | 
| +let {Subscription} = require("subscriptionClasses"); | 
| let {defaultMatcher} = require("matcher"); | 
| let {FilterNotifier} = require("filterNotifier"); | 
| let {Prefs} = require("prefs"); | 
| @@ -39,7 +40,7 @@ | 
| specificOnly, filter) | 
| { | 
| if (filter) | 
| - FilterNotifier.triggerListeners("filter.hitCount", filter, 0, 0, page); | 
| + FilterNotifier.emit("filter.hitCount", filter, 0, 0, page); | 
| if (devtools) | 
| devtools.logRequest( | 
| @@ -113,56 +114,43 @@ | 
| }); | 
| let ignoreFilterNotifications = false; | 
| -FilterNotifier.addListener((action, arg) => | 
| + | 
| +function onFilterChange(arg, isDisabledAction) | 
| { | 
| // Avoid triggering filters.behaviorChanged multiple times | 
| // when multiple filter hanges happen at the same time. | 
| if (ignoreFilterNotifications) | 
| return; | 
| - if (action != "load") | 
| - { | 
| - let parts = action.split("."); | 
| - let [category, event] = parts; | 
| - if (category == "subscription") | 
| - { | 
| - if (event != "added" && | 
| - event != "removed" && | 
| - event != "updated" && | 
| - event != "disabled") | 
| - return; | 
| + // Ignore disabled subscriptions and filters, unless they just got | 
| + // disabled, otherwise they have no effect on the handler behavior. | 
| + if (arg && arg.disabled && !isDisabledAction) | 
| + return; | 
| - // Ignore empty subscriptions. This includes subscriptions | 
| - // that have just been added, but not downloaded yet. | 
| - if (arg.filters.length == 0) | 
| - return; | 
| - } | 
| - else if (category == "filter") | 
| - { | 
| - if (event != "added" && | 
| - event != "removed" && | 
| - event != "disabled") | 
| - return; | 
| + // Ignore empty subscriptions. This includes subscriptions | 
| + // that have just been added, but not downloaded yet. | 
| + if (arg instanceof Subscription && arg.filters.length == 0) | 
| + return; | 
| - // Ignore all types of filters but request filters, | 
| - // only these have an effect on the handler behavior. | 
| - if (!(arg instanceof RegExpFilter)) | 
| - return; | 
| - } | 
| - else | 
| - return; | 
| - | 
| - // Ignore disabled subscriptions and filters, unless they just got | 
| - // disabled, otherwise they have no effect on the handler behavior. | 
| - if (arg.disabled && event != "disabled") | 
| - return; | 
| - } | 
| + // Ignore all types of filters but request filters, | 
| + // only these have an effect on the handler behavior. | 
| + if (arg instanceof Filter && !(arg instanceof RegExpFilter)) | 
| + return; | 
| ignoreFilterNotifications = true; | 
| setTimeout(() => | 
| { | 
| ignoreFilterNotifications = false; | 
| ext.webRequest.handlerBehaviorChanged(); | 
| - FilterNotifier.triggerListeners("filter.behaviorChanged"); | 
| + FilterNotifier.emit("filter.behaviorChanged"); | 
| }); | 
| -}); | 
| +} | 
| + | 
| +FilterNotifier.on("subscription.added", onFilterChange) | 
| +FilterNotifier.on("subscription.removed", onFilterChange); | 
| +FilterNotifier.on("subscription.updated", onFilterChange); | 
| +FilterNotifier.on("subscription.disabled", arg => onFilterChange(arg, true)); | 
| +FilterNotifier.on("filter.added", onFilterChange); | 
| +FilterNotifier.on("filter.removed", onFilterChange); | 
| +FilterNotifier.on("filter.disabled", arg => onFilterChange(arg, true)); | 
| +FilterNotifier.on("load", onFilterChange); |