diff options
Diffstat (limited to 'helpers/DATA/firefox/trisquel/extensions/spyblock@gnu.org/lib/subscriptionClasses.js')
-rw-r--r-- | helpers/DATA/firefox/trisquel/extensions/spyblock@gnu.org/lib/subscriptionClasses.js | 597 |
1 files changed, 0 insertions, 597 deletions
diff --git a/helpers/DATA/firefox/trisquel/extensions/spyblock@gnu.org/lib/subscriptionClasses.js b/helpers/DATA/firefox/trisquel/extensions/spyblock@gnu.org/lib/subscriptionClasses.js deleted file mode 100644 index 13dceaf..0000000 --- a/helpers/DATA/firefox/trisquel/extensions/spyblock@gnu.org/lib/subscriptionClasses.js +++ /dev/null @@ -1,597 +0,0 @@ -/* - * This file is part of Adblock Plus <http://adblockplus.org/>, - * Copyright (C) 2006-2014 Eyeo GmbH - * - * Adblock Plus is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. - * - * Adblock Plus is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. - */ - -/** - * @fileOverview Definition of Subscription class and its subclasses. - */ - -Cu.import("resource://gre/modules/Services.jsm"); - -let {ActiveFilter, BlockingFilter, WhitelistFilter, ElemHideBase} = require("filterClasses"); -let {FilterNotifier} = require("filterNotifier"); - -/** - * Abstract base class for filter subscriptions - * - * @param {String} url download location of the subscription - * @param {String} [title] title of the filter subscription - * @constructor - */ -function Subscription(url, title) -{ - this.url = url; - this.filters = []; - if (title) - this._title = title; - else - { - let {Utils} = require("utils"); - this._title = Utils.getString("newGroup_title"); - } - Subscription.knownSubscriptions[url] = this; -} -exports.Subscription = Subscription; - -Subscription.prototype = -{ - /** - * Download location of the subscription - * @type String - */ - url: null, - - /** - * Filters contained in the filter subscription - * @type Array of Filter - */ - filters: null, - - _title: null, - _fixedTitle: false, - _disabled: false, - - /** - * Title of the filter subscription - * @type String - */ - get title() - { - return this._title; - }, - set title(value) - { - if (value != this._title) - { - let oldValue = this._title; - this._title = value; - FilterNotifier.triggerListeners("subscription.title", this, value, oldValue); - } - return this._title; - }, - - /** - * Determines whether the title should be editable - * @type Boolean - */ - get fixedTitle() - { - return this._fixedTitle; - }, - set fixedTitle(value) - { - if (value != this._fixedTitle) - { - let oldValue = this._fixedTitle; - this._fixedTitle = value; - FilterNotifier.triggerListeners("subscription.fixedTitle", this, value, oldValue); - } - return this._fixedTitle; - }, - - /** - * Defines whether the filters in the subscription should be disabled - * @type Boolean - */ - get disabled() - { - return this._disabled; - }, - set disabled(value) - { - if (value != this._disabled) - { - let oldValue = this._disabled; - this._disabled = value; - FilterNotifier.triggerListeners("subscription.disabled", this, value, oldValue); - } - return this._disabled; - }, - - /** - * Serializes the filter to an array of strings for writing out on the disk. - * @param {Array of String} buffer buffer to push the serialization results into - */ - serialize: function(buffer) - { - buffer.push("[Subscription]"); - buffer.push("url=" + this.url); - buffer.push("title=" + this._title); - if (this._fixedTitle) - buffer.push("fixedTitle=true"); - if (this._disabled) - buffer.push("disabled=true"); - }, - - serializeFilters: function(buffer) - { - for (let filter of this.filters) - buffer.push(filter.text.replace(/\[/g, "\\[")); - }, - - toString: function() - { - let buffer = []; - this.serialize(buffer); - return buffer.join("\n"); - } -}; - -/** - * Cache for known filter subscriptions, maps URL to subscription objects. - * @type Object - */ -Subscription.knownSubscriptions = {__proto__: null}; - -/** - * Returns a subscription from its URL, creates a new one if necessary. - * @param {String} url URL of the subscription - * @return {Subscription} subscription or null if the subscription couldn't be created - */ -Subscription.fromURL = function(url) -{ - if (url in Subscription.knownSubscriptions) - return Subscription.knownSubscriptions[url]; - - try - { - // Test URL for validity - url = Services.io.newURI(url, null, null).spec; - return new DownloadableSubscription(url, null); - } - catch (e) - { - return new SpecialSubscription(url); - } -} - -/** - * Deserializes a subscription - * - * @param {Object} obj map of serialized properties and their values - * @return {Subscription} subscription or null if the subscription couldn't be created - */ -Subscription.fromObject = function(obj) -{ - let result; - try - { - obj.url = Services.io.newURI(obj.url, null, null).spec; - - // URL is valid - this is a downloadable subscription - result = new DownloadableSubscription(obj.url, obj.title); - if ("downloadStatus" in obj) - result._downloadStatus = obj.downloadStatus; - if ("lastSuccess" in obj) - result.lastSuccess = parseInt(obj.lastSuccess) || 0; - if ("lastCheck" in obj) - result._lastCheck = parseInt(obj.lastCheck) || 0; - if ("expires" in obj) - result.expires = parseInt(obj.expires) || 0; - if ("softExpiration" in obj) - result.softExpiration = parseInt(obj.softExpiration) || 0; - if ("errors" in obj) - result._errors = parseInt(obj.errors) || 0; - if ("version" in obj) - result.version = parseInt(obj.version) || 0; - if ("requiredVersion" in obj) - { - let {addonVersion} = require("info"); - result.requiredVersion = obj.requiredVersion; - if (Services.vc.compare(result.requiredVersion, addonVersion) > 0) - result.upgradeRequired = true; - } - if ("homepage" in obj) - result._homepage = obj.homepage; - if ("lastDownload" in obj) - result._lastDownload = parseInt(obj.lastDownload) || 0; - } - catch (e) - { - // Invalid URL - custom filter group - if (!("title" in obj)) - { - // Backwards compatibility - titles and filter types were originally - // determined by group identifier. - if (obj.url == "~wl~") - obj.defaults = "whitelist"; - else if (obj.url == "~fl~") - obj.defaults = "blocking"; - else if (obj.url == "~eh~") - obj.defaults = "elemhide"; - if ("defaults" in obj) - { - let {Utils} = require("utils"); - obj.title = Utils.getString(obj.defaults + "Group_title"); - } - } - result = new SpecialSubscription(obj.url, obj.title); - if ("defaults" in obj) - result.defaults = obj.defaults.split(" "); - } - if ("fixedTitle" in obj) - result._fixedTitle = (obj.fixedTitle == "true"); - if ("privateMode" in obj) - result.privateMode = (obj.privateMode == "true"); - if ("disabled" in obj) - result._disabled = (obj.disabled == "true"); - - return result; -} - -/** - * Class for special filter subscriptions (user's filters) - * @param {String} url see Subscription() - * @param {String} [title] see Subscription() - * @constructor - * @augments Subscription - */ -function SpecialSubscription(url, title) -{ - Subscription.call(this, url, title); -} -exports.SpecialSubscription = SpecialSubscription; - -SpecialSubscription.prototype = -{ - __proto__: Subscription.prototype, - - /** - * Filter types that should be added to this subscription by default - * (entries should correspond to keys in SpecialSubscription.defaultsMap). - * @type Array of String - */ - defaults: null, - - /** - * Tests whether a filter should be added to this group by default - * @param {Filter} filter filter to be tested - * @return {Boolean} - */ - isDefaultFor: function(filter) - { - if (this.defaults && this.defaults.length) - { - for (let type of this.defaults) - { - if (filter instanceof SpecialSubscription.defaultsMap[type]) - return true; - if (!(filter instanceof ActiveFilter) && type == "blacklist") - return true; - } - } - - return false; - }, - - /** - * See Subscription.serialize() - */ - serialize: function(buffer) - { - Subscription.prototype.serialize.call(this, buffer); - if (this.defaults && this.defaults.length) - buffer.push("defaults=" + this.defaults.filter((type) => type in SpecialSubscription.defaultsMap).join(" ")); - if (this._lastDownload) - buffer.push("lastDownload=" + this._lastDownload); - } -}; - -SpecialSubscription.defaultsMap = { - __proto__: null, - "whitelist": WhitelistFilter, - "blocking": BlockingFilter, - "elemhide": ElemHideBase -}; - -/** - * Creates a new user-defined filter group. - * @param {String} [title] title of the new filter group - * @result {SpecialSubscription} - */ -SpecialSubscription.create = function(title) -{ - let url; - do - { - url = "~user~" + Math.round(Math.random()*1000000); - } while (url in Subscription.knownSubscriptions); - return new SpecialSubscription(url, title) -}; - -/** - * Creates a new user-defined filter group and adds the given filter to it. - * This group will act as the default group for this filter type. - */ -SpecialSubscription.createForFilter = function(/**Filter*/ filter) /**SpecialSubscription*/ -{ - let subscription = SpecialSubscription.create(); - subscription.filters.push(filter); - for (let type in SpecialSubscription.defaultsMap) - { - if (filter instanceof SpecialSubscription.defaultsMap[type]) - subscription.defaults = [type]; - } - if (!subscription.defaults) - subscription.defaults = ["blocking"]; - - let {Utils} = require("utils"); - subscription.title = Utils.getString(subscription.defaults[0] + "Group_title"); - return subscription; -}; - -/** - * Abstract base class for regular filter subscriptions (both internally and externally updated) - * @param {String} url see Subscription() - * @param {String} [title] see Subscription() - * @constructor - * @augments Subscription - */ -function RegularSubscription(url, title) -{ - Subscription.call(this, url, title || url); -} -exports.RegularSubscription = RegularSubscription; - -RegularSubscription.prototype = -{ - __proto__: Subscription.prototype, - - _homepage: null, - _lastDownload: 0, - - /** - * Filter subscription homepage if known - * @type String - */ - get homepage() - { - return this._homepage; - }, - set homepage(value) - { - if (value != this._homepage) - { - let oldValue = this._homepage; - this._homepage = value; - FilterNotifier.triggerListeners("subscription.homepage", this, value, oldValue); - } - return this._homepage; - }, - - /** - * Time of the last subscription download (in seconds since the beginning of the epoch) - * @type Number - */ - get lastDownload() - { - return this._lastDownload; - }, - set lastDownload(value) - { - if (value != this._lastDownload) - { - let oldValue = this._lastDownload; - this._lastDownload = value; - FilterNotifier.triggerListeners("subscription.lastDownload", this, value, oldValue); - } - return this._lastDownload; - }, - - /** - * See Subscription.serialize() - */ - serialize: function(buffer) - { - Subscription.prototype.serialize.call(this, buffer); - if (this._homepage) - buffer.push("homepage=" + this._homepage); - if (this._lastDownload) - buffer.push("lastDownload=" + this._lastDownload); - } -}; - -/** - * Class for filter subscriptions updated by externally (by other extension) - * @param {String} url see Subscription() - * @param {String} [title] see Subscription() - * @constructor - * @augments RegularSubscription - */ -function ExternalSubscription(url, title) -{ - RegularSubscription.call(this, url, title); -} -exports.ExternalSubscription = ExternalSubscription; - -ExternalSubscription.prototype = -{ - __proto__: RegularSubscription.prototype, - - /** - * See Subscription.serialize() - */ - serialize: function(buffer) - { - throw new Error("Unexpected call, external subscriptions should not be serialized"); - } -}; - -/** - * Class for filter subscriptions updated by externally (by other extension) - * @param {String} url see Subscription() - * @param {String} [title] see Subscription() - * @constructor - * @augments RegularSubscription - */ -function DownloadableSubscription(url, title) -{ - RegularSubscription.call(this, url, title); -} -exports.DownloadableSubscription = DownloadableSubscription; - -DownloadableSubscription.prototype = -{ - __proto__: RegularSubscription.prototype, - - _downloadStatus: null, - _lastCheck: 0, - _errors: 0, - - /** - * Status of the last download (ID of a string) - * @type String - */ - get downloadStatus() - { - return this._downloadStatus; - }, - set downloadStatus(value) - { - let oldValue = this._downloadStatus; - this._downloadStatus = value; - FilterNotifier.triggerListeners("subscription.downloadStatus", this, value, oldValue); - return this._downloadStatus; - }, - - /** - * Time of the last successful download (in seconds since the beginning of the - * epoch). - */ - lastSuccess: 0, - - /** - * Time when the subscription was considered for an update last time (in seconds - * since the beginning of the epoch). This will be used to increase softExpiration - * if the user doesn't use Adblock Plus for some time. - * @type Number - */ - get lastCheck() - { - return this._lastCheck; - }, - set lastCheck(value) - { - if (value != this._lastCheck) - { - let oldValue = this._lastCheck; - this._lastCheck = value; - FilterNotifier.triggerListeners("subscription.lastCheck", this, value, oldValue); - } - return this._lastCheck; - }, - - /** - * Hard expiration time of the filter subscription (in seconds since the beginning of the epoch) - * @type Number - */ - expires: 0, - - /** - * Soft expiration time of the filter subscription (in seconds since the beginning of the epoch) - * @type Number - */ - softExpiration: 0, - - /** - * Number of download failures since last success - * @type Number - */ - get errors() - { - return this._errors; - }, - set errors(value) - { - if (value != this._errors) - { - let oldValue = this._errors; - this._errors = value; - FilterNotifier.triggerListeners("subscription.errors", this, value, oldValue); - } - return this._errors; - }, - - /** - * Version of the subscription data retrieved on last successful download - * @type Number - */ - version: 0, - - /** - * Minimal Adblock Plus version required for this subscription - * @type String - */ - requiredVersion: null, - - /** - * Should be true if requiredVersion is higher than current Adblock Plus version - * @type Boolean - */ - upgradeRequired: false, - - /** - * Should be true if the Privatemode: header is set to true in the subscription - * @type Boolean - */ - privateMode: false, - - /** - * See Subscription.serialize() - */ - serialize: function(buffer) - { - RegularSubscription.prototype.serialize.call(this, buffer); - if (this.downloadStatus) - buffer.push("downloadStatus=" + this.downloadStatus); - if (this.lastSuccess) - buffer.push("lastSuccess=" + this.lastSuccess); - if (this.lastCheck) - buffer.push("lastCheck=" + this.lastCheck); - if (this.expires) - buffer.push("expires=" + this.expires); - if (this.softExpiration) - buffer.push("softExpiration=" + this.softExpiration); - if (this.errors) - buffer.push("errors=" + this.errors); - if (this.version) - buffer.push("version=" + this.version); - if (this.requiredVersion) - buffer.push("requiredVersion=" + this.requiredVersion); - if (this.privateMode) - buffer.push("privateMode=" + this.privateMode); - } -}; |