forked from mirrors/gecko-dev
		
	 ad3a7c0431
			
		
	
	
		ad3a7c0431
		
	
	
	
	
		
			
			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,
 | |
|     });
 | |
|   }
 | |
| }
 |