X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=common%2Fmodules%2Fsanitizer.jsm;fp=common%2Fmodules%2Fsanitizer.jsm;h=efc0f2de61dca23b76a4ad8ed6ba81de5c59df51;hb=9044153cb63835e39b9de8ec4ade237c03e3888a;hp=e240424dba36f7af3ee308008d01adbbc65670c8;hpb=70740024f9c028c1fd63e1a1850ab062ff956054;p=dactyl.git diff --git a/common/modules/sanitizer.jsm b/common/modules/sanitizer.jsm index e240424..efc0f2d 100644 --- a/common/modules/sanitizer.jsm +++ b/common/modules/sanitizer.jsm @@ -3,7 +3,7 @@ // // This work is licensed for reuse under an MIT license. Details are // given in the LICENSE.txt file included with this file. -"use strict"; +/* use strict */ // TODO: // - fix Sanitize autocommand @@ -12,15 +12,16 @@ // FIXME: // - finish 1.9.0 support if we're going to support sanitizing in Melodactyl -try { - Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("sanitizer", { exports: ["Range", "Sanitizer", "sanitizer"], - use: ["config"], - require: ["messages", "prefs", "services", "storage", "template", "util"] + require: ["config", "prefs", "services", "util"] }, this); +this.lazyRequire("messages", ["_"]); +this.lazyRequire("storage", ["storage"]); +this.lazyRequire("template", ["teplate"]); + let tmp = {}; JSMLoader.loadSubScript("chrome://browser/content/sanitize.js", tmp); tmp.Sanitizer.prototype.__proto__ = Class.prototype; @@ -56,7 +57,7 @@ var Item = Class("SanitizeItem", { shouldSanitize: function (shutdown) (!shutdown || this.builtin || this.persistent) && prefs.get(shutdown ? this.shutdownPref : this.pref) }, { - PREFIX: localPrefs.branch.root, + PREFIX: config.prefs.branch.root, BRANCH: "privacy.cpd.", SHUTDOWN_BRANCH: "privacy.clearOnShutdown." }); @@ -216,7 +217,7 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef } }, - init: function (win) { + ready: function ready(win) { let elem = win.document.getElementById("itemList"); elem.setAttribute("rows", elem.itemCount); win.Sanitizer = Class("Sanitizer", win.Sanitizer, { @@ -291,8 +292,8 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef } }, - get ranAtShutdown() localPrefs.get("didSanitizeOnShutdown"), - set ranAtShutdown(val) localPrefs.set("didSanitizeOnShutdown", Boolean(val)), + get ranAtShutdown() config.prefs.get("didSanitizeOnShutdown"), + set ranAtShutdown(val) config.prefs.set("didSanitizeOnShutdown", Boolean(val)), get runAtShutdown() prefs.get("privacy.sanitize.sanitizeOnShutdown"), set runAtShutdown(val) prefs.set("privacy.sanitize.sanitizeOnShutdown", Boolean(val)), @@ -348,7 +349,7 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef session: 8 }, - UNPERMS: Class.memoize(function () iter(this.PERMS).map(Array.reverse).toObject()), + UNPERMS: Class.Memoize(function () iter(this.PERMS).map(Array.reverse).toObject()), COMMANDS: { unset: /*L*/"Unset", @@ -369,17 +370,17 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef prefToArg: function (pref) pref.replace(/.*\./, "").toLowerCase(), iterCookies: function iterCookies(host) { - let iterator = host ? services.cookies.getCookiesFromHost(host) - : services.cookies; - for (let c in iter(iterator)) - yield c.QueryInterface(Ci.nsICookie2); + for (let c in iter(services.cookies, Ci.nsICookie2)) + if (!host || util.isSubdomain(c.rawHost, host) || + c.host[0] == "." && c.host.length < host.length + && host.indexOf(c.host) == host.length - c.host.length) + yield c; + }, iterPermissions: function iterPermissions(host) { - for (let p in iter(services.permissions)) { - p.QueryInterface(Ci.nsIPermission); + for (let p in iter(services.permissions, Ci.nsIPermission)) if (!host || util.isSubdomain(p.host, host)) yield p; - } } }, { load: function (dactyl, modules, window) { @@ -388,16 +389,18 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef sanitizer.ranAtShutdown = false; }, autocommands: function (dactyl, modules, window) { + const { autocommands } = modules; + storage.addObserver("private-mode", function (key, event, value) { - modules.autocommands.trigger("PrivateMode", { state: value }); + autocommands.trigger("PrivateMode", { state: value }); }, window); storage.addObserver("sanitizer", function (key, event, value) { if (event == "domain") - modules.autocommands.trigger("SanitizeDomain", { domain: value }); + autocommands.trigger("SanitizeDomain", { domain: value }); else if (!value[1]) - modules.autocommands.trigger("Sanitize", { name: event.substr("clear-".length), domain: value[1] }); + autocommands.trigger("Sanitize", { name: event.substr("clear-".length), domain: value[1] }); }, window); }, commands: function (dactyl, modules, window) { @@ -407,6 +410,9 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef function (args) { dactyl.assert(!modules.options['private'], _("command.sanitize.privateMode")); + if (args["-host"] && !args.length && !args.bang) + args[0] = "all"; + let timespan = args["-timespan"] || modules.options["sanitizetimespan"]; let range = Range(); @@ -415,17 +421,15 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef match ? 1000 * (Date.now() - 1000 * parseInt(num, 10) * { m: 60, h: 3600, d: 3600 * 24, w: 3600 * 24 * 7 }[unit]) : (timespan[0] == "s" ? sanitizer.sessionStart : null); - let items = args.slice(); - if (args["-host"] && !args.length) - args[0] = "all"; - - if (args.bang) { + let opt = modules.options.get("sanitizeitems"); + if (args.bang) dactyl.assert(args.length == 0, _("error.trailingCharacters")); - items = Object.keys(sanitizer.itemMap).filter( - function (k) modules.options.get("sanitizeitems").has(k)); + else { + dactyl.assert(opt.validator(args), _("error.invalidArgument")); + opt = { __proto__: opt, value: args.slice() }; } - else - dactyl.assert(modules.options.get("sanitizeitems").validator(items), _("error.invalidArgument")); + + let items = Object.keys(sanitizer.itemMap).slice(1).filter(opt.has, opt); function sanitize(items) { sanitizer.range = range.native; @@ -441,13 +445,12 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef sanitizer.sanitize(items, range); } - if (items.indexOf("all") >= 0) + if (array.nth(opt.value, function (i) i == "all" || /^!/.test(i), 0) == "all" && !args["-host"]) modules.commandline.input(_("sanitize.prompt.deleteAll") + " ", function (resp) { if (resp.match(/^y(es)?$/i)) { - items = Object.keys(sanitizer.itemMap).filter(function (k) items.indexOf(k) === -1); sanitize(items); - dactyl.echo(_("command.sanitize.allDeleted")); + dactyl.echomsg(_("command.sanitize.allDeleted")); } else dactyl.echo(_("command.sanitize.noneDeleted")); @@ -593,9 +596,19 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef "stringlist", "all", { get values() values(sanitizer.itemMap).toArray(), - has: modules.Option.has.toggleAll, + + completer: function completer(context, extra) { + if (context.filter[0] == "!") + context.advance(1); + return completer.superapply(this, arguments); + }, + + has: function has(val) + let (res = array.nth(this.value, function (v) v == "all" || v.replace(/^!/, "") == val, 0)) + res && !/^!/.test(res), + validator: function (values) values.length && - values.every(function (val) val === "all" || Set.has(sanitizer.itemMap, val)) + values.every(function (val) val === "all" || Set.has(sanitizer.itemMap, val.replace(/^!/, ""))) }); options.add(["sanitizeshutdown", "ss"], @@ -638,13 +651,13 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef "1d": "Past day", "1w": "Past week" }, - validator: function (value) /^(a(ll)?|s(ession)|\d+[mhdw])$/.test(value) + validator: bind("test", /^(a(ll)?|s(ession)|\d+[mhdw])$/) }); options.add(["cookies", "ck"], "The default mode for newly added cookie permissions", "stringlist", "session", - { get values() iter(Sanitizer.COMMANDS) }); + { get values() Sanitizer.COMMANDS }); options.add(["cookieaccept", "ca"], "When to accept cookies", @@ -694,6 +707,6 @@ var Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakRef endModule(); -} catch(e){dump(e.fileName+":"+e.lineNumber+": "+e+"\n" + e.stack);} +// catch(e){dump(e.fileName+":"+e.lineNumber+": "+e+"\n" + e.stack);} // vim: set fdm=marker sw=4 ts=4 et ft=javascript: