forked from mirrors/gecko-dev
Makes passing a progress object as part of options more coherent in the Sanitizer, so we don't need to null check it everywhere. Create a sub progress object for each cleaner, so they don't overwrite each other reusing the same property names (like "step"), since all the cleaners are started in parallel. Add a few steps to the history cleaner. This also fixes a typo in the openWindows cleaner, that should receive an object rather than a string as second argument. Adding a test for this feature is not trivial, thus I filed https://bugzilla.mozilla.org/show_bug.cgi?id=1803174. Differential Revision: https://phabricator.services.mozilla.com/D163352
85 lines
2.8 KiB
JavaScript
85 lines
2.8 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/. */
|
|
"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,
|
|
});
|
|
}
|
|
}
|