FBL.ns(function() { with (FBL) {
const Cc = Components.classes;
const Ci = Components.interfaces;
const dirService = Cc["@mozilla.org/file/directory_service;1"]
.getService(Ci.nsIProperties);
// ************************************************************************************************
// Module implementation
Firebug.BeepbopListenerModule = extend(Firebug.Module,
{
initialize: function(owner) {
Firebug.Module.initialize.apply(this, arguments);
// Register Beepbop listener
this.beepbopListener = new BeepbopListener();
Firebug.NetMonitor.addListener(this.beepbopListener);
Firebug.NetMonitor.NetRequestTable.addListener(RequestTableListener);
Firebug.JSONViewerModel.addListener(JSONListener);
},
shutdown: function() {
Firebug.Module.shutdown.apply(this, arguments);
// Unregister Beepbop listener
Firebug.NetMonitor.removeListener(this.beepbopListener);
this.beepbopListener.outputStream.close();
Firebug.NetMonitor.NetRequestTable.removeListener(RequestTableListener);
Firebug.JSONViewerModel.removeListener(JSONListener);
}
});
// ************************************************************************************************
// Net Panel Listener
function BeepbopListener(outputStream) {
// Get unique file within user profile directory.
var file = dirService.get("ProfD", Ci.nsIFile);
file.append("beepboplistener");
file.append("netMonitor.txt");
file.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0666);
// Initialize output stream.
this.outputStream =
Cc["@mozilla.org/network/file-output-stream;1"]
.createInstance(Ci.nsIFileOutputStream);
// write, create, truncate
this.outputStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
}
BeepbopListener.prototype = {
onRequest: function(context, file) {
var pattern = /\.js$/;
if (pattern.test(file.href) && FBTrace.DBG_BEEPBOP) {
FBTrace.sysout("CANT SEE RESPONSETEXT IN ONREQUEST " + file);
}
},
onExamineResponse: function(context, file) {
FBTrace.sysout("onexamineresponse " + file);
var pattern = /\.js$/;
if (pattern.test(file.href) && FBTrace.DBG_BEEPBOP) {
FBTrace.sysout("ONEXAMINE DOESN'T EVEN FIRE SO YOU WON'T SEE THIS");
}
},
onResponse: function(context, file) {
var pattern = /\.js$/;
if (pattern.test(file.href) && FBTrace.DBG_BEEPBOP) {
FBTrace.sysout("CANT SEE RESPONSETEXT IN ONRESPONSE " + file);
}
try {
var text = file.href + " (" + formatTime
(file.endTime - file.startTime) + ")\n";
this.outputStream.write(text, text.length);
}
catch (err) {
if (FBTrace.DBG_BEEPBOP || FBTrace.DBG_ERRORS)
FBTrace.sysout("beepbopListener.onResponse: EXCEPTION", err);
}
},
onResponseBody: function(context, file) {
var pattern = /\.js$/;
if (pattern.test(file.href) && FBTrace.DBG_BEEPBOP) {
FBTrace.sysout("THIS IS WHAT WE WANT: " + file.responseText);
}
}
};
var RequestTableListener =
{
onCreateRequestEntry: function(panel, row)
{
if (FBTrace.DBG_NETLISTENER)
FBTrace.sysout("RequestTableListener.onCreateRequestEntry; " +
panel.context.getName());
}
}
var JSONListener =
{
onParseJSON: function(file)
{
if (FBTrace.DBG_NETLISTENER)
FBTrace.sysout("JSONListener.onParseJSON; " + file.href, file);
}
}
// ************************************************************************************************
// Registration
Firebug.registerModule(Firebug.BeepbopListenerModule);
// ************************************************************************************************
}});