| 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 |
| 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 /* globals checkShareResource, getDocLink, i18nFormatDateTime, openSharePopup, | 18 /* globals checkShareResource, getDocLink, i18nFormatDateTime, openSharePopup, |
| 19 setLinks, E */ | 19 setLinks, E */ |
| 20 | 20 |
| 21 "use strict"; | 21 "use strict"; |
| 22 | 22 |
| 23 { | 23 { |
| 24 let subscriptionsMap = Object.create(null); | 24 let subscriptionsMap = Object.create(null); |
| 25 let filtersMap = Object.create(null); | 25 let filtersMap = Object.create(null); |
| 26 let collections = Object.create(null); | 26 let collections = Object.create(null); |
| 27 let acceptableAdsUrl = null; | 27 let acceptableAdsUrl = null; |
| 28 let acceptableAdsPrivacyUrl = null; | 28 let acceptableAdsPrivacyUrl = null; |
| 29 let isCustomFiltersLoaded = false; | 29 let isCustomFiltersLoaded = false; |
| 30 let {getMessage} = chrome.i18n; | 30 let {getMessage} = browser.i18n; |
| 31 let customFilters = []; | 31 let customFilters = []; |
| 32 let filterErrors = new Map([ | 32 let filterErrors = new Map([ |
| 33 ["synchronize_invalid_url", | 33 ["synchronize_invalid_url", |
| 34 "options_filterList_lastDownload_invalidURL"], | 34 "options_filterList_lastDownload_invalidURL"], |
| 35 ["synchronize_connection_error", | 35 ["synchronize_connection_error", |
| 36 "options_filterList_lastDownload_connectionError"], | 36 "options_filterList_lastDownload_connectionError"], |
| 37 ["synchronize_invalid_data", | 37 ["synchronize_invalid_data", |
| 38 "options_filterList_lastDownload_invalidData"], | 38 "options_filterList_lastDownload_invalidData"], |
| 39 ["synchronize_checksum_mismatch", | 39 ["synchronize_checksum_mismatch", |
| 40 "options_filterList_lastDownload_checksumMismatch"] | 40 "options_filterList_lastDownload_checksumMismatch"] |
| (...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 return element.getAttribute("data-" + dataName); | 536 return element.getAttribute("data-" + dataName); |
| 537 } | 537 } |
| 538 | 538 |
| 539 element = element.parentElement; | 539 element = element.parentElement; |
| 540 } | 540 } |
| 541 return null; | 541 return null; |
| 542 } | 542 } |
| 543 | 543 |
| 544 function sendMessageHandleErrors(message, onSuccess) | 544 function sendMessageHandleErrors(message, onSuccess) |
| 545 { | 545 { |
| 546 chrome.runtime.sendMessage(message, (errors) => | 546 browser.runtime.sendMessage(message, (errors) => |
| 547 { | 547 { |
| 548 if (errors.length > 0) | 548 if (errors.length > 0) |
| 549 alert(errors.join("\n")); | 549 alert(errors.join("\n")); |
| 550 else if (onSuccess) | 550 else if (onSuccess) |
| 551 onSuccess(); | 551 onSuccess(); |
| 552 }); | 552 }); |
| 553 } | 553 } |
| 554 | 554 |
| 555 function switchTab(id) | 555 function switchTab(id) |
| 556 { | 556 { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 578 case "cancel-custom-filters": | 578 case "cancel-custom-filters": |
| 579 setCustomFiltersView("read"); | 579 setCustomFiltersView("read"); |
| 580 break; | 580 break; |
| 581 case "change-language-subscription": | 581 case "change-language-subscription": |
| 582 for (let key in subscriptionsMap) | 582 for (let key in subscriptionsMap) |
| 583 { | 583 { |
| 584 let subscription = subscriptionsMap[key]; | 584 let subscription = subscriptionsMap[key]; |
| 585 let subscriptionType = subscription.recommended; | 585 let subscriptionType = subscription.recommended; |
| 586 if (subscriptionType == "ads" && subscription.disabled == false) | 586 if (subscriptionType == "ads" && subscription.disabled == false) |
| 587 { | 587 { |
| 588 chrome.runtime.sendMessage({ | 588 browser.runtime.sendMessage({ |
| 589 type: "subscriptions.remove", | 589 type: "subscriptions.remove", |
| 590 url: subscription.url | 590 url: subscription.url |
| 591 }); | 591 }); |
| 592 chrome.runtime.sendMessage({ | 592 browser.runtime.sendMessage({ |
| 593 type: "subscriptions.add", | 593 type: "subscriptions.add", |
| 594 url: findParentData(element, "access", false) | 594 url: findParentData(element, "access", false) |
| 595 }); | 595 }); |
| 596 break; | 596 break; |
| 597 } | 597 } |
| 598 } | 598 } |
| 599 break; | 599 break; |
| 600 case "close-dialog": | 600 case "close-dialog": |
| 601 closeDialog(); | 601 closeDialog(); |
| 602 break; | 602 break; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 620 if (listItem && !listItem.classList.contains("show-context-menu")) | 620 if (listItem && !listItem.classList.contains("show-context-menu")) |
| 621 listItem.classList.add("show-context-menu"); | 621 listItem.classList.add("show-context-menu"); |
| 622 break; | 622 break; |
| 623 } | 623 } |
| 624 case "open-dialog": { | 624 case "open-dialog": { |
| 625 let dialog = findParentData(element, "dialog", false); | 625 let dialog = findParentData(element, "dialog", false); |
| 626 openDialog(dialog); | 626 openDialog(dialog); |
| 627 break; | 627 break; |
| 628 } | 628 } |
| 629 case "remove-filter": | 629 case "remove-filter": |
| 630 chrome.runtime.sendMessage({ | 630 browser.runtime.sendMessage({ |
| 631 type: "filters.remove", | 631 type: "filters.remove", |
| 632 text: findParentData(element, "access", false) | 632 text: findParentData(element, "access", false) |
| 633 }); | 633 }); |
| 634 break; | 634 break; |
| 635 case "remove-subscription": | 635 case "remove-subscription": |
| 636 chrome.runtime.sendMessage({ | 636 browser.runtime.sendMessage({ |
| 637 type: "subscriptions.remove", | 637 type: "subscriptions.remove", |
| 638 url: findParentData(element, "access", false) | 638 url: findParentData(element, "access", false) |
| 639 }); | 639 }); |
| 640 break; | 640 break; |
| 641 case "save-custom-filters": | 641 case "save-custom-filters": |
| 642 sendMessageHandleErrors({ | 642 sendMessageHandleErrors({ |
| 643 type: "filters.importRaw", | 643 type: "filters.importRaw", |
| 644 text: E("custom-filters-raw").value, | 644 text: E("custom-filters-raw").value, |
| 645 removeExisting: true | 645 removeExisting: true |
| 646 }, | 646 }, |
| 647 () => | 647 () => |
| 648 { | 648 { |
| 649 setCustomFiltersView("read"); | 649 setCustomFiltersView("read"); |
| 650 }); | 650 }); |
| 651 break; | 651 break; |
| 652 case "show-more-filters-section": | 652 case "show-more-filters-section": |
| 653 E("more-filters").setAttribute("aria-hidden", false); | 653 E("more-filters").setAttribute("aria-hidden", false); |
| 654 break; | 654 break; |
| 655 case "switch-acceptable-ads": | 655 case "switch-acceptable-ads": |
| 656 let value = element.value || element.dataset.value; | 656 let value = element.value || element.dataset.value; |
| 657 chrome.runtime.sendMessage({ | 657 browser.runtime.sendMessage({ |
| 658 type: value == "privacy" ? "subscriptions.add" : | 658 type: value == "privacy" ? "subscriptions.add" : |
| 659 "subscriptions.remove", | 659 "subscriptions.remove", |
| 660 url: acceptableAdsPrivacyUrl | 660 url: acceptableAdsPrivacyUrl |
| 661 }); | 661 }); |
| 662 chrome.runtime.sendMessage({ | 662 browser.runtime.sendMessage({ |
| 663 type: value == "ads" ? "subscriptions.add" : "subscriptions.remove", | 663 type: value == "ads" ? "subscriptions.add" : "subscriptions.remove", |
| 664 url: acceptableAdsUrl | 664 url: acceptableAdsUrl |
| 665 }); | 665 }); |
| 666 break; | 666 break; |
| 667 case "switch-tab": | 667 case "switch-tab": |
| 668 switchTab(element.getAttribute("href").substr(1)); | 668 switchTab(element.getAttribute("href").substr(1)); |
| 669 break; | 669 break; |
| 670 case "toggle-disable-subscription": | 670 case "toggle-disable-subscription": |
| 671 chrome.runtime.sendMessage({ | 671 browser.runtime.sendMessage({ |
| 672 type: "subscriptions.toggle", | 672 type: "subscriptions.toggle", |
| 673 keepInstalled: true, | 673 keepInstalled: true, |
| 674 url: findParentData(element, "access", false) | 674 url: findParentData(element, "access", false) |
| 675 }); | 675 }); |
| 676 break; | 676 break; |
| 677 case "toggle-pref": | 677 case "toggle-pref": |
| 678 chrome.runtime.sendMessage({ | 678 browser.runtime.sendMessage({ |
| 679 type: "prefs.toggle", | 679 type: "prefs.toggle", |
| 680 key: findParentData(element, "pref", false) | 680 key: findParentData(element, "pref", false) |
| 681 }); | 681 }); |
| 682 break; | 682 break; |
| 683 case "toggle-remove-subscription": | 683 case "toggle-remove-subscription": |
| 684 let subscriptionUrl = findParentData(element, "access", false); | 684 let subscriptionUrl = findParentData(element, "access", false); |
| 685 if (element.getAttribute("aria-checked") == "true") | 685 if (element.getAttribute("aria-checked") == "true") |
| 686 { | 686 { |
| 687 chrome.runtime.sendMessage({ | 687 browser.runtime.sendMessage({ |
| 688 type: "subscriptions.remove", | 688 type: "subscriptions.remove", |
| 689 url: subscriptionUrl | 689 url: subscriptionUrl |
| 690 }); | 690 }); |
| 691 } | 691 } |
| 692 else | 692 else |
| 693 addEnableSubscription(subscriptionUrl); | 693 addEnableSubscription(subscriptionUrl); |
| 694 break; | 694 break; |
| 695 case "update-all-subscriptions": | 695 case "update-all-subscriptions": |
| 696 chrome.runtime.sendMessage({ | 696 browser.runtime.sendMessage({ |
| 697 type: "subscriptions.update" | 697 type: "subscriptions.update" |
| 698 }); | 698 }); |
| 699 break; | 699 break; |
| 700 case "update-subscription": | 700 case "update-subscription": |
| 701 chrome.runtime.sendMessage({ | 701 browser.runtime.sendMessage({ |
| 702 type: "subscriptions.update", | 702 type: "subscriptions.update", |
| 703 url: findParentData(element, "access", false) | 703 url: findParentData(element, "access", false) |
| 704 }); | 704 }); |
| 705 break; | 705 break; |
| 706 case "validate-import-subscription": | 706 case "validate-import-subscription": |
| 707 let form = findParentData(element, "validation", true); | 707 let form = findParentData(element, "validation", true); |
| 708 if (!form) | 708 if (!form) |
| 709 return; | 709 return; |
| 710 | 710 |
| 711 if (form.checkValidity()) | 711 if (form.checkValidity()) |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 if (!tabContent) | 853 if (!tabContent) |
| 854 break; | 854 break; |
| 855 } | 855 } |
| 856 } | 856 } |
| 857 | 857 |
| 858 function onDOMLoaded() | 858 function onDOMLoaded() |
| 859 { | 859 { |
| 860 populateLists(); | 860 populateLists(); |
| 861 | 861 |
| 862 // Initialize navigation sidebar | 862 // Initialize navigation sidebar |
| 863 chrome.runtime.sendMessage({ | 863 browser.runtime.sendMessage({ |
| 864 type: "app.get", | 864 type: "app.get", |
| 865 what: "addonVersion" | 865 what: "addonVersion" |
| 866 }, | 866 }, |
| 867 (addonVersion) => | 867 (addonVersion) => |
| 868 { | 868 { |
| 869 E("abp-version").textContent = getMessage("options_dialog_about_version", | 869 E("abp-version").textContent = getMessage("options_dialog_about_version", |
| 870 [addonVersion]); | 870 [addonVersion]); |
| 871 }); | 871 }); |
| 872 | 872 |
| 873 updateTooltips(); | 873 updateTooltips(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 902 { | 902 { |
| 903 return checkbox.getAttribute("data-pref"); | 903 return checkbox.getAttribute("data-pref"); |
| 904 }); | 904 }); |
| 905 for (let key of customize) | 905 for (let key of customize) |
| 906 { | 906 { |
| 907 getPref(key, (value) => | 907 getPref(key, (value) => |
| 908 { | 908 { |
| 909 onPrefMessage(key, value, true); | 909 onPrefMessage(key, value, true); |
| 910 }); | 910 }); |
| 911 } | 911 } |
| 912 chrome.runtime.sendMessage({ | 912 browser.runtime.sendMessage({ |
| 913 type: "app.get", | 913 type: "app.get", |
| 914 what: "features" | 914 what: "features" |
| 915 }, | 915 }, |
| 916 (features) => | 916 (features) => |
| 917 { | 917 { |
| 918 hidePref("show_devtools_panel", !features.devToolsPanel); | 918 hidePref("show_devtools_panel", !features.devToolsPanel); |
| 919 }); | 919 }); |
| 920 | 920 |
| 921 getDocLink("filterdoc", (link) => | 921 getDocLink("filterdoc", (link) => |
| 922 { | 922 { |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1058 function populateLists() | 1058 function populateLists() |
| 1059 { | 1059 { |
| 1060 subscriptionsMap = Object.create(null); | 1060 subscriptionsMap = Object.create(null); |
| 1061 filtersMap = Object.create(null); | 1061 filtersMap = Object.create(null); |
| 1062 | 1062 |
| 1063 // Empty collections and lists | 1063 // Empty collections and lists |
| 1064 for (let property in collections) | 1064 for (let property in collections) |
| 1065 collections[property].clearAll(); | 1065 collections[property].clearAll(); |
| 1066 | 1066 |
| 1067 setCustomFiltersView("empty"); | 1067 setCustomFiltersView("empty"); |
| 1068 chrome.runtime.sendMessage({ | 1068 browser.runtime.sendMessage({ |
| 1069 type: "subscriptions.get", | 1069 type: "subscriptions.get", |
| 1070 special: true | 1070 special: true |
| 1071 }, | 1071 }, |
| 1072 (subscriptions) => | 1072 (subscriptions) => |
| 1073 { | 1073 { |
| 1074 // Load filters | 1074 // Load filters |
| 1075 for (let subscription of subscriptions) | 1075 for (let subscription of subscriptions) |
| 1076 { | 1076 { |
| 1077 chrome.runtime.sendMessage({ | 1077 browser.runtime.sendMessage({ |
| 1078 type: "filters.get", | 1078 type: "filters.get", |
| 1079 subscriptionUrl: subscription.url | 1079 subscriptionUrl: subscription.url |
| 1080 }, | 1080 }, |
| 1081 (filters) => | 1081 (filters) => |
| 1082 { | 1082 { |
| 1083 loadCustomFilters(filters); | 1083 loadCustomFilters(filters); |
| 1084 }); | 1084 }); |
| 1085 } | 1085 } |
| 1086 }); | 1086 }); |
| 1087 loadRecommendations(); | 1087 loadRecommendations(); |
| 1088 chrome.runtime.sendMessage({ | 1088 browser.runtime.sendMessage({ |
| 1089 type: "prefs.get", | 1089 type: "prefs.get", |
| 1090 key: "subscriptions_exceptionsurl" | 1090 key: "subscriptions_exceptionsurl" |
| 1091 }, | 1091 }, |
| 1092 (url) => | 1092 (url) => |
| 1093 { | 1093 { |
| 1094 acceptableAdsUrl = url; | 1094 acceptableAdsUrl = url; |
| 1095 | 1095 |
| 1096 chrome.runtime.sendMessage({ | 1096 browser.runtime.sendMessage({ |
| 1097 type: "prefs.get", | 1097 type: "prefs.get", |
| 1098 key: "subscriptions_exceptionsurl_privacy" | 1098 key: "subscriptions_exceptionsurl_privacy" |
| 1099 }, | 1099 }, |
| 1100 (urlPrivacy) => | 1100 (urlPrivacy) => |
| 1101 { | 1101 { |
| 1102 acceptableAdsPrivacyUrl = urlPrivacy; | 1102 acceptableAdsPrivacyUrl = urlPrivacy; |
| 1103 | 1103 |
| 1104 // Load user subscriptions | 1104 // Load user subscriptions |
| 1105 chrome.runtime.sendMessage({ | 1105 browser.runtime.sendMessage({ |
| 1106 type: "subscriptions.get", | 1106 type: "subscriptions.get", |
| 1107 downloadable: true | 1107 downloadable: true |
| 1108 }, | 1108 }, |
| 1109 (subscriptions) => | 1109 (subscriptions) => |
| 1110 { | 1110 { |
| 1111 for (let subscription of subscriptions) | 1111 for (let subscription of subscriptions) |
| 1112 onSubscriptionMessage("added", subscription); | 1112 onSubscriptionMessage("added", subscription); |
| 1113 | 1113 |
| 1114 setAcceptableAds(); | 1114 setAcceptableAds(); |
| 1115 }); | 1115 }); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1153 | 1153 |
| 1154 let message = { | 1154 let message = { |
| 1155 type: messageType, | 1155 type: messageType, |
| 1156 url | 1156 url |
| 1157 }; | 1157 }; |
| 1158 if (title) | 1158 if (title) |
| 1159 message.title = title; | 1159 message.title = title; |
| 1160 if (homepage) | 1160 if (homepage) |
| 1161 message.homepage = homepage; | 1161 message.homepage = homepage; |
| 1162 | 1162 |
| 1163 chrome.runtime.sendMessage(message); | 1163 browser.runtime.sendMessage(message); |
| 1164 } | 1164 } |
| 1165 | 1165 |
| 1166 function onFilterMessage(action, filter) | 1166 function onFilterMessage(action, filter) |
| 1167 { | 1167 { |
| 1168 switch (action) | 1168 switch (action) |
| 1169 { | 1169 { |
| 1170 case "added": | 1170 case "added": |
| 1171 filter[timestampUI] = Date.now(); | 1171 filter[timestampUI] = Date.now(); |
| 1172 updateFilter(filter); | 1172 updateFilter(filter); |
| 1173 break; | 1173 break; |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1264 { | 1264 { |
| 1265 let checkPref = getPref.checks[key] || getPref.checkNone; | 1265 let checkPref = getPref.checks[key] || getPref.checkNone; |
| 1266 checkPref((isActive) => | 1266 checkPref((isActive) => |
| 1267 { | 1267 { |
| 1268 if (!isActive) | 1268 if (!isActive) |
| 1269 { | 1269 { |
| 1270 hidePref(key, !isActive); | 1270 hidePref(key, !isActive); |
| 1271 return; | 1271 return; |
| 1272 } | 1272 } |
| 1273 | 1273 |
| 1274 chrome.runtime.sendMessage({ | 1274 browser.runtime.sendMessage({ |
| 1275 type: "prefs.get", | 1275 type: "prefs.get", |
| 1276 key | 1276 key |
| 1277 }, callback); | 1277 }, callback); |
| 1278 }); | 1278 }); |
| 1279 } | 1279 } |
| 1280 | 1280 |
| 1281 getPref.checkNone = function(callback) | 1281 getPref.checkNone = function(callback) |
| 1282 { | 1282 { |
| 1283 callback(true); | 1283 callback(true); |
| 1284 }; | 1284 }; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1358 break; | 1358 break; |
| 1359 case "prefs.respond": | 1359 case "prefs.respond": |
| 1360 onPrefMessage(message.action, message.args[0], false); | 1360 onPrefMessage(message.action, message.args[0], false); |
| 1361 break; | 1361 break; |
| 1362 case "subscriptions.respond": | 1362 case "subscriptions.respond": |
| 1363 onSubscriptionMessage(message.action, message.args[0]); | 1363 onSubscriptionMessage(message.action, message.args[0]); |
| 1364 break; | 1364 break; |
| 1365 } | 1365 } |
| 1366 }); | 1366 }); |
| 1367 | 1367 |
| 1368 chrome.runtime.sendMessage({ | 1368 browser.runtime.sendMessage({ |
| 1369 type: "app.listen", | 1369 type: "app.listen", |
| 1370 filter: ["addSubscription", "focusSection"] | 1370 filter: ["addSubscription", "focusSection"] |
| 1371 }); | 1371 }); |
| 1372 chrome.runtime.sendMessage({ | 1372 browser.runtime.sendMessage({ |
| 1373 type: "filters.listen", | 1373 type: "filters.listen", |
| 1374 filter: ["added", "loaded", "removed"] | 1374 filter: ["added", "loaded", "removed"] |
| 1375 }); | 1375 }); |
| 1376 chrome.runtime.sendMessage({ | 1376 browser.runtime.sendMessage({ |
| 1377 type: "prefs.listen", | 1377 type: "prefs.listen", |
| 1378 filter: ["notifications_ignoredcategories", "notifications_showui", | 1378 filter: ["notifications_ignoredcategories", "notifications_showui", |
| 1379 "show_devtools_panel", "shouldShowBlockElementMenu"] | 1379 "show_devtools_panel", "shouldShowBlockElementMenu"] |
| 1380 }); | 1380 }); |
| 1381 chrome.runtime.sendMessage({ | 1381 browser.runtime.sendMessage({ |
| 1382 type: "subscriptions.listen", | 1382 type: "subscriptions.listen", |
| 1383 filter: ["added", "disabled", "homepage", "lastDownload", "removed", | 1383 filter: ["added", "disabled", "homepage", "lastDownload", "removed", |
| 1384 "title", "downloadStatus", "downloading"] | 1384 "title", "downloadStatus", "downloading"] |
| 1385 }); | 1385 }); |
| 1386 | 1386 |
| 1387 window.addEventListener("DOMContentLoaded", onDOMLoaded, false); | 1387 window.addEventListener("DOMContentLoaded", onDOMLoaded, false); |
| 1388 window.addEventListener("hashchange", onHashChange, false); | 1388 window.addEventListener("hashchange", onHashChange, false); |
| 1389 } | 1389 } |
| OLD | NEW |