| Index: lib/elemHideHelper.js |
| diff --git a/background.js b/lib/elemHideHelper.js |
| similarity index 56% |
| copy from background.js |
| copy to lib/elemHideHelper.js |
| index cb7a861be117f6a390b74ffa1370bb9de50ba33f..83de8426f36c396ac69b747d586e935bf979732d 100644 |
| --- a/background.js |
| +++ b/lib/elemHideHelper.js |
| @@ -15,6 +15,8 @@ |
| * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| */ |
| +/** @module elemHideHelper */ |
| + |
| "use strict"; |
| const {RegExpFilter} = require("filterClasses"); |
| @@ -23,6 +25,28 @@ const {checkWhitelisted} = require("whitelisting"); |
| const {extractHostFromFrame} = require("url"); |
| const {port} = require("messaging"); |
| const devtools = require("devtools"); |
| +const info = require("info"); |
| + |
| +let userStylesheetsSupported = info.platform == "gecko" && |
| + info.platformVersion.split(".")[0] >= 53; |
| + |
| +function hideElements(tabId, frameId, selectors, callback) |
| +{ |
| + let code = selectors.join(", ") + "{display: none !important;}"; |
| + |
| + chrome.tabs.insertCSS(tabId, |
| + { |
| + code, |
| + cssOrigin: "user", |
| + frameId, |
| + matchAboutBlank: true |
| + }, |
| + () => |
| + { |
| + callback(chrome.runtime.lastError); |
| + } |
| + ); |
| +} |
| port.on("get-selectors", (msg, sender) => |
| { |
| @@ -45,22 +69,41 @@ port.on("get-selectors", (msg, sender) => |
| selectors = []; |
| } |
| - return {selectors, trace}; |
| + if (!userStylesheetsSupported) |
| + return {selectors, trace, inject: true}; |
| + |
| + if (selectors.length == 0) |
| + { |
| + if (trace) |
| + return {selectors, trace, inject: false}; |
| + |
| + return {trace, inject: false}; |
| + } |
| + |
| + return new Promise(resolve => |
| + { |
| + hideElements(sender.page.id, sender.frame.id, selectors, error => |
| + { |
| + let response = {trace, inject: !!error}; |
| + |
| + if (trace || error) |
| + response.selectors = selectors; |
| + |
| + resolve(response); |
| + }); |
| + }); |
| }); |
| -port.on("forward", (msg, sender) => |
| +port.on("hide-elements", (msg, sender) => |
| { |
| - let targetPage; |
| - if (msg.targetPageId) |
| - targetPage = ext.getPage(msg.targetPageId); |
| - else |
| - targetPage = sender.page; |
| + if (!msg.selectors || msg.selectors.length == 0) |
| + return {success: true}; |
| - if (targetPage) |
| + return new Promise(resolve => |
| { |
| - msg.payload.sender = sender.page.id; |
| - if (msg.expectsResponse) |
| - return new Promise(targetPage.sendMessage.bind(targetPage, msg.payload)); |
| - targetPage.sendMessage(msg.payload); |
| - } |
| + hideElements(sender.page.id, sender.frame.id, msg.selectors, error => |
| + { |
| + resolve({success: !error}); |
| + }); |
| + }); |
| }); |