gecko/toolkit/components/privatebrowsing/PrivateBrowsingTrackingProtectionWhitelist.js

69 lines
2.1 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
function PrivateBrowsingTrackingProtectionWhitelist() {
// The list of URIs explicitly excluded from tracking protection.
this._allowlist = [];
Services.obs.addObserver(this, "last-pb-context-exited", true);
}
PrivateBrowsingTrackingProtectionWhitelist.prototype = {
classID: Components.ID("{a319b616-c45d-4037-8d86-01c592b5a9af}"),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIPrivateBrowsingTrackingProtectionWhitelist,
Ci.nsIObserver,
Ci.nsISupportsWeakReference,
Ci.nsISupports]),
_xpcom_factory: XPCOMUtils.generateSingletonFactory(PrivateBrowsingTrackingProtectionWhitelist),
/**
* Add the provided URI to the list of allowed tracking sites.
*
* @param uri nsIURI
* The URI to add to the list.
*/
addToAllowList(uri) {
if (this._allowlist.indexOf(uri.spec) === -1) {
this._allowlist.push(uri.spec);
}
},
/**
* Remove the provided URI from the list of allowed tracking sites.
*
* @param uri nsIURI
* The URI to add to the list.
*/
removeFromAllowList(uri) {
let index = this._allowlist.indexOf(uri.spec);
if (index !== -1) {
this._allowlist.splice(index, 1);
}
},
/**
* Check if the provided URI exists in the list of allowed tracking sites.
*
* @param uri nsIURI
* The URI to add to the list.
*/
existsInAllowList(uri) {
return this._allowlist.indexOf(uri.spec) !== -1;
},
observe: function (subject, topic, data) {
if (topic == "last-pb-context-exited") {
this._allowlist = [];
}
}
};
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PrivateBrowsingTrackingProtectionWhitelist]);