# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- # Version: MPL 1.1/GPL 2.0/LGPL 2.1 # # The contents of this file are subject to the Mozilla Public License Version # 1.1 (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # http://www.mozilla.org/MPL/ # # Software distributed under the License is distributed on an "AS IS" basis, # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License # for the specific language governing rights and limitations under the # License. # # The Original Code is the Firefox Sanitizer. # # The Initial Developer of the Original Code is Ben Goodger. # Portions created by the Initial Developer are Copyright (C) 2005 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Ben Goodger # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), # in which case the provisions of the GPL or the LGPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of either the GPL or the LGPL, and not to allow others to # use your version of this file under the terms of the MPL, indicate your # decision by deleting the provisions above and replace them with the notice # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** function Sanitizer() {} Sanitizer.prototype = { clearItem: function (aItemName) { if (this.items[aItemName].canClear) this.items[aItemName].clear(); }, canClearItem: function (aItemName) { return this.items[aItemName].canClear; }, _prefDomain: "privacy.item.", getNameFromPreference: function (aPreferenceName) { return aPreferenceName.substr(this._prefDomain.length); }, sanitize: function () { var psvc = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefService); var branch = psvc.getBranch(this._prefDomain); for (var itemName in this.items) { var item = this.items[itemName]; if ("clear" in item && item.canClear && branch.getBoolPref(itemName)) item.clear(); } }, items: { cache: { clear: function () { var cacheService = Components.classes["@mozilla.org/network/cache-service;1"] .getService(Components.interfaces.nsICacheService); cacheService.evictEntries(Components.interfaces.nsICache.STORE_ON_DISK); cacheService.evictEntries(Components.interfaces.nsICache.STORE_IN_MEMORY); }, get canClear() { return true; } }, cookies: { clear: function () { var cookieMgr = Components.classes["@mozilla.org/cookiemanager;1"] .getService(Components.interfaces.nsICookieManager); var e = cookieMgr.enumerator; var cookies = []; while (e.hasMoreElements()) { var cookie = e.getNext().QueryInterface(Components.interfaces.nsICookie); cookies.push(cookie); } for (var i = 0; i < cookies.length; ++i) cookieMgr.remove(cookies[i].host, cookies[i].name, cookies[i].path, false); }, get canClear() { var cookieMgr = Components.classes["@mozilla.org/cookiemanager;1"] .getService(Components.interfaces.nsICookieManager); return cookieMgr.enumerator.hasMoreElements(); }, }, history: { clear: function () { var globalHistory = Components.classes["@mozilla.org/browser/global-history;2"] .getService(Components.interfaces.nsIBrowserHistory); globalHistory.removeAllPages(); try { var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); os.notifyObservers(null, "browser:purge-session-history", ""); } catch (e) { } }, get canClear() { var globalHistory = Components.classes["@mozilla.org/browser/global-history;2"] .getService(Components.interfaces.nsIBrowserHistory); return globalHistory.count != 0; }, }, formdata: { clear: function () { var formHistory = Components.classes["@mozilla.org/satchel/form-history;1"] .getService(Components.interfaces.nsIFormHistory); formHistory.removeAllEntries(); }, get canClear() { var formHistory = Components.classes["@mozilla.org/satchel/form-history;1"] .getService(Components.interfaces.nsIFormHistory); return formHistory.rowCount != 0; }, }, downloads: { clear: function () { var dlMgr = Components.classes["@mozilla.org/download-manager;1"] .getService(Components.interfaces.nsIDownloadManager); dlMgr.cleanUp(); }, get canClear() { var dlMgr = Components.classes["@mozilla.org/download-manager;1"] .getService(Components.interfaces.nsIDownloadManager); return dlMgr.canCleanUp; }, }, passwords: { clear: function () { var pwmgr = Components.classes["@mozilla.org/passwordmanager;1"] .getService(Components.interfaces.nsIPasswordManager); var e = pwmgr.enumerator; var passwds = []; while (e.hasMoreElements()) { var passwd = e.getNext().QueryInterface(Components.interfaces.nsIPassword); passwds.push(passwd); } for (var i = 0; i < passwds.length; ++i) pwmgr.removeUser(passwds[i].host, passwds[i].user); }, get canClear() { var pwmgr = Components.classes["@mozilla.org/passwordmanager;1"] .getService(Components.interfaces.nsIPasswordManager); return pwmgr.enumerator.hasMoreElements(); }, }, }, };