summaryrefslogtreecommitdiffstats
path: root/testing/specialpowers/content/MozillaLogger.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/specialpowers/content/MozillaLogger.js')
-rw-r--r--testing/specialpowers/content/MozillaLogger.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/testing/specialpowers/content/MozillaLogger.js b/testing/specialpowers/content/MozillaLogger.js
new file mode 100644
index 000000000..52e16cabc
--- /dev/null
+++ b/testing/specialpowers/content/MozillaLogger.js
@@ -0,0 +1,134 @@
+/**
+ * MozillaLogger, a base class logger that just logs to stdout.
+ */
+
+"use strict";
+
+function MozillaLogger(aPath) {
+}
+
+function formatLogMessage(msg) {
+ return msg.info.join(' ') + "\n";
+}
+
+MozillaLogger.prototype = {
+ init : function(path) {},
+
+ getLogCallback : function() {
+ return function (msg) {
+ var data = formatLogMessage(msg);
+ dump(data);
+ };
+ },
+
+ log : function(msg) {
+ dump(msg);
+ },
+
+ close : function() {}
+};
+
+
+/**
+ * SpecialPowersLogger, inherits from MozillaLogger and utilizes SpecialPowers.
+ * intented to be used in content scripts to write to a file
+ */
+function SpecialPowersLogger(aPath) {
+ // Call the base constructor
+ MozillaLogger.call(this);
+ this.prototype = new MozillaLogger(aPath);
+ this.init(aPath);
+}
+
+SpecialPowersLogger.prototype = {
+ init : function (path) {
+ SpecialPowers.setLogFile(path);
+ },
+
+ getLogCallback : function () {
+ return function (msg) {
+ var data = formatLogMessage(msg);
+ SpecialPowers.log(data);
+
+ if (data.indexOf("SimpleTest FINISH") >= 0) {
+ SpecialPowers.closeLogFile();
+ }
+ };
+ },
+
+ log : function (msg) {
+ SpecialPowers.log(msg);
+ },
+
+ close : function () {
+ SpecialPowers.closeLogFile();
+ }
+};
+
+
+/**
+ * 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 **/
+function MozillaFileLogger(aPath) {
+ // Call the base constructor
+ MozillaLogger.call(this);
+ this.prototype = new MozillaLogger(aPath);
+ this.init(aPath);
+}
+
+MozillaFileLogger.prototype = {
+
+ init : function (path) {
+ var PR_WRITE_ONLY = 0x02; // Open for writing only.
+ var PR_CREATE_FILE = 0x08;
+ var PR_APPEND = 0x10;
+ this._file = Components.classes["@mozilla.org/file/local;1"].
+ createInstance(Components.interfaces.nsILocalFile);
+ this._file.initWithPath(path);
+ this._foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].
+ createInstance(Components.interfaces.nsIFileOutputStream);
+ this._foStream.init(this._file, PR_WRITE_ONLY | PR_CREATE_FILE | PR_APPEND,
+ 436 /* 0664 */, 0);
+
+ this._converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
+ createInstance(Components.interfaces.nsIConverterOutputStream);
+ this._converter.init(this._foStream, "UTF-8", 0, 0);
+ },
+
+ getLogCallback : function() {
+ return function (msg) {
+ var data = formatLogMessage(msg);
+ if (MozillaFileLogger._converter) {
+ this._converter.writeString(data);
+ }
+
+ if (data.indexOf("SimpleTest FINISH") >= 0) {
+ MozillaFileLogger.close();
+ }
+ };
+ },
+
+ log : function(msg) {
+ if (this._converter) {
+ this._converter.writeString(msg);
+ }
+ },
+ close : function() {
+ if (this._converter) {
+ this._converter.flush();
+ this._converter.close();
+ }
+
+ this._foStream = null;
+ this._converter = null;
+ this._file = null;
+ }
+};
+
+this.MozillaLogger = MozillaLogger;
+this.SpecialPowersLogger = SpecialPowersLogger;
+this.MozillaFileLogger = MozillaFileLogger;