From 6d4536a8a8ac4467d45cc566a40c150641506982 Mon Sep 17 00:00:00 2001 From: teramako Date: Mon, 5 Jan 2009 16:27:13 +0000 Subject: first add git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27967 d0d07461-0603-4401-acd4-de1884942a52 --- clear_privacy_data.js | 217 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 clear_privacy_data.js (limited to 'clear_privacy_data.js') diff --git a/clear_privacy_data.js b/clear_privacy_data.js new file mode 100644 index 0000000..7390695 --- /dev/null +++ b/clear_privacy_data.js @@ -0,0 +1,217 @@ +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: -- cgit v1.2.3