diff options
Diffstat (limited to 'toolkit/components/privatebrowsing')
4 files changed, 132 insertions, 0 deletions
diff --git a/toolkit/components/privatebrowsing/PrivateBrowsing.manifest b/toolkit/components/privatebrowsing/PrivateBrowsing.manifest new file mode 100644 index 000000000..36b39bb85 --- /dev/null +++ b/toolkit/components/privatebrowsing/PrivateBrowsing.manifest @@ -0,0 +1,2 @@ +component {a319b616-c45d-4037-8d86-01c592b5a9af} PrivateBrowsingTrackingProtectionWhitelist.js +contract @mozilla.org/pbm-tp-whitelist;1 {a319b616-c45d-4037-8d86-01c592b5a9af} diff --git a/toolkit/components/privatebrowsing/PrivateBrowsingTrackingProtectionWhitelist.js b/toolkit/components/privatebrowsing/PrivateBrowsingTrackingProtectionWhitelist.js new file mode 100644 index 000000000..5c1c27874 --- /dev/null +++ b/toolkit/components/privatebrowsing/PrivateBrowsingTrackingProtectionWhitelist.js @@ -0,0 +1,68 @@ +/* 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]); diff --git a/toolkit/components/privatebrowsing/moz.build b/toolkit/components/privatebrowsing/moz.build new file mode 100644 index 000000000..160539d08 --- /dev/null +++ b/toolkit/components/privatebrowsing/moz.build @@ -0,0 +1,16 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/. + +XPIDL_SOURCES += [ + 'nsIPrivateBrowsingTrackingProtectionWhitelist.idl', +] + +XPIDL_MODULE = 'privatebrowsing' + +EXTRA_COMPONENTS += [ + 'PrivateBrowsing.manifest', + 'PrivateBrowsingTrackingProtectionWhitelist.js', +] diff --git a/toolkit/components/privatebrowsing/nsIPrivateBrowsingTrackingProtectionWhitelist.idl b/toolkit/components/privatebrowsing/nsIPrivateBrowsingTrackingProtectionWhitelist.idl new file mode 100644 index 000000000..d572b4e7e --- /dev/null +++ b/toolkit/components/privatebrowsing/nsIPrivateBrowsingTrackingProtectionWhitelist.idl @@ -0,0 +1,46 @@ +/* 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/. */ + +#include "nsISupports.idl" + +interface nsIURI; + +/** + * The Private Browsing Tracking Protection service checks a URI against an + * in-memory list of tracking sites. + */ +[scriptable, uuid(c77ddfac-6cd6-43a9-84e8-91682a1a7b18)] +interface nsIPrivateBrowsingTrackingProtectionWhitelist : nsISupports +{ + /** + * Add a URI to the list of allowed tracking sites in Private Browsing mode + * (essentially a tracking whitelist). This operation will cause the URI to + * be registered if it does not currently exist. If it already exists, then + * the operation is essentially a no-op. + * + * @param uri the uri to add to the list + */ + void addToAllowList(in nsIURI uri); + + /** + * Remove a URI from the list of allowed tracking sites in Private Browsing + * mode (the tracking whitelist). If the URI is not already in the list, + * then the operation is essentially a no-op. + * + * @param uri the uri to remove from the list + */ + void removeFromAllowList(in nsIURI uri); + + /** + * Check if a URI exists in the list of allowed tracking sites in Private + * Browsing mode (the tracking whitelist). + * + * @param uri the uri to look for in the list + */ + bool existsInAllowList(in nsIURI uri); +}; + +%{ C++ +#define NS_PBTRACKINGPROTECTIONWHITELIST_CONTRACTID "@mozilla.org/pbm-tp-whitelist;1" +%} |