Hello,
This works for me (I can receive http-on-examine-response) :
I'm using ff 3.0.10

const CC = Components.classes;
const CI = Components.interfaces;

window.addEventListener("load", registerListener, false);
window.addEventListener("unload", unregisterListener, false);

var observerService = Cc["@mozilla.org/observer-service;1"]
.getService(Ci.nsIObserverService);

function registerListener()
{
observerService.addObserver(httpRequestObserver,
"http-on-examine-response", false);
}

function unregisterListener()
{
observerService.removeObserver(httpRequestObserver , "http-on-examine-
response");
}

var httpRequestObserver =
{
observe: function(aSubject, aTopic, aData)
{
if (aTopic == "http-on-examine-response") {
var newListener = new TracingListener();
aSubject.QueryInterface(Ci.nsITraceableChannel);
newListener.originalListener = aSubject.setNewListener
(newListener);
}
aSubject.stop();
},

QueryInterface : function (aIID)
{
if (aIID.equals(Ci.nsIObserver) ||
aIID.equals(Ci.nsISupports))
{
return this;
}

throw Components.results.NS_NOINTERFACE;

}
};

// Helper function for XPCOM instanciation (from Firebug)
function CCIN(cName, ifaceName) {
return Cc[cName].createInstance(Ci[ifaceName]);
}

// Copy response listener implementation.
function TracingListener() {}

TracingListener.prototype =
{
onDataAvailable: function(request, context, inputStream, offset,
count)
{
this.originalListener.onDataAvailable(request, context,
storageStream.newInputStream(0), offset, count);
},

onStartRequest: function(request, context) {
this.originalListener.onStartRequest(request,conte xt);
},

onStopRequest: function(request, context, statusCode) {
this.originalListener.onStopRequest(request, context, statusCode);
},

QueryInterface: function (aIID) {
if (aIID.equals(Ci.nsIStreamListener) ||
aIID.equals(Ci.nsISupports)) {
return this;
}
throw Components.results.NS_NOINTERFACE;
}
}