274712 - new options dialog
authorben@bengoodger.com
Tue, 02 Oct 2007 20:35:18 -0700
changeset 6568 0825f299c5d469c7e1124f48879436bb8ddaa873
parent 6567 a08ddfd521692dc9495b551a96697774b7877cbb
child 6569 95e886902b1462100f0f07e79b0ebd79519c8f66
push idunknown
push userunknown
push dateunknown
bugs274712
milestone1.9a9pre
274712 - new options dialog
browser/modules/Sanitizer.jsm
new file mode 100644
--- /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 <ben@mozilla.org>
+# 
+# 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();
+      },
+    },
+  },
+};
+