diff options
Diffstat (limited to 'browser/components/extensions/ExtensionBrowsingData.jsm')
-rw-r--r-- | browser/components/extensions/ExtensionBrowsingData.jsm | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/browser/components/extensions/ExtensionBrowsingData.jsm b/browser/components/extensions/ExtensionBrowsingData.jsm new file mode 100644 index 0000000000..2671228e0b --- /dev/null +++ b/browser/components/extensions/ExtensionBrowsingData.jsm @@ -0,0 +1,85 @@ +/* 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/. */ +"use strict"; + +const EXPORTED_SYMBOLS = ["BrowsingDataDelegate"]; + +const { XPCOMUtils } = ChromeUtils.importESModule( + "resource://gre/modules/XPCOMUtils.sys.mjs" +); + +const lazy = {}; + +XPCOMUtils.defineLazyGetter(lazy, "makeRange", () => { + const { ExtensionParent } = ChromeUtils.import( + "resource://gre/modules/ExtensionParent.jsm" + ); + // Defined in ext-browsingData.js + return ExtensionParent.apiManager.global.makeRange; +}); + +ChromeUtils.defineESModuleGetters(lazy, { + Preferences: "resource://gre/modules/Preferences.sys.mjs", +}); + +XPCOMUtils.defineLazyModuleGetters(lazy, { + Sanitizer: "resource:///modules/Sanitizer.jsm", +}); + +class BrowsingDataDelegate { + // Unused for now + constructor(extension) {} + + // This method returns undefined for all data types that are _not_ handled by + // this delegate. + handleRemoval(dataType, options) { + // TODO (Bug 1803799): Use Sanitizer.sanitize() instead of internal cleaners. + let o = { progress: {} }; + switch (dataType) { + case "downloads": + return lazy.Sanitizer.items.downloads.clear(lazy.makeRange(options), o); + case "formData": + return lazy.Sanitizer.items.formdata.clear(lazy.makeRange(options), o); + case "history": + return lazy.Sanitizer.items.history.clear(lazy.makeRange(options), o); + + default: + return undefined; + } + } + + settings() { + const PREF_DOMAIN = "privacy.cpd."; + // The following prefs are the only ones in Firefox that match corresponding + // values used by Chrome when rerturning settings. + const PREF_LIST = ["cache", "cookies", "history", "formdata", "downloads"]; + + // since will be the start of what is returned by Sanitizer.getClearRange + // divided by 1000 to convert to ms. + // If Sanitizer.getClearRange returns undefined that means the range is + // currently "Everything", so we should set since to 0. + let clearRange = lazy.Sanitizer.getClearRange(); + let since = clearRange ? clearRange[0] / 1000 : 0; + let options = { since }; + + let dataToRemove = {}; + let dataRemovalPermitted = {}; + + for (let item of PREF_LIST) { + // The property formData needs a different case than the + // formdata preference. + const name = item === "formdata" ? "formData" : item; + dataToRemove[name] = lazy.Preferences.get(`${PREF_DOMAIN}${item}`); + // Firefox doesn't have the same concept of dataRemovalPermitted + // as Chrome, so it will always be true. + dataRemovalPermitted[name] = true; + } + + return Promise.resolve({ + options, + dataToRemove, + dataRemovalPermitted, + }); + } +} |