| Index: background.js |
| =================================================================== |
| --- a/background.js |
| +++ b/background.js |
| @@ -24,7 +24,6 @@ |
| with(require("whitelisting")) |
| { |
| this.checkWhitelisted = checkWhitelisted; |
| - this.processKey = processKey; |
| this.getKey = getKey; |
| } |
| with(require("url")) |
| @@ -39,10 +38,9 @@ |
| var ElemHide = require("elemHide").ElemHide; |
| var defaultMatcher = require("matcher").defaultMatcher; |
| var Prefs = require("prefs").Prefs; |
| -var parseFilters = require("filterValidation").parseFilters; |
| -var composeFilters = require("filterComposer").composeFilters; |
| var updateIcon = require("icon").updateIcon; |
| var showNextNotificationForUrl = require("notificationHelper").showNextNotificationForUrl; |
| +var port = require("messaging").port; |
| var devtools = require("devtools"); |
| // Special-case domains for which we cannot use style-based hiding rules. |
| @@ -120,171 +118,92 @@ |
| return {filters: filters, exceptions: exceptions}; |
| } |
| -ext.onMessage.addListener(function (msg, sender, sendResponse) |
| +port.on("get-selectors", function(msg, sender) |
| { |
| - switch (msg.type) |
| + var selectors = []; |
| + var trace = devtools && devtools.hasPanel(sender.page); |
| + |
| + if (!checkWhitelisted(sender.page, sender.frame, |
| + RegExpFilter.typeMap.DOCUMENT | |
| + RegExpFilter.typeMap.ELEMHIDE)) |
| { |
| - case "composer.openDialog": |
| - ext.windows.create({ |
| - url: ext.getURL("block.html"), |
| - left: 50, |
| - top: 50, |
| - width: 420, |
| - height: 200, |
| - focused: true, |
| - type: "popup" |
| - }, |
| - function (popupPage) { |
| - var popupPageId = popupPage.id; |
| - function onRemoved(removedPageId) |
| - { |
| - if (popupPageId == removedPageId) |
| - { |
| - sender.page.sendMessage({ |
| - type: "composer.content.dialogClosed", |
| - popupId: popupPageId |
| - }); |
| - ext.pages.onRemoved.removeListener(onRemoved); |
| - } |
| - } |
| - ext.pages.onRemoved.addListener(onRemoved); |
| + var noStyleRules = false; |
| + var specificOnly = checkWhitelisted(sender.page, sender.frame, |
| + RegExpFilter.typeMap.GENERICHIDE); |
| + var host = extractHostFromFrame(sender.frame); |
| - sendResponse(popupPageId); |
| + for (var i = 0; i < noStyleRulesHosts.length; i++) |
| + { |
| + var noStyleHost = noStyleRulesHosts[i]; |
| + if (host == noStyleHost || (host.length > noStyleHost.length && |
| + host.substr(host.length - noStyleHost.length - 1) == "." + noStyleHost)) |
| + { |
| + noStyleRules = true; |
| + } |
| + } |
| + selectors = ElemHide.getSelectorsForDomain(host, specificOnly); |
| + if (noStyleRules) |
| + { |
| + selectors = selectors.filter(function(s) |
| + { |
| + return !/\[style[\^\$]?=/.test(s); |
| }); |
| - return true; |
| - break; |
| - case "get-selectors": |
| - var selectors = []; |
| - var trace = devtools && devtools.hasPanel(sender.page); |
| + } |
| + } |
| - if (!checkWhitelisted(sender.page, sender.frame, |
| - RegExpFilter.typeMap.DOCUMENT | |
| - RegExpFilter.typeMap.ELEMHIDE)) |
| - { |
| - var noStyleRules = false; |
| - var specificOnly = checkWhitelisted(sender.page, sender.frame, |
| - RegExpFilter.typeMap.GENERICHIDE); |
| - var host = extractHostFromFrame(sender.frame); |
| + return {selectors: selectors, trace: trace}; |
| +}); |
| - for (var i = 0; i < noStyleRulesHosts.length; i++) |
| - { |
| - var noStyleHost = noStyleRulesHosts[i]; |
| - if (host == noStyleHost || (host.length > noStyleHost.length && |
| - host.substr(host.length - noStyleHost.length - 1) == "." + noStyleHost)) |
| - { |
| - noStyleRules = true; |
| - } |
| - } |
| - selectors = ElemHide.getSelectorsForDomain(host, specificOnly); |
| - if (noStyleRules) |
| - { |
| - selectors = selectors.filter(function(s) |
| - { |
| - return !/\[style[\^\$]?=/.test(s); |
| - }); |
| - } |
| - } |
| +port.on("should-collapse", function(msg, sender) |
| +{ |
| + if (checkWhitelisted(sender.page, sender.frame)) |
| + return false; |
| - sendResponse({selectors: selectors, trace: trace}); |
| - break; |
| - case "should-collapse": |
| - if (checkWhitelisted(sender.page, sender.frame)) |
| - { |
| - sendResponse(false); |
| - break; |
| - } |
| + var typeMask = RegExpFilter.typeMap[msg.mediatype]; |
| + var documentHost = extractHostFromFrame(sender.frame); |
| + var sitekey = getKey(sender.page, sender.frame); |
| + var blocked = false; |
| - var typeMask = RegExpFilter.typeMap[msg.mediatype]; |
| - var documentHost = extractHostFromFrame(sender.frame); |
| - var sitekey = getKey(sender.page, sender.frame); |
| - var blocked = false; |
| + var specificOnly = checkWhitelisted( |
| + sender.page, sender.frame, |
| + RegExpFilter.typeMap.GENERICBLOCK |
| + ); |
| - var specificOnly = checkWhitelisted( |
| - sender.page, sender.frame, |
| - RegExpFilter.typeMap.GENERICBLOCK |
| - ); |
| + for (var i = 0; i < msg.urls.length; i++) |
| + { |
| + var url = new URL(msg.urls[i], msg.baseURL); |
| + var filter = defaultMatcher.matchesAny( |
| + stringifyURL(url), typeMask, |
| + documentHost, isThirdParty(url, documentHost), |
| + sitekey, specificOnly |
| + ); |
| - for (var i = 0; i < msg.urls.length; i++) |
| - { |
| - var url = new URL(msg.urls[i], msg.baseURL); |
| - var filter = defaultMatcher.matchesAny( |
| - stringifyURL(url), typeMask, |
| - documentHost, isThirdParty(url, documentHost), |
| - sitekey, specificOnly |
| - ); |
| + if (filter instanceof BlockingFilter) |
| + { |
| + if (filter.collapse != null) |
| + return filter.collapse; |
| - if (filter instanceof BlockingFilter) |
| - { |
| - if (filter.collapse != null) |
| - { |
| - sendResponse(filter.collapse); |
| - return; |
| - } |
| + blocked = true; |
| + } |
| + } |
| - blocked = true; |
| - } |
| - } |
| + return blocked && Prefs.hidePlaceholders; |
| +}); |
| - sendResponse(blocked && Prefs.hidePlaceholders); |
| - break; |
| - case "get-domain-enabled-state": |
| - // Returns whether this domain is in the exclusion list. |
| - // The browser action popup asks us this. |
| - if(sender.page) |
| - { |
| - sendResponse({enabled: !checkWhitelisted(sender.page)}); |
| - return; |
| - } |
| - break; |
| - case "add-sitekey": |
| - processKey(msg.token, sender.page, sender.frame); |
| - break; |
| - case "composer.ready": |
| - htmlPages.set(sender.page, null); |
| - refreshIconAndContextMenu(sender.page); |
| - break; |
| - case "composer.getFilters": |
| - sendResponse(composeFilters({ |
| - tagName: msg.tagName, |
| - id: msg.id, |
| - src: msg.src, |
| - style: msg.style, |
| - classes: msg.classes, |
| - urls: msg.urls, |
| - type: msg.mediatype, |
| - baseURL: msg.baseURL, |
| - page: sender.page, |
| - frame: sender.frame |
| - })); |
| - break; |
| - case "trace-elemhide": |
| - devtools.logHiddenElements( |
| - sender.page, msg.selectors, |
| - extractHostFromFrame(sender.frame) |
| - ); |
| - break; |
| - case "has-devtools-panel": |
| - sendResponse(Prefs.show_devtools_panel); |
| - break; |
| - case "forward": |
| - var targetPage; |
| - if (msg.targetPageId) |
| - targetPage = ext.getPage(msg.targetPageId); |
| - else |
| - targetPage = sender.page; |
| +port.on("forward", function(msg, sender) |
| +{ |
| + var targetPage; |
| + if (msg.targetPageId) |
| + targetPage = ext.getPage(msg.targetPageId); |
| + else |
| + targetPage = sender.page; |
| - if (targetPage) |
| - { |
| - msg.payload.sender = sender.page.id; |
| - if (msg.expectsResponse) |
| - { |
| - targetPage.sendMessage(msg.payload, sendResponse); |
| - return true; |
| - } |
| - |
| - targetPage.sendMessage(msg.payload); |
| - } |
| - break; |
| + if (targetPage) |
| + { |
| + msg.payload.sender = sender.page.id; |
| + if (msg.expectsResponse) |
| + return new Promise(targetPage.sendMessage.bind(targetPage, msg.payload)); |
| + targetPage.sendMessage(msg.payload); |
| } |
| }); |