file_SlowImage.sjs (1047B)
1 "use strict"; 2 3 const IMG_BYTES = atob( 4 "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA" + 5 "DUlEQVQImWNgY2P7DwABOgESJhRQtgAAAABJRU5ErkJggg==" 6 ); 7 8 function handleRequest(request, response) { 9 response.processAsync(); 10 getObjectState("context", function (obj) { 11 let ctx; 12 if (obj == null) { 13 ctx = { 14 QueryInterface: function (iid) { 15 if (iid.equals(Ci.nsISupports)) { 16 return this; 17 } 18 throw Components.Exception("", Cr.NS_ERROR_NO_INTERFACE); 19 }, 20 }; 21 ctx.wrappedJSObject = ctx; 22 23 ctx.promise = new Promise(resolve => { 24 ctx.resolve = resolve; 25 }); 26 27 setObjectState("context", ctx); 28 } else { 29 ctx = obj.wrappedJSObject; 30 } 31 Promise.resolve(ctx).then(next); 32 }); 33 34 function next(ctx) { 35 if (request.queryString.indexOf("continue") >= 0) { 36 ctx.resolve(); 37 } 38 39 ctx.promise.then(() => { 40 response.setHeader("Content-Type", "image/png"); 41 response.write(IMG_BYTES); 42 response.finish(); 43 }); 44 } 45 }