From 4c51e44a3ca8aa46f97fbc9f69c3bf5e8d92486a Mon Sep 17 00:00:00 2001 From: "ben@bengoodger.com" Date: Tue, 2 Oct 2007 20:35:18 -0700 Subject: [PATCH] 274712 - new options dialog --- browser/modules/Sanitizer.jsm | 189 ++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 browser/modules/Sanitizer.jsm diff --git a/browser/modules/Sanitizer.jsm b/browser/modules/Sanitizer.jsm new file mode 100644 index 000000000000..53a16bbe757e --- /dev/null +++ b/browser/modules/Sanitizer.jsm @@ -0,0 +1,189 @@ +# -*- 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) + { + dump("*** " + aPreferenceName + ", i = " + this._prefDomain.length + ", sub = " + aPreferenceName.substr(this._prefDomain.length, -1) + "\n"); + return aPreferenceName.substr(this._prefDomain.length); + }, + + sanitize: function () + { + dump("*** sanitizing!\n"); + 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(); + }, + }, + }, +}; +