68 lines
2 KiB
JavaScript
68 lines
2 KiB
JavaScript
/* eslint-env mozilla/chrome-script */
|
|
|
|
const { NetUtil } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/NetUtil.sys.mjs"
|
|
);
|
|
|
|
// eslint-disable-next-line mozilla/reject-importGlobalProperties
|
|
Cu.importGlobalProperties(["TextDecoder"]);
|
|
|
|
const reportURI = "http://mochi.test:8888/foo.sjs";
|
|
|
|
var openingObserver = {
|
|
observe(subject, topic, data) {
|
|
// subject should be an nsURI
|
|
if (subject.QueryInterface == undefined) {
|
|
return;
|
|
}
|
|
|
|
var message = { report: "", error: false };
|
|
|
|
if (topic == "http-on-opening-request") {
|
|
var asciiSpec = subject.QueryInterface(Ci.nsIHttpChannel).URI.asciiSpec;
|
|
if (asciiSpec !== reportURI) {
|
|
return;
|
|
}
|
|
|
|
var reportText = false;
|
|
try {
|
|
// Verify that the report was properly formatted.
|
|
// We'll parse the report text as JSON and verify that the properties
|
|
// have expected values.
|
|
var reportText = "{}";
|
|
var uploadStream = subject.QueryInterface(
|
|
Ci.nsIUploadChannel
|
|
).uploadStream;
|
|
|
|
if (uploadStream) {
|
|
// get the bytes from the request body
|
|
var binstream = Cc["@mozilla.org/binaryinputstream;1"].createInstance(
|
|
Ci.nsIBinaryInputStream
|
|
);
|
|
binstream.setInputStream(uploadStream);
|
|
|
|
let bytes = NetUtil.readInputStream(binstream);
|
|
|
|
// rewind stream as we are supposed to - there will be an assertion later if we don't.
|
|
uploadStream
|
|
.QueryInterface(Ci.nsISeekableStream)
|
|
.seek(Ci.nsISeekableStream.NS_SEEK_SET, 0);
|
|
|
|
let textDecoder = new TextDecoder();
|
|
reportText = textDecoder.decode(bytes);
|
|
}
|
|
|
|
message.report = reportText;
|
|
} catch (e) {
|
|
message.error = e.toString();
|
|
}
|
|
|
|
sendAsyncMessage("opening-request-completed", message);
|
|
}
|
|
},
|
|
};
|
|
|
|
Services.obs.addObserver(openingObserver, "http-on-opening-request");
|
|
addMessageListener("finish", function () {
|
|
Services.obs.removeObserver(openingObserver, "http-on-opening-request");
|
|
});
|