| OLD | NEW | 
|---|
| 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-present eyeo GmbH | 3  * Copyright (C) 2006-present 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 | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 21 | 21 | 
| 22 const {getDecodedHostname} = require("url"); | 22 const {getDecodedHostname} = require("url"); | 
| 23 const {checkWhitelisted} = require("whitelisting"); | 23 const {checkWhitelisted} = require("whitelisting"); | 
| 24 const {port} = require("messaging"); | 24 const {port} = require("messaging"); | 
| 25 const info = require("info"); | 25 const info = require("info"); | 
| 26 | 26 | 
| 27 const optionsUrl = "options.html"; | 27 const optionsUrl = "options.html"; | 
| 28 | 28 | 
| 29 function findOptionsTab(callback) | 29 function findOptionsTab(callback) | 
| 30 { | 30 { | 
| 31   chrome.tabs.query({}, tabs => | 31   browser.tabs.query({}, tabs => | 
| 32   { | 32   { | 
| 33     // We find a tab ourselves because Edge has a bug when quering tabs with | 33     // We find a tab ourselves because Edge has a bug when quering tabs with | 
| 34     // extension URL protocol: | 34     // extension URL protocol: | 
| 35     // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8094
     141/ | 35     // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8094
     141/ | 
| 36     // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8604
     703/ | 36     // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8604
     703/ | 
| 37     // Firefox won't let us query for moz-extension:// pages either, though | 37     // Firefox won't let us query for moz-extension:// pages either, though | 
| 38     // starting with Firefox 56 an extension can query for its own URLs: | 38     // starting with Firefox 56 an extension can query for its own URLs: | 
| 39     // https://bugzilla.mozilla.org/show_bug.cgi?id=1271354 | 39     // https://bugzilla.mozilla.org/show_bug.cgi?id=1271354 | 
| 40     let fullOptionsUrl = chrome.extension.getURL(optionsUrl); | 40     let fullOptionsUrl = browser.extension.getURL(optionsUrl); | 
| 41     callback(tabs.find(element => element.url == fullOptionsUrl)); | 41     callback(tabs.find(element => element.url == fullOptionsUrl)); | 
| 42   }); | 42   }); | 
| 43 } | 43 } | 
| 44 | 44 | 
| 45 function returnShowOptionsCall(optionsTab, callback) | 45 function returnShowOptionsCall(optionsTab, callback) | 
| 46 { | 46 { | 
| 47   if (!callback) | 47   if (!callback) | 
| 48     return; | 48     return; | 
| 49 | 49 | 
| 50   if (optionsTab) | 50   if (optionsTab) | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 80 /** | 80 /** | 
| 81  * Opens the options page. | 81  * Opens the options page. | 
| 82  * | 82  * | 
| 83  * @param {function} callback | 83  * @param {function} callback | 
| 84  */ | 84  */ | 
| 85 exports.showOptions = callback => | 85 exports.showOptions = callback => | 
| 86 { | 86 { | 
| 87   findOptionsTab(optionsTab => | 87   findOptionsTab(optionsTab => | 
| 88   { | 88   { | 
| 89     // Edge does not yet support runtime.openOptionsPage (tested version 38) | 89     // Edge does not yet support runtime.openOptionsPage (tested version 38) | 
| 90     if ("openOptionsPage" in chrome.runtime && | 90     if ("openOptionsPage" in browser.runtime && | 
| 91         // Some versions of Firefox for Android before version 57 do have a | 91         // Some versions of Firefox for Android before version 57 do have a | 
| 92         // runtime.openOptionsPage but it doesn't do anything. | 92         // runtime.openOptionsPage but it doesn't do anything. | 
| 93         // https://bugzilla.mozilla.org/show_bug.cgi?id=1364945 | 93         // https://bugzilla.mozilla.org/show_bug.cgi?id=1364945 | 
| 94         (info.application != "fennec" || | 94         (info.application != "fennec" || | 
| 95          parseInt(info.applicationVersion, 10) >= 57)) | 95          parseInt(info.applicationVersion, 10) >= 57)) | 
| 96     { | 96     { | 
| 97       chrome.runtime.openOptionsPage(() => | 97       browser.runtime.openOptionsPage(() => | 
| 98       { | 98       { | 
| 99         returnShowOptionsCall(optionsTab, callback); | 99         returnShowOptionsCall(optionsTab, callback); | 
| 100       }); | 100       }); | 
| 101     } | 101     } | 
| 102     else if (optionsTab) | 102     else if (optionsTab) | 
| 103     { | 103     { | 
| 104       // Firefox for Android before version 57 does not support | 104       // Firefox for Android before version 57 does not support | 
| 105       // runtime.openOptionsPage, nor does it support the windows API. | 105       // runtime.openOptionsPage, nor does it support the windows API. | 
| 106       // Since there is effectively only one window on the mobile browser, | 106       // Since there is effectively only one window on the mobile browser, | 
| 107       // there's no need to bring it into focus. | 107       // there's no need to bring it into focus. | 
| 108       if ("windows" in chrome) | 108       if ("windows" in browser) | 
| 109         chrome.windows.update(optionsTab.windowId, {focused: true}); | 109         browser.windows.update(optionsTab.windowId, {focused: true}); | 
| 110 | 110 | 
| 111       chrome.tabs.update(optionsTab.id, {active: true}); | 111       browser.tabs.update(optionsTab.id, {active: true}); | 
| 112 | 112 | 
| 113       returnShowOptionsCall(optionsTab, callback); | 113       returnShowOptionsCall(optionsTab, callback); | 
| 114     } | 114     } | 
| 115     else | 115     else | 
| 116     { | 116     { | 
| 117       // We use a relative URL here because of this Edge issue: | 117       // We use a relative URL here because of this Edge issue: | 
| 118       // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10
     276332 | 118       // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10
     276332 | 
| 119       chrome.tabs.create({url: optionsUrl}, () => | 119       browser.tabs.create({url: optionsUrl}, () => | 
| 120       { | 120       { | 
| 121         returnShowOptionsCall(optionsTab, callback); | 121         returnShowOptionsCall(optionsTab, callback); | 
| 122       }); | 122       }); | 
| 123     } | 123     } | 
| 124   }); | 124   }); | 
| 125 }; | 125 }; | 
| 126 | 126 | 
| 127 // On Firefox for Android, open the options page directly when the browser | 127 // On Firefox for Android, open the options page directly when the browser | 
| 128 // action is clicked. | 128 // action is clicked. | 
| 129 chrome.browserAction.onClicked.addListener(() => | 129 browser.browserAction.onClicked.addListener(() => | 
| 130 { | 130 { | 
| 131   chrome.tabs.query({active: true, lastFocusedWindow: true}, ([tab]) => | 131   browser.tabs.query({active: true, lastFocusedWindow: true}, ([tab]) => | 
| 132   { | 132   { | 
| 133     let currentPage = new ext.Page(tab); | 133     let currentPage = new ext.Page(tab); | 
| 134 | 134 | 
| 135     showOptions(optionsPage => | 135     showOptions(optionsPage => | 
| 136     { | 136     { | 
| 137       if (!/^https?:$/.test(currentPage.url.protocol)) | 137       if (!/^https?:$/.test(currentPage.url.protocol)) | 
| 138         return; | 138         return; | 
| 139 | 139 | 
| 140       optionsPage.sendMessage({ | 140       optionsPage.sendMessage({ | 
| 141         type: "app.respond", | 141         type: "app.respond", | 
| 142         action: "showPageOptions", | 142         action: "showPageOptions", | 
| 143         args: [ | 143         args: [ | 
| 144           { | 144           { | 
| 145             host: getDecodedHostname(currentPage.url).replace(/^www\./, ""), | 145             host: getDecodedHostname(currentPage.url).replace(/^www\./, ""), | 
| 146             whitelisted: !!checkWhitelisted(currentPage) | 146             whitelisted: !!checkWhitelisted(currentPage) | 
| 147           } | 147           } | 
| 148         ] | 148         ] | 
| 149       }); | 149       }); | 
| 150     }); | 150     }); | 
| 151   }); | 151   }); | 
| 152 }); | 152 }); | 
| OLD | NEW | 
|---|