102 lines
2.2 KiB
JavaScript
102 lines
2.2 KiB
JavaScript
/**
|
|
* MozillaLogger, a base class logger that just logs to stdout.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
function formatLogMessage(msg) {
|
|
return msg.info.join(" ") + "\n";
|
|
}
|
|
|
|
function importMJS(mjs) {
|
|
if (typeof ChromeUtils === "object") {
|
|
return ChromeUtils.importESModule(mjs);
|
|
}
|
|
/* globals SpecialPowers */
|
|
return SpecialPowers.ChromeUtils.importESModule(mjs);
|
|
}
|
|
|
|
// When running in release builds, we get a fake Components object in
|
|
// web contexts, so we need to check that the Components object is sane,
|
|
// too, not just that it exists.
|
|
let haveComponents =
|
|
typeof Components === "object" &&
|
|
typeof Components.Constructor === "function";
|
|
|
|
let CC = (
|
|
haveComponents ? Components : SpecialPowers.wrap(SpecialPowers.Components)
|
|
).Constructor;
|
|
|
|
let ConverterOutputStream = CC(
|
|
"@mozilla.org/intl/converter-output-stream;1",
|
|
"nsIConverterOutputStream",
|
|
"init"
|
|
);
|
|
|
|
class MozillaLogger {
|
|
get logCallback() {
|
|
return msg => {
|
|
this.log(formatLogMessage(msg));
|
|
};
|
|
}
|
|
|
|
log(msg) {
|
|
dump(msg);
|
|
}
|
|
|
|
close() {}
|
|
}
|
|
|
|
/**
|
|
* MozillaFileLogger, a log listener that can write to a local file.
|
|
* intended to be run from chrome space
|
|
*/
|
|
|
|
/** Init the file logger with the absolute path to the file.
|
|
It will create and append if the file already exists **/
|
|
class MozillaFileLogger extends MozillaLogger {
|
|
constructor(aPath) {
|
|
super();
|
|
|
|
const { FileUtils } = importMJS("resource://gre/modules/FileUtils.sys.mjs");
|
|
|
|
this._file = FileUtils.File(aPath);
|
|
this._foStream = FileUtils.openFileOutputStream(
|
|
this._file,
|
|
FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_APPEND
|
|
);
|
|
|
|
this._converter = ConverterOutputStream(this._foStream, "UTF-8");
|
|
}
|
|
|
|
get logCallback() {
|
|
return msg => {
|
|
if (this._converter) {
|
|
var data = formatLogMessage(msg);
|
|
this.log(data);
|
|
|
|
if (data.includes("SimpleTest FINISH")) {
|
|
this.close();
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
log(msg) {
|
|
if (this._converter) {
|
|
this._converter.writeString(msg);
|
|
}
|
|
}
|
|
|
|
close() {
|
|
this._converter.flush();
|
|
this._converter.close();
|
|
|
|
this._foStream = null;
|
|
this._converter = null;
|
|
this._file = null;
|
|
}
|
|
}
|
|
|
|
this.MozillaLogger = MozillaLogger;
|
|
this.MozillaFileLogger = MozillaFileLogger;
|