//
// 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
// 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;
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."
});
}
</>
},
- init: function (win) {
+ ready: function ready(win) {
let elem = win.document.getElementById("itemList");
elem.setAttribute("rows", elem.itemCount);
win.Sanitizer = Class("Sanitizer", win.Sanitizer, {
}
},
- 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)),
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",
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) {
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) {
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();
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;
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"));
"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"],
"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",
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: