44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
"use strict";
|
|
|
|
function gzipCompressString(string, obs) {
|
|
const scs = Cc["@mozilla.org/streamConverters;1"].getService(
|
|
Ci.nsIStreamConverterService
|
|
);
|
|
const listener = Cc["@mozilla.org/network/stream-loader;1"].createInstance(
|
|
Ci.nsIStreamLoader
|
|
);
|
|
listener.init(obs);
|
|
const converter = scs.asyncConvertData(
|
|
"uncompressed",
|
|
"gzip",
|
|
listener,
|
|
null
|
|
);
|
|
const stringStream = Cc[
|
|
"@mozilla.org/io/string-input-stream;1"
|
|
].createInstance(Ci.nsIStringInputStream);
|
|
stringStream.setByteStringData(string);
|
|
converter.onStartRequest(null, null);
|
|
converter.onDataAvailable(null, stringStream, 0, string.length);
|
|
converter.onStopRequest(null, null, null);
|
|
}
|
|
|
|
const ORIGINAL_JS_CONTENT = `console.log("original javascript content");`;
|
|
|
|
function handleRequest(request, response) {
|
|
response.processAsync();
|
|
|
|
// Generate data
|
|
response.setHeader("Content-Type", "application/javascript", false);
|
|
response.setHeader("Content-Encoding", "gzip", false);
|
|
|
|
const observer = {
|
|
onStreamComplete(loader, context, status, length, result) {
|
|
const buffer = String.fromCharCode.apply(this, result);
|
|
response.setHeader("Content-Length", "" + buffer.length, false);
|
|
response.write(buffer);
|
|
response.finish();
|
|
},
|
|
};
|
|
gzipCompressString(ORIGINAL_JS_CONTENT, observer);
|
|
}
|