| LEFT | RIGHT | 
|---|
| 1 /* | 1 /* | 
| 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| 3  * Copyright (C) 2006-2017 eyeo GmbH | 3  * Copyright (C) 2006-2017 eyeo GmbH | 
| 4  * | 4  * | 
| 5  * Adblock Plus is free software: you can redistribute it and/or modify | 5  * Adblock Plus is free software: you can redistribute it and/or modify | 
| 6  * it under the terms of the GNU General Public License version 3 as | 6  * it under the terms of the GNU General Public License version 3 as | 
| 7  * published by the Free Software Foundation. | 7  * published by the Free Software Foundation. | 
| 8  * | 8  * | 
| 9  * Adblock Plus is distributed in the hope that it will be useful, | 9  * Adblock Plus is distributed in the hope that it will be useful, | 
| 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
| 12  * GNU General Public License for more details. | 12  * GNU General Public License for more details. | 
| 13  * | 13  * | 
| 14  * You should have received a copy of the GNU General Public License | 14  * You should have received a copy of the GNU General Public License | 
| 15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
| 16  */ | 16  */ | 
| 17 | 17 | 
| 18 "use strict"; | 18 "use strict"; | 
| 19 | 19 | 
| 20 const {RegExpFilter} = require("filterClasses"); |  | 
| 21 const {ElemHide} = require("elemHide"); |  | 
| 22 const {checkWhitelisted} = require("whitelisting"); |  | 
| 23 const {extractHostFromFrame} = require("url"); |  | 
| 24 const {userStylesheetsSupported, hideElements} = require("css"); |  | 
| 25 const {port} = require("messaging"); | 20 const {port} = require("messaging"); | 
| 26 const devtools = require("devtools"); |  | 
| 27 |  | 
| 28 port.on("get-selectors", (msg, sender) => |  | 
| 29 { |  | 
| 30   let selectors; |  | 
| 31   let trace = devtools && devtools.hasPanel(sender.page); |  | 
| 32 |  | 
| 33   if (!checkWhitelisted(sender.page, sender.frame, |  | 
| 34                         RegExpFilter.typeMap.DOCUMENT | |  | 
| 35                         RegExpFilter.typeMap.ELEMHIDE)) |  | 
| 36   { |  | 
| 37     let specificOnly = checkWhitelisted(sender.page, sender.frame, |  | 
| 38                                         RegExpFilter.typeMap.GENERICHIDE); |  | 
| 39     selectors = ElemHide.getSelectorsForDomain( |  | 
| 40       extractHostFromFrame(sender.frame), |  | 
| 41       specificOnly ? ElemHide.SPECIFIC_ONLY : ElemHide.ALL_MATCHING |  | 
| 42     ); |  | 
| 43   } |  | 
| 44   else |  | 
| 45   { |  | 
| 46     selectors = []; |  | 
| 47   } |  | 
| 48 |  | 
| 49   if (!userStylesheetsSupported) |  | 
| 50     return {selectors, trace, inject: true}; |  | 
| 51 |  | 
| 52   return new Promise(resolve => |  | 
| 53   { |  | 
| 54     hideElements(sender.page.id, sender.frame.id, selectors, error => |  | 
| 55     { |  | 
| 56       let response = {trace, inject: !!error}; |  | 
| 57 |  | 
| 58       if (trace || error) |  | 
| 59         response.selectors = selectors; |  | 
| 60 |  | 
| 61       resolve(response); |  | 
| 62     }); |  | 
| 63   }); |  | 
| 64 }); |  | 
| 65 |  | 
| 66 port.on("hide-elements", (msg, sender) => |  | 
| 67 { |  | 
| 68   return new Promise(resolve => |  | 
| 69   { |  | 
| 70     hideElements(sender.page.id, sender.frame.id, msg.selectors, error => |  | 
| 71     { |  | 
| 72       resolve({success: !error}); |  | 
| 73     }); |  | 
| 74   }); |  | 
| 75 }); |  | 
| 76 | 21 | 
| 77 port.on("forward", (msg, sender) => | 22 port.on("forward", (msg, sender) => | 
| 78 { | 23 { | 
| 79   let targetPage; | 24   let targetPage; | 
| 80   if (msg.targetPageId) | 25   if (msg.targetPageId) | 
| 81     targetPage = ext.getPage(msg.targetPageId); | 26     targetPage = ext.getPage(msg.targetPageId); | 
| 82   else | 27   else | 
| 83     targetPage = sender.page; | 28     targetPage = sender.page; | 
| 84 | 29 | 
| 85   if (targetPage) | 30   if (targetPage) | 
| 86   { | 31   { | 
| 87     msg.payload.sender = sender.page.id; | 32     msg.payload.sender = sender.page.id; | 
| 88     if (msg.expectsResponse) | 33     if (msg.expectsResponse) | 
| 89       return new Promise(targetPage.sendMessage.bind(targetPage, msg.payload)); | 34       return new Promise(targetPage.sendMessage.bind(targetPage, msg.payload)); | 
| 90     targetPage.sendMessage(msg.payload); | 35     targetPage.sendMessage(msg.payload); | 
| 91   } | 36   } | 
| 92 }); | 37 }); | 
| LEFT | RIGHT | 
|---|