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}); |
+ }); |
+ }); |
}); |