Mercurial > hg > config
view chrome/MozillaFileLogger.js @ 198:59d4f04497dd
package into extension for profile, add direct file logging instead of stdout r=vlad
author | Joel Maher <jmaher@mozilla.com> |
---|---|
date | Tue, 05 Oct 2010 17:01:29 -0400 |
parents | |
children |
line wrap: on
line source
/** * MozillaFileLogger, a log listener that can write to a local file. */ var ipcMode = false; // running in e10s build and need to use IPC? try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var ipcsanity = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch); ipcsanity.setIntPref("mochitest.ipcmode", 0); } catch (e) { ipcMode = true; } function contentDispatchEvent(type, data, sync) { if (typeof(data) === "undefined") { data = {}; } var element = document.createEvent("datacontainerevent"); element.initEvent("contentEvent", true, false); element.setData("sync", sync); element.setData("type", type); element.setData("data", JSON.stringify(data)); document.dispatchEvent(element); } function contentSyncEvent(type, data) { contentDispatchEvent(type, data, 1); } function contentAsyncEvent(type, data) { contentDispatchEvent(type, data, 0); } try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); if (Cc === undefined) { var Cc = Components.classes; var Ci = Components.interfaces; } } catch (ex) {} //running in ipcMode-chrome try { const FOSTREAM_CID = "@mozilla.org/network/file-output-stream;1"; const LF_CID = "@mozilla.org/file/local;1"; // File status flags. It is a bitwise OR of the following bit flags. // Only one of the first three flags below may be used. const PR_READ_ONLY = 0x01; // Open for reading only. const PR_WRITE_ONLY = 0x02; // Open for writing only. const PR_READ_WRITE = 0x04; // Open for reading and writing. // If the file does not exist, the file is created. // If the file exists, this flag has no effect. const PR_CREATE_FILE = 0x08; // The file pointer is set to the end of the file prior to each write. const PR_APPEND = 0x10; // If the file exists, its length is truncated to 0. const PR_TRUNCATE = 0x20; // If set, each write will wait for both the file data // and file status to be physically updated. const PR_SYNC = 0x40; // If the file does not exist, the file is created. If the file already // exists, no action and NULL is returned. const PR_EXCL = 0x80; } catch (ex) { // probably not running in the test harness } /** Init the file logger with the absolute path to the file. It will create and append if the file already exists **/ var MozillaFileLogger = {}; MozillaFileLogger.init = function(path) { if (ipcMode) { contentAsyncEvent("LoggerInit", {"filename": path}); return; } try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (ex) {} //running in ipcMode-chrome MozillaFileLogger._file = Cc[LF_CID].createInstance(Ci.nsILocalFile); MozillaFileLogger._file.initWithPath(path); MozillaFileLogger._foStream = Cc[FOSTREAM_CID].createInstance(Ci.nsIFileOutputStream); MozillaFileLogger._foStream.init(this._file, PR_WRITE_ONLY | PR_CREATE_FILE | PR_APPEND, 0664, 0); } MozillaFileLogger.getLogCallback = function() { if (ipcMode) { return function(msg) { contentAsyncEvent("Logger", {"num": msg.num, "level": msg.level, "info": msg.info.join(' ')}); } } return function (msg) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch(ex) {} //running in ipcMode-chrome var data = msg.num + " " + msg.level + " " + msg.info.join(' ') + "\n"; if (MozillaFileLogger._foStream) MozillaFileLogger._foStream.write(data, data.length); if (data.indexOf("SimpleTest FINISH") >= 0) { MozillaFileLogger.close(); } } } // This is only used from chrome space by the reftest harness MozillaFileLogger.log = function(msg) { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); if (MozillaFileLogger._foStream) MozillaFileLogger._foStream.write(msg, msg.length); } MozillaFileLogger.close = function() { if (ipcMode) { contentAsyncEvent("LoggerClose"); return; } try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch(ex) {} //running in ipcMode-chrome if(MozillaFileLogger._foStream) MozillaFileLogger._foStream.close(); MozillaFileLogger._foStream = null; MozillaFileLogger._file = null; } if (ipcMode == false) { try { var prefs = Components.classes['@mozilla.org/preferences-service;1'] .getService(Components.interfaces.nsIPrefBranch2); var filename = prefs.getCharPref('talos.logfile'); MozillaFileLogger.init(filename); } catch (ex) {} //pref does not exist, return empty string }