summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/ExtensionBrowsingData.jsm
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--browser/components/extensions/ExtensionBrowsingData.jsm85
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,
+ });
+ }
+}