| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <http://adblockplus.org/>, | 2 * This file is part of Adblock Plus <http://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2013 Eyeo GmbH | 3 * Copyright (C) 2006-2013 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 Cu.import("resource://gre/modules/XPCOMUtils.jsm"); | 18 Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
| 19 Cu.import("resource://gre/modules/Services.jsm"); | 19 Cu.import("resource://gre/modules/Services.jsm"); |
| 20 | 20 |
| 21 let {Utils} = require("utils"); | 21 let {Utils} = require("utils"); |
| 22 let {Prefs} = require("prefs"); | 22 let {Prefs} = require("prefs"); |
| 23 let {Policy} = require("contentPolicy"); | 23 let {Policy} = require("contentPolicy"); |
| 24 let {FilterListener} = require("filterListener"); | 24 let {FilterListener} = require("filterListener"); |
| 25 let {FilterStorage} = require("filterStorage"); | 25 let {FilterStorage} = require("filterStorage"); |
| 26 let {FilterNotifier} = require("filterNotifier"); | 26 let {FilterNotifier} = require("filterNotifier"); |
| 27 let {RequestNotifier} = require("requestNotifier"); | 27 let {RequestNotifier} = require("requestNotifier"); |
| 28 let {Filter} = require("filterClasses"); | 28 let {Filter, ActiveFilter} = require("filterClasses"); |
| 29 let {Subscription, SpecialSubscription, DownloadableSubscription} = require("sub
scriptionClasses"); | 29 let {Subscription, SpecialSubscription, DownloadableSubscription} = require("sub
scriptionClasses"); |
| 30 let {Synchronizer} = require("synchronizer"); | 30 let {Synchronizer} = require("synchronizer"); |
| 31 let {KeySelector} = require("keySelector"); | 31 let {KeySelector} = require("keySelector"); |
| 32 let {Notification} = require("notification"); | 32 let {Notification} = require("notification"); |
| 33 | 33 |
| 34 let CustomizableUI; | 34 let CustomizableUI; |
| 35 try | 35 try |
| 36 { | 36 { |
| 37 ({CustomizableUI}) = Cu.import("resource:///modules/CustomizableUI.jsm", null)
; | 37 ({CustomizableUI}) = Cu.import("resource:///modules/CustomizableUI.jsm", null)
; |
| 38 } | 38 } |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 | 391 |
| 392 if (this.overlay.all.length) | 392 if (this.overlay.all.length) |
| 393 this.overlay.all[0].appendChild(menuSource); | 393 this.overlay.all[0].appendChild(menuSource); |
| 394 if ("abp-toolbarbutton" in this.overlay) | 394 if ("abp-toolbarbutton" in this.overlay) |
| 395 this.overlay["abp-toolbarbutton"].appendChild(fixId(menuSource.cloneNode
(true), "abp-toolbar")); | 395 this.overlay["abp-toolbarbutton"].appendChild(fixId(menuSource.cloneNode
(true), "abp-toolbar")); |
| 396 if ("abp-menuitem" in this.overlay) | 396 if ("abp-menuitem" in this.overlay) |
| 397 this.overlay["abp-menuitem"].appendChild(fixId(menuSource.cloneNode(true
), "abp-menuitem")); | 397 this.overlay["abp-menuitem"].appendChild(fixId(menuSource.cloneNode(true
), "abp-menuitem")); |
| 398 } | 398 } |
| 399 }, | 399 }, |
| 400 | 400 |
| 401 _initAntiAdblockNotification: function() |
| 402 { |
| 403 let notification = { |
| 404 id: "antiadblock", |
| 405 type: "question", |
| 406 title: Utils.getString("notification_antiadblock_title"), |
| 407 message: Utils.getString("notification_antiadblock_message"), |
| 408 urlFilters: [] |
| 409 }; |
| 410 |
| 411 function notificationListener(approved) |
| 412 { |
| 413 let subscription = Subscription.fromURL(Prefs.subscriptions_antiadblockurl
); |
| 414 if (subscription.url in FilterStorage.knownSubscriptions) |
| 415 subscription.disabled = !approved; |
| 416 } |
| 417 |
| 418 function addAntiAdblockNotification(subscription) |
| 419 { |
| 420 let urlFilters = []; |
| 421 for each (let filter in subscription.filters) |
| 422 if (filter instanceof ActiveFilter) |
| 423 for (let domain in filter.domains) |
| 424 if (domain && urlFilters.indexOf(domain) == -1) |
| 425 urlFilters.push(domain); |
| 426 notification.urlFilters = urlFilters; |
| 427 Notification.addNotification(notification); |
| 428 Notification.addQuestionListener(notification.id, notificationListener); |
| 429 } |
| 430 |
| 431 function removeAntiAdblockNotification() |
| 432 { |
| 433 Notification.removeNotification(notification); |
| 434 Notification.removeQuestionListener(notification.id, notificationListener)
; |
| 435 } |
| 436 |
| 437 let subscription = Subscription.fromURL(Prefs.subscriptions_antiadblockurl); |
| 438 if (subscription.lastDownload && subscription.disabled) |
| 439 addAntiAdblockNotification(subscription); |
| 440 |
| 441 FilterNotifier.addListener(function(action, value, newItem, oldItem) |
| 442 { |
| 443 if (!/^subscription\.(updated|removed|disabled)$/.test(action) || value.ur
l != Prefs.subscriptions_antiadblockurl) |
| 444 return; |
| 445 |
| 446 if (action == "subscription.updated") |
| 447 addAntiAdblockNotification(value); |
| 448 else if (action == "subscription.removed" || (action == "subscription.disa
bled" && !value.disabled)) |
| 449 removeAntiAdblockNotification(); |
| 450 }); |
| 451 |
| 452 var documentCreationObserver = { |
| 453 observe: function(subject, topic, data) |
| 454 { |
| 455 if (!(subject instanceof Ci.nsIDOMWindow)) |
| 456 return; |
| 457 |
| 458 this._showNextNotification(subject.location.href); |
| 459 }.bind(this) |
| 460 }; |
| 461 Services.obs.addObserver(documentCreationObserver, "content-document-global-
created", false); |
| 462 onShutdown.add(function() |
| 463 { |
| 464 Services.obs.removeObserver(documentCreationObserver, "content-document-gl
obal-created", false); |
| 465 }); |
| 466 }, |
| 467 |
| 401 /** | 468 /** |
| 402 * Gets called once the initialization is finished and Adblock Plus elements | 469 * Gets called once the initialization is finished and Adblock Plus elements |
| 403 * can be added to the UI. | 470 * can be added to the UI. |
| 404 */ | 471 */ |
| 405 initDone: function() | 472 initDone: function() |
| 406 { | 473 { |
| 407 let {WindowObserver} = require("windowObserver"); | 474 let {WindowObserver} = require("windowObserver"); |
| 408 new WindowObserver(this); | 475 new WindowObserver(this); |
| 409 | 476 |
| 410 // Add toolbar icon | 477 // Add toolbar icon |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 window.addEventListener("popupshowing", this.onPopupShowing, false); | 585 window.addEventListener("popupshowing", this.onPopupShowing, false); |
| 519 window.addEventListener("keypress", this.onKeyPress, false); | 586 window.addEventListener("keypress", this.onKeyPress, false); |
| 520 | 587 |
| 521 addBrowserLocationListener(window, function() | 588 addBrowserLocationListener(window, function() |
| 522 { | 589 { |
| 523 this.updateIconState(window, window.document.getElementById("abp-status"))
; | 590 this.updateIconState(window, window.document.getElementById("abp-status"))
; |
| 524 this.updateIconState(window, window.document.getElementById("abp-toolbarbu
tton")); | 591 this.updateIconState(window, window.document.getElementById("abp-toolbarbu
tton")); |
| 525 }.bind(this)); | 592 }.bind(this)); |
| 526 addBrowserClickListener(window, this.onBrowserClick.bind(this, window)); | 593 addBrowserClickListener(window, this.onBrowserClick.bind(this, window)); |
| 527 | 594 |
| 595 window.document.getElementById("abp-notification-close").addEventListener("c
ommand", function(event) |
| 596 { |
| 597 window.document.getElementById("abp-notification").hidePopup(); |
| 598 }, false); |
| 599 |
| 600 // Add "anti-adblock messages" notification |
| 601 this._initAntiAdblockNotification(); |
| 602 |
| 528 // First-run actions? | 603 // First-run actions? |
| 529 if (!this.firstRunDone) | 604 if (!this.firstRunDone) |
| 530 { | 605 { |
| 531 this.firstRunDone = true; | 606 this.firstRunDone = true; |
| 532 | 607 |
| 533 let {addonVersion} = require("info"); | 608 let {addonVersion} = require("info"); |
| 534 let prevVersion = Prefs.currentVersion; | 609 let prevVersion = Prefs.currentVersion; |
| 535 if (prevVersion != addonVersion) | 610 if (prevVersion != addonVersion) |
| 536 { | 611 { |
| 537 Prefs.currentVersion = addonVersion; | 612 Prefs.currentVersion = addonVersion; |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 763 { | 838 { |
| 764 subscription.title = "Allow non-intrusive advertising"; | 839 subscription.title = "Allow non-intrusive advertising"; |
| 765 FilterStorage.addSubscription(subscription); | 840 FilterStorage.addSubscription(subscription); |
| 766 if (subscription instanceof DownloadableSubscription && !subscription.la
stDownload) | 841 if (subscription instanceof DownloadableSubscription && !subscription.la
stDownload) |
| 767 Synchronizer.execute(subscription); | 842 Synchronizer.execute(subscription); |
| 768 } | 843 } |
| 769 else | 844 else |
| 770 addAcceptable = false; | 845 addAcceptable = false; |
| 771 } | 846 } |
| 772 | 847 |
| 848 // Add "anti-adblock messages" subscription |
| 849 let subscription = Subscription.fromURL(Prefs.subscriptions_antiadblockurl); |
| 850 if (subscription) |
| 851 { |
| 852 subscription.disabled = true; |
| 853 FilterStorage.addSubscription(subscription); |
| 854 if (subscription instanceof DownloadableSubscription && !subscription.last
Download) |
| 855 Synchronizer.execute(subscription); |
| 856 } |
| 857 |
| 773 if (!addSubscription && !addAcceptable) | 858 if (!addSubscription && !addAcceptable) |
| 774 return; | 859 return; |
| 775 | 860 |
| 776 function notifyUser() | 861 function notifyUser() |
| 777 { | 862 { |
| 778 let {addTab} = require("appSupport"); | 863 let {addTab} = require("appSupport"); |
| 779 if (addTab) | 864 if (addTab) |
| 780 { | 865 { |
| 781 addTab(window, "chrome://adblockplus/content/ui/firstRun.html"); | 866 addTab(window, "chrome://adblockplus/content/ui/firstRun.html"); |
| 782 } | 867 } |
| (...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1758 Prefs.hideContributeButton = true; | 1843 Prefs.hideContributeButton = true; |
| 1759 | 1844 |
| 1760 for each (let id in ["abp-status-contributebutton", "abp-toolbar-contributeb
utton", "abp-menuitem-contributebutton"]) | 1845 for each (let id in ["abp-status-contributebutton", "abp-toolbar-contributeb
utton", "abp-menuitem-contributebutton"]) |
| 1761 { | 1846 { |
| 1762 let button = window.document.getElementById(id); | 1847 let button = window.document.getElementById(id); |
| 1763 if (button) | 1848 if (button) |
| 1764 button.hidden = true; | 1849 button.hidden = true; |
| 1765 } | 1850 } |
| 1766 }, | 1851 }, |
| 1767 | 1852 |
| 1768 _showNextNotification: function() | 1853 _showNextNotification: function(url) |
| 1769 { | 1854 { |
| 1770 let window = this.currentWindow; | 1855 let window = this.currentWindow; |
| 1771 if (!window) | 1856 if (!window) |
| 1772 return; | 1857 return; |
| 1773 | 1858 |
| 1774 let button = window.document.getElementById("abp-toolbarbutton") | 1859 let button = window.document.getElementById("abp-toolbarbutton") |
| 1775 || window.document.getElementById("abp-status"); | 1860 || window.document.getElementById("abp-status"); |
| 1776 if (!button) | 1861 if (!button) |
| 1777 return; | 1862 return; |
| 1778 | 1863 |
| 1779 let notification = Notification.getNextToShow(); | 1864 let notification = Notification.getNextToShow(url); |
| 1780 if (!notification) | 1865 if (!notification) |
| 1781 return; | 1866 return; |
| 1782 | 1867 |
| 1783 this._showNotification(window, button, notification); | 1868 this._showNotification(window, button, notification); |
| 1784 }, | 1869 }, |
| 1785 | 1870 |
| 1786 _showNotification: function(window, button, notification) | 1871 _showNotification: function(window, button, notification) |
| 1787 { | 1872 { |
| 1873 let panel = window.document.getElementById("abp-notification"); |
| 1874 if (panel.state !== "closed") |
| 1875 return; |
| 1876 |
| 1788 function insertMessage(element, text, links) | 1877 function insertMessage(element, text, links) |
| 1789 { | 1878 { |
| 1790 let match = /^(.*?)<(a|strong)>(.*?)<\/\2>(.*)$/.exec(text); | 1879 let match = /^(.*?)<(a|strong)>(.*?)<\/\2>(.*)$/.exec(text); |
| 1791 if (!match) | 1880 if (!match) |
| 1792 { | 1881 { |
| 1793 element.appendChild(window.document.createTextNode(text)); | 1882 element.appendChild(window.document.createTextNode(text)); |
| 1794 return; | 1883 return; |
| 1795 } | 1884 } |
| 1796 | 1885 |
| 1797 let [_, before, tagName, value, after] = match; | 1886 let [_, before, tagName, value, after] = match; |
| 1798 | 1887 |
| 1799 insertMessage(element, before, links); | 1888 insertMessage(element, before, links); |
| 1800 | 1889 |
| 1801 let newElement = window.document.createElementNS("http://www.w3.org/1999/x
html", tagName); | 1890 let newElement = window.document.createElementNS("http://www.w3.org/1999/x
html", tagName); |
| 1802 if (tagName === "a" && links && links.length) | 1891 if (tagName === "a" && links && links.length) |
| 1803 newElement.setAttribute("href", links.shift()); | 1892 newElement.setAttribute("href", links.shift()); |
| 1804 insertMessage(newElement, value, links); | 1893 insertMessage(newElement, value, links); |
| 1805 element.appendChild(newElement); | 1894 element.appendChild(newElement); |
| 1806 | 1895 |
| 1807 insertMessage(element, after, links); | 1896 insertMessage(element, after, links); |
| 1808 } | 1897 } |
| 1809 | 1898 |
| 1810 let texts = Notification.getLocalizedTexts(notification); | 1899 let texts = Notification.getLocalizedTexts(notification); |
| 1811 let titleElement = window.document.getElementById("abp-notification-title"); | 1900 let titleElement = window.document.getElementById("abp-notification-title"); |
| 1812 titleElement.setAttribute("value", texts.title); | 1901 titleElement.setAttribute("value", texts.title); |
| 1813 let messageElement = window.document.getElementById("abp-notification-messag
e"); | 1902 let messageElement = window.document.getElementById("abp-notification-messag
e"); |
| 1903 messageElement.innerHTML = ""; |
| 1814 let docLinks = []; | 1904 let docLinks = []; |
| 1815 for each (let link in notification.links) | 1905 for each (let link in notification.links) |
| 1816 docLinks.push(Utils.getDocLink(link)); | 1906 docLinks.push(Utils.getDocLink(link)); |
| 1817 insertMessage(messageElement, texts.message, docLinks); | 1907 insertMessage(messageElement, texts.message, docLinks); |
| 1818 | 1908 |
| 1819 messageElement.addEventListener("click", function(event) | 1909 messageElement.addEventListener("click", function(event) |
| 1820 { | 1910 { |
| 1821 let link = event.target; | 1911 let link = event.target; |
| 1822 while (link && link !== messageElement && link.localName !== "a") | 1912 while (link && link !== messageElement && link.localName !== "a") |
| 1823 link = link.parentNode; | 1913 link = link.parentNode; |
| 1824 if (!link) | 1914 if (!link || link.localName !== "a") |
| 1825 return; | 1915 return; |
| 1826 event.preventDefault(); | 1916 event.preventDefault(); |
| 1827 event.stopPropagation(); | 1917 event.stopPropagation(); |
| 1828 this.loadInBrowser(link.href, window); | 1918 this.loadInBrowser(link.href, window); |
| 1829 }.bind(this)); | 1919 }.bind(this)); |
| 1830 | 1920 |
| 1831 let panel = window.document.getElementById("abp-notification"); | 1921 if (notification.type === "question") |
| 1922 { |
| 1923 function buttonHandler(approved, event) |
| 1924 { |
| 1925 event.preventDefault(); |
| 1926 event.stopPropagation(); |
| 1927 panel.hidePopup(); |
| 1928 Notification.triggerQuestionListeners(notification.id, approved) |
| 1929 Notification.markAsShown(notification.id); |
| 1930 } |
| 1931 window.document.getElementById("abp-notification-yes").onclick = buttonHan
dler.bind(null, true); |
| 1932 window.document.getElementById("abp-notification-no").onclick = buttonHand
ler.bind(null, false); |
| 1933 } |
| 1934 |
| 1935 panel.setAttribute("class", "abp-" + notification.type); |
| 1936 panel.setAttribute("noautohide", notification.type === "question"); |
| 1832 panel.openPopup(button, "bottomcenter topcenter", 0, 0, false, false, null); | 1937 panel.openPopup(button, "bottomcenter topcenter", 0, 0, false, false, null); |
| 1833 } | 1938 } |
| 1834 }; | 1939 }; |
| 1835 UI.onPopupShowing = UI.onPopupShowing.bind(UI); | 1940 UI.onPopupShowing = UI.onPopupShowing.bind(UI); |
| 1836 UI.onKeyPress = UI.onKeyPress.bind(UI); | 1941 UI.onKeyPress = UI.onKeyPress.bind(UI); |
| 1837 UI.onIconClick = UI.onIconClick.bind(UI); | 1942 UI.onIconClick = UI.onIconClick.bind(UI); |
| 1838 UI.init(); | 1943 UI.init(); |
| 1839 | 1944 |
| 1840 /** | 1945 /** |
| 1841 * List of event handers to be registered for each window. For each event | 1946 * List of event handers to be registered for each window. For each event |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1858 ["abp-command-contribute", "command", UI.openContributePage.bind(UI)], | 1963 ["abp-command-contribute", "command", UI.openContributePage.bind(UI)], |
| 1859 ["abp-command-contribute-hide", "command", UI.hideContributeButton.bind(UI)] | 1964 ["abp-command-contribute-hide", "command", UI.hideContributeButton.bind(UI)] |
| 1860 ]; | 1965 ]; |
| 1861 | 1966 |
| 1862 onShutdown.add(function() | 1967 onShutdown.add(function() |
| 1863 { | 1968 { |
| 1864 for (let window in UI.applicationWindows) | 1969 for (let window in UI.applicationWindows) |
| 1865 if (UI.isBottombarOpen(window)) | 1970 if (UI.isBottombarOpen(window)) |
| 1866 UI.toggleBottombar(window); | 1971 UI.toggleBottombar(window); |
| 1867 }); | 1972 }); |
| OLD | NEW |