Index: lib/elemHideHelper.js |
diff --git a/background.js b/lib/elemHideHelper.js |
similarity index 54% |
copy from background.js |
copy to lib/elemHideHelper.js |
index cb7a861be117f6a390b74ffa1370bb9de50ba33f..1e3c712a5663994281335537e0834ca188581f92 100644 |
--- a/background.js |
+++ b/lib/elemHideHelper.js |
@@ -15,6 +15,8 @@ |
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
Sebastian Noack
2017/05/24 08:31:41
This file is new. So how does it come that there a
Manish Jethani
2017/05/24 17:13:34
This is probably upload.py messing up. I'm trying
Sebastian Noack
2017/05/24 18:14:05
Well, that is what usually happens if you commit y
Manish Jethani
2017/05/25 02:52:25
That may have been the case, I get your point. hg
|
*/ |
+/** @module elemHideHelper */ |
+ |
"use strict"; |
const {RegExpFilter} = require("filterClasses"); |
@@ -24,6 +26,36 @@ const {extractHostFromFrame} = require("url"); |
const {port} = require("messaging"); |
const devtools = require("devtools"); |
+let userStylesheetsSupported = true; |
+ |
+function hideElements(tabId, frameId, selectors, callback) |
Sebastian Noack
2017/05/24 08:31:41
Perhaps we should make this function return a prom
Manish Jethani
2017/05/24 17:13:34
Done.
|
+{ |
+ let code = selectors.join(", ") + "{display: none !important;}"; |
+ |
+ try |
+ { |
+ chrome.tabs.insertCSS(tabId, |
+ { |
+ code, |
+ cssOrigin: "user", |
+ frameId, |
+ matchAboutBlank: true |
+ }, |
+ () => |
+ { |
+ callback(chrome.runtime.lastError); |
+ } |
+ ); |
+ } |
+ catch (error) |
+ { |
+ if (/\bError processing cssOrigin\b/.test(error.message) != -1) |
+ userStylesheetsSupported = false; |
+ |
+ callback(error); |
Manish Jethani
2017/05/18 02:25:23
Doing this for any errors instead of just the one
Sebastian Noack
2017/05/24 08:31:41
Yeah, we definitely should make sure that any unex
Manish Jethani
2017/05/24 17:13:34
Done.
|
+ } |
+} |
+ |
port.on("get-selectors", (msg, sender) => |
{ |
let selectors; |
@@ -45,22 +77,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}); |
+ }); |
+ }); |
}); |