var PLUGIN_INFO = {NAME} clear privacy data 2.0pre 2.0pre teramako MPL 1.1/GPL 2.0/LGPL 2.1 0.1 ; liberator.plugins.privacySanitizer = (function(){ if (Application.version.substring(0,3) != "3.1") return null; var privacyManager = { // {{{ cache: { clear: function(){ var cacheService = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService); try { getCacheService.evictEntries(Ci.nsICache.STORE_ANYWHERE); } catch (er) {} }, getPref: function() options.getPref("privacy.cpd.cache") }, cookies: { clear: function(range){ var cookieMgr = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager); if (range){ var cookiesEnum = cookieMgr.enumrator; while (cookiesEnum.hasMoreElements()){ var cookie = cookiesEnum.getNext().QueryInterface(Ci.nsICookie2); if (cookie.creationTime > this.range[0]) cookieMgr.remove(cookie.host, cookie.name, cookie.path, false); } } else { cookieMgr.removeAll(); } }, getPref: function() options.getPref("privacy.cpd.cookies") }, offlineApps: { clear: function(){ var cacheService = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService); try { cacheService.evictEntries(Ci.nsICache.STORE_OFFLINE); } catch(er) {} var storageManagerService = Cc["@mozilla.org/dom/storagemanager;1"].getService(Ci.nsIDOMStorageManager); storageManagerService.clearOfflineApps(); }, getPref: function() options.getPref("privacy.cpd.offlineApps") }, history: { clear: function(range){ var globalHistory = Cc["@mozilla.org/browser/global-history;2"].getService(Ci.nsIBrowserHistory); if (range) globalHistory.removePageByTimeframe(range[0], range[1]); else globalHistory.removeAllPages(); try { var os = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService); os.notifyObservers(null, "browser:purge-session-history", ""); } catch(e) {} var prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch2); try { prefs.clearUserPref("general.open_location.last_url"); } catch(er) {} }, getPref: function() options.getPref("privacy.cpd.history") }, formdata: { clear: function(range){ var windowManager = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); var windows = windowManager.getEnumerator("navigator:browser"); while (windows.hasMoreElements()){ var searchBar = windows.getNext().document.getElementById("searchbar"); if (searchBar){ searchBar.value = ""; searchBar.textbox.editor.transactionManager.clear(); } } var formHistory = Cc["@mozilla.org/satchel/form-history;1"].getService(Ci.nsIFormHistory2); if (range) formHistory.removeEntriesByTimeframe(range[0], range[1]); else formHistory.removeAllEntries(); }, getPref: function() options.getPref("privacy.cpd.formdata") }, sessions: { clear: function(){ var sdr = Cc["@mozilla.org/security/sdr;1"].getService(Ci.nsISecretDecoderRing); sdr.logoutAndTeardown(); var authMgr = Cc["@mozilla.org/network/http-auth-manager;1"].getService(Ci.nsIHttpAuthManager); authMgr.clearAll(); }, getPref: function() options.getPref("privacy.cpd.sessions") } } // }}} function getDefaultClearList(){ var list = []; for (var name in privacyManager){ if (privacyManager[name].getPref()) list.push(name); } return list; } function getTimeRange(ts, isPref){ var endDate = Date.now() * 1000; var startDate; if (isPref){ if (ts == 0) return null; switch (ts){ case 1: case 2: startDate = endDate - (ts*60*60*1000000); break; case 3: startDate = endDate - (4*60*60*1000000); break; case 4: var d = new Date(); d.setHours(0); d.setMinutes(0); d.setSeconds(0); startDate = d.valueof() * 1000; break; default: throw "Invalid time span for clear private data: " + ts; } } else { startDate = endDate - parseTime(ts); } return [startDate, endDate] } // TODO: かなり適当なので要修正 function parseTime(ts){ var int = parseInt(ts,10); if (isNaN(int)){ var matches = ts.match(/(?:(\d+)m)?(?:(\d+)d)?(?:(\d+)h)?/); var [,month,day,hour] = matches; var time = (month ? month * 30 * 24 * 60 * 60 * 1000000 : 0) + (day ? day * 24 * 60 * 60 * 1000000 : 0) + (hour ? hour * 60 * 60 * 1000000 : 0); return time; } else { return int * 60 * 60 * 1000000; } } var ops = [ [['-list','-l'], commands.OPTION_LIST, null, [[name, "-"] for (name in privacyManager)]], [['-time','-t'], commands.OPTION_STRING] ] // -------------------------- // Command // -------------------------- commands.addUserCommand(['clearp[rivacy]'], 'Clear Privacy data', function(args){ var clearList = args["-data"] ? args["-data"] : getDefaultClearList(); var range = args["-time"] ? getTimeRange(args["-time"], false) : getTimeRange(options.getPref("privacy.sanitize.timeSpan"), true); clearList.forEach(function(name) this[name].clear(range), plugins.privacySanitizer); },{ options: ops, }, true); return privacyManager; })(); // vim:sw=4 ts=4 et fdm=marker: