Index: messageResponder.js |
diff --git a/messageResponder.js b/messageResponder.js |
index 76991d7dd8d11379aa7ff1f11fd178e588a98407..3bb5c9b4016e2d540d6377e0d05fa15d2e42e66f 100644 |
--- a/messageResponder.js |
+++ b/messageResponder.js |
@@ -20,6 +20,7 @@ |
if (!global.ext) |
global.ext = require("ext_background"); |
+ var port = require("messaging").port; |
var Prefs = require("prefs").Prefs; |
var Utils = require("utils").Utils; |
var FilterStorage = require("filterStorage").FilterStorage; |
@@ -157,255 +158,287 @@ |
return listenerFilters; |
} |
- global.ext.onMessage.addListener(function(message, sender, callback) |
+ port.on("app.get", (message, sender) => |
{ |
- switch (message.type) |
+ if (message.what == "issues") |
{ |
- case "app.get": |
- if (message.what == "issues") |
- { |
- var subscriptionInit = tryRequire("subscriptionInit"); |
- callback({ |
- filterlistsReinitialized: subscriptionInit ? subscriptionInit.reinitialized : false, |
- legacySafariVersion: (info.platform == "safari" && ( |
- Services.vc.compare(info.platformVersion, "6.0") < 0 || // beforeload breaks websites in Safari 5 |
- Services.vc.compare(info.platformVersion, "6.1") == 0 || // extensions are broken in 6.1 and 7.0 |
- Services.vc.compare(info.platformVersion, "7.0") == 0)) |
- }); |
- } |
- else if (message.what == "doclink") |
- callback(Utils.getDocLink(message.link)); |
- else if (message.what == "localeInfo") |
- { |
- var bidiDir; |
- if ("chromeRegistry" in Utils) |
- bidiDir = Utils.chromeRegistry.isLocaleRTL("adblockplus") ? "rtl" : "ltr"; |
- else |
- bidiDir = ext.i18n.getMessage("@@bidi_dir"); |
- |
- callback({locale: Utils.appLocale, bidiDir: bidiDir}); |
- } |
- else if (message.what == "features") |
- { |
- callback({ |
- devToolsPanel: info.platform == "chromium", |
- safariContentBlocker: "safari" in global |
- && "extension" in global.safari |
- && "setContentBlocker" in global.safari.extension |
- }); |
- } |
- else |
- callback(info[message.what]); |
- break; |
- case "app.listen": |
- getListenerFilters(sender.page).app = message.filter; |
- break; |
- case "app.open": |
- if (message.what == "options") |
- ext.showOptions(); |
- break; |
- case "filters.add": |
- var result = require("filterValidation").parseFilter(message.text); |
- var errors = []; |
- if (result.error) |
- errors.push(result.error.toString()); |
- else if (result.filter) |
- FilterStorage.addFilter(result.filter); |
- callback(errors); |
- break; |
- case "filters.blocked": |
- var filter = defaultMatcher.matchesAny(message.url, |
- RegExpFilter.typeMap[message.requestType], message.docDomain, |
- message.thirdParty); |
- callback(filter instanceof BlockingFilter); |
- break; |
- case "filters.get": |
- if (message.what == "elemhideemulation") |
- { |
- var filters = []; |
- var checkWhitelisted = require("whitelisting").checkWhitelisted; |
- |
- if (Prefs.enabled && !checkWhitelisted(sender.page, sender.frame, |
- RegExpFilter.typeMap.DOCUMENT | |
- RegExpFilter.typeMap.ELEMHIDE)) |
- { |
- var hostname = sender.frame.url.hostname; |
- filters = ElemHideEmulation.getRulesForDomain(hostname); |
- filters = filters.map(function(filter) |
- { |
- return { |
- selector: filter.selector, |
- text: filter.text |
- }; |
- }); |
- } |
- callback(filters); |
- break; |
- } |
- |
- var subscription = Subscription.fromURL(message.subscriptionUrl); |
- if (!subscription) |
- { |
- callback([]); |
- break; |
- } |
- |
- callback(subscription.filters.map(convertFilter)); |
- break; |
- case "filters.importRaw": |
- var result = require("filterValidation").parseFilters(message.text); |
- var errors = []; |
- for (var i = 0; i < result.errors.length; i++) |
- { |
- var error = result.errors[i]; |
- if (error.type != "unexpected-filter-list-header") |
- errors.push(error.toString()); |
- } |
+ var subscriptionInit = tryRequire("subscriptionInit"); |
+ return { |
+ filterlistsReinitialized: subscriptionInit ? subscriptionInit.reinitialized : false, |
+ legacySafariVersion: (info.platform == "safari" && ( |
+ Services.vc.compare(info.platformVersion, "6.0") < 0 || // beforeload breaks websites in Safari 5 |
+ Services.vc.compare(info.platformVersion, "6.1") == 0 || // extensions are broken in 6.1 and 7.0 |
+ Services.vc.compare(info.platformVersion, "7.0") == 0)) |
+ }; |
+ } |
- callback(errors); |
- if (errors.length > 0) |
- return; |
+ if (message.what == "doclink") |
+ return Utils.getDocLink(message.link); |
- var seenFilter = Object.create(null); |
- for (var i = 0; i < result.filters.length; i++) |
- { |
- var filter = result.filters[i]; |
- FilterStorage.addFilter(filter); |
- seenFilter[filter.text] = null; |
- } |
+ if (message.what == "localeInfo") |
+ { |
+ var bidiDir; |
+ if ("chromeRegistry" in Utils) |
+ bidiDir = Utils.chromeRegistry.isLocaleRTL("adblockplus") ? "rtl" : "ltr"; |
+ else |
+ bidiDir = ext.i18n.getMessage("@@bidi_dir"); |
- if (!message.removeExisting) |
- return; |
+ return {locale: Utils.appLocale, bidiDir: bidiDir}; |
+ } |
- for (var i = 0; i < FilterStorage.subscriptions.length; i++) |
- { |
- var subscription = FilterStorage.subscriptions[i]; |
- if (!(subscription instanceof SpecialSubscription)) |
- continue; |
- |
- for (var j = subscription.filters.length - 1; j >= 0; j--) |
- { |
- var filter = subscription.filters[j]; |
- if (/^@@\|\|([^\/:]+)\^\$document$/.test(filter.text)) |
- continue; |
- |
- if (!(filter.text in seenFilter)) |
- FilterStorage.removeFilter(filter); |
- } |
- } |
- break; |
- case "filters.listen": |
- getListenerFilters(sender.page).filter = message.filter; |
- addFilterListeners("filter", message.filter); |
- break; |
- case "filters.remove": |
- var filter = Filter.fromText(message.text); |
- var subscription = null; |
- if (message.subscriptionUrl) |
- subscription = Subscription.fromURL(message.subscriptionUrl); |
- |
- if (!subscription) |
- FilterStorage.removeFilter(filter); |
- else |
- FilterStorage.removeFilter(filter, subscription, message.index); |
- break; |
- case "prefs.get": |
- callback(Prefs[message.key]); |
- break; |
- case "prefs.listen": |
- getListenerFilters(sender.page).pref = message.filter; |
- message.filter.forEach(function(preference) |
+ if (message.what == "features") |
+ { |
+ return { |
+ devToolsPanel: info.platform == "chromium", |
+ safariContentBlocker: "safari" in global |
+ && "extension" in global.safari |
+ && "setContentBlocker" in global.safari.extension |
+ }; |
+ } |
+ |
+ return info[message.what]; |
+ }); |
+ |
+ port.on("app.listen", (message, sender) => |
+ { |
+ getListenerFilters(sender.page).app = message.filter; |
+ }); |
+ |
+ port.on("app.open", (message, sender) => |
+ { |
+ if (message.what == "options") |
+ ext.showOptions(); |
+ }); |
+ |
+ port.on("filters.add", (message, sender) => |
+ { |
+ var result = require("filterValidation").parseFilter(message.text); |
+ var errors = []; |
+ if (result.error) |
+ errors.push(result.error.toString()); |
+ else if (result.filter) |
+ FilterStorage.addFilter(result.filter); |
+ |
+ return errors; |
+ }); |
+ |
+ port.on("filters.blocked", (message, sender) => |
+ { |
+ var filter = defaultMatcher.matchesAny(message.url, |
+ RegExpFilter.typeMap[message.requestType], message.docDomain, |
+ message.thirdParty); |
+ |
+ return filter instanceof BlockingFilter; |
+ }); |
+ |
+ port.on("filters.get", (message, sender) => |
+ { |
+ if (message.what == "elemhideemulation") |
+ { |
+ var filters = []; |
+ var checkWhitelisted = require("whitelisting").checkWhitelisted; |
+ |
+ if (Prefs.enabled && !checkWhitelisted(sender.page, sender.frame, |
+ RegExpFilter.typeMap.DOCUMENT | |
+ RegExpFilter.typeMap.ELEMHIDE)) |
+ { |
+ var hostname = sender.frame.url.hostname; |
+ filters = ElemHideEmulation.getRulesForDomain(hostname); |
+ filters = filters.map(function(filter) |
{ |
- if (!(preference in listenedPreferences)) |
- { |
- listenedPreferences[preference] = null; |
- Prefs.on(preference, function() |
- { |
- sendMessage("pref", preference, Prefs[preference]); |
- }); |
- } |
+ return { |
+ selector: filter.selector, |
+ text: filter.text |
+ }; |
}); |
- break; |
- case "prefs.toggle": |
- if (message.key == "notifications_ignoredcategories") |
- NotificationStorage.toggleIgnoreCategory("*"); |
- else |
- Prefs[message.key] = !Prefs[message.key]; |
- break; |
- case "subscriptions.add": |
- var subscription = Subscription.fromURL(message.url); |
- if ("title" in message) |
- subscription.title = message.title; |
- if ("homepage" in message) |
- subscription.homepage = message.homepage; |
- |
- if (message.confirm) |
- { |
- ext.showOptions(function() |
- { |
- sendMessage("app", "addSubscription", subscription); |
- }); |
- } |
- else |
- { |
- subscription.disabled = false; |
- FilterStorage.addSubscription(subscription); |
- |
- if (subscription instanceof DownloadableSubscription && !subscription.lastDownload) |
- Synchronizer.execute(subscription); |
- } |
- break; |
- case "subscriptions.get": |
- var subscriptions = FilterStorage.subscriptions.filter(function(s) |
+ } |
+ return filters; |
+ } |
+ |
+ var subscription = Subscription.fromURL(message.subscriptionUrl); |
+ if (!subscription) |
+ return []; |
+ |
+ return subscription.filters.map(convertFilter); |
+ }); |
+ |
+ port.on("filters.importRaw", (message, sender) => |
+ { |
+ var result = require("filterValidation").parseFilters(message.text); |
+ var errors = []; |
+ for (var i = 0; i < result.errors.length; i++) |
+ { |
+ var error = result.errors[i]; |
+ if (error.type != "unexpected-filter-list-header") |
+ errors.push(error.toString()); |
+ } |
+ |
+ if (errors.length > 0) |
+ return errors; |
+ |
+ var seenFilter = Object.create(null); |
+ for (var i = 0; i < result.filters.length; i++) |
+ { |
+ var filter = result.filters[i]; |
+ FilterStorage.addFilter(filter); |
+ seenFilter[filter.text] = null; |
+ } |
+ |
+ if (!message.removeExisting) |
+ return errors; |
+ |
+ for (var i = 0; i < FilterStorage.subscriptions.length; i++) |
+ { |
+ var subscription = FilterStorage.subscriptions[i]; |
+ if (!(subscription instanceof SpecialSubscription)) |
+ continue; |
+ |
+ for (var j = subscription.filters.length - 1; j >= 0; j--) |
+ { |
+ var filter = subscription.filters[j]; |
+ if (/^@@\|\|([^\/:]+)\^\$document$/.test(filter.text)) |
+ continue; |
+ |
+ if (!(filter.text in seenFilter)) |
+ FilterStorage.removeFilter(filter); |
+ } |
+ } |
+ |
+ return errors; |
+ }); |
+ |
+ port.on("filters.listen", (message, sender) => |
+ { |
+ getListenerFilters(sender.page).filter = message.filter; |
+ addFilterListeners("filter", message.filter); |
+ }); |
+ |
+ port.on("filters.remove", (message, sender) => |
+ { |
+ var filter = Filter.fromText(message.text); |
+ var subscription = null; |
+ if (message.subscriptionUrl) |
+ subscription = Subscription.fromURL(message.subscriptionUrl); |
+ |
+ if (!subscription) |
+ FilterStorage.removeFilter(filter); |
+ else |
+ FilterStorage.removeFilter(filter, subscription, message.index); |
+ }); |
+ |
+ port.on("prefs.get", (message, sender) => |
+ { |
+ return Prefs[message.key]; |
+ }); |
+ |
+ port.on("prefs.listen", (message, sender) => |
+ { |
+ getListenerFilters(sender.page).pref = message.filter; |
+ message.filter.forEach(function(preference) |
+ { |
+ if (!(preference in listenedPreferences)) |
+ { |
+ listenedPreferences[preference] = null; |
+ Prefs.on(preference, function() |
{ |
- if (message.ignoreDisabled && s.disabled) |
- return false; |
- if (s instanceof DownloadableSubscription && message.downloadable) |
- return true; |
- if (s instanceof SpecialSubscription && message.special) |
- return true; |
- return false; |
+ sendMessage("pref", preference, Prefs[preference]); |
}); |
- callback(subscriptions.map(convertSubscription)); |
- break; |
- case "subscriptions.listen": |
- getListenerFilters(sender.page).subscription = message.filter; |
- addFilterListeners("subscription", message.filter); |
- break; |
- case "subscriptions.remove": |
- var subscription = Subscription.fromURL(message.url); |
- if (subscription.url in FilterStorage.knownSubscriptions) |
- FilterStorage.removeSubscription(subscription); |
- break; |
- case "subscriptions.toggle": |
- var subscription = Subscription.fromURL(message.url); |
- if (subscription.url in FilterStorage.knownSubscriptions) |
- { |
- if (subscription.disabled || message.keepInstalled) |
- subscription.disabled = !subscription.disabled; |
- else |
- FilterStorage.removeSubscription(subscription); |
- } |
- else |
- { |
- subscription.disabled = false; |
- subscription.title = message.title; |
- subscription.homepage = message.homepage; |
- FilterStorage.addSubscription(subscription); |
- if (!subscription.lastDownload) |
- Synchronizer.execute(subscription); |
- } |
- break; |
- case "subscriptions.update": |
- var subscriptions = message.url ? [Subscription.fromURL(message.url)] : |
- FilterStorage.subscriptions; |
- for (var i = 0; i < subscriptions.length; i++) |
- { |
- var subscription = subscriptions[i]; |
- if (subscription instanceof DownloadableSubscription) |
- Synchronizer.execute(subscription, true); |
- } |
- break; |
+ } |
+ }); |
+ }); |
+ |
+ port.on("prefs.toggle", (message, sender) => |
+ { |
+ if (message.key == "notifications_ignoredcategories") |
+ NotificationStorage.toggleIgnoreCategory("*"); |
+ else |
+ Prefs[message.key] = !Prefs[message.key]; |
+ }); |
+ |
+ port.on("subscriptions.add", (message, sender) => |
+ { |
+ var subscription = Subscription.fromURL(message.url); |
+ if ("title" in message) |
+ subscription.title = message.title; |
+ if ("homepage" in message) |
+ subscription.homepage = message.homepage; |
+ |
+ if (message.confirm) |
+ { |
+ ext.showOptions(function() |
+ { |
+ sendMessage("app", "addSubscription", subscription); |
+ }); |
+ } |
+ else |
+ { |
+ subscription.disabled = false; |
+ FilterStorage.addSubscription(subscription); |
+ |
+ if (subscription instanceof DownloadableSubscription && !subscription.lastDownload) |
+ Synchronizer.execute(subscription); |
+ } |
+ }); |
+ |
+ port.on("subscriptions.get", (message, sender) => |
+ { |
+ var subscriptions = FilterStorage.subscriptions.filter(function(s) |
+ { |
+ if (message.ignoreDisabled && s.disabled) |
+ return false; |
+ if (s instanceof DownloadableSubscription && message.downloadable) |
+ return true; |
+ if (s instanceof SpecialSubscription && message.special) |
+ return true; |
+ return false; |
+ }); |
+ |
+ return subscriptions.map(convertSubscription); |
+ }); |
+ |
+ port.on("subscriptions.listen", (message, sender) => |
+ { |
+ getListenerFilters(sender.page).subscription = message.filter; |
+ addFilterListeners("subscription", message.filter); |
+ }); |
+ |
+ port.on("subscriptions.remove", (message, sender) => |
+ { |
+ var subscription = Subscription.fromURL(message.url); |
+ if (subscription.url in FilterStorage.knownSubscriptions) |
+ FilterStorage.removeSubscription(subscription); |
+ }); |
+ |
+ port.on("subscriptions.toggle", (message, sender) => |
+ { |
+ var subscription = Subscription.fromURL(message.url); |
+ if (subscription.url in FilterStorage.knownSubscriptions) |
+ { |
+ if (subscription.disabled || message.keepInstalled) |
+ subscription.disabled = !subscription.disabled; |
+ else |
+ FilterStorage.removeSubscription(subscription); |
+ } |
+ else |
+ { |
+ subscription.disabled = false; |
+ subscription.title = message.title; |
+ subscription.homepage = message.homepage; |
+ FilterStorage.addSubscription(subscription); |
+ if (!subscription.lastDownload) |
+ Synchronizer.execute(subscription); |
+ } |
+ }); |
+ |
+ port.on("subscriptions.update", (message, sender) => |
+ { |
+ var subscriptions = message.url ? [Subscription.fromURL(message.url)] : |
+ FilterStorage.subscriptions; |
+ for (var i = 0; i < subscriptions.length; i++) |
+ { |
+ var subscription = subscriptions[i]; |
+ if (subscription instanceof DownloadableSubscription) |
+ Synchronizer.execute(subscription, true); |
} |
}); |
})(this); |