Blame layout/generic/test/file_SlowImage.sjs

Packit f0b94e
"use strict";
Packit f0b94e
Packit f0b94e
const IMG_BYTES = atob(
Packit f0b94e
  "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA" +
Packit f0b94e
  "DUlEQVQImWNgY2P7DwABOgESJhRQtgAAAABJRU5ErkJggg==");
Packit f0b94e
Packit f0b94e
function handleRequest(request, response) {
Packit f0b94e
  response.processAsync();
Packit f0b94e
  getObjectState("context", function(obj) {
Packit f0b94e
    let ctx;
Packit f0b94e
    if (obj == null) {
Packit f0b94e
      ctx = {
Packit f0b94e
        QueryInterface: function(iid) {
Packit f0b94e
          if (iid.equals(Components.interfaces.nsISupports))
Packit f0b94e
            return this;
Packit f0b94e
          throw Components.results.NS_ERROR_NO_INTERFACE;
Packit f0b94e
        }
Packit f0b94e
      };
Packit f0b94e
      ctx.wrappedJSObject = ctx;
Packit f0b94e
Packit f0b94e
      ctx.promise = new Promise(resolve => {
Packit f0b94e
        ctx.resolve = resolve;
Packit f0b94e
      });
Packit f0b94e
Packit f0b94e
      setObjectState("context", ctx);
Packit f0b94e
    } else {
Packit f0b94e
      ctx = obj.wrappedJSObject;
Packit f0b94e
    }
Packit f0b94e
    Promise.resolve(ctx).then(next);
Packit f0b94e
  });
Packit f0b94e
Packit f0b94e
  function next(ctx) {
Packit f0b94e
    if (request.queryString.indexOf("continue") >= 0) {
Packit f0b94e
      ctx.resolve();
Packit f0b94e
    }
Packit f0b94e
Packit f0b94e
    ctx.promise.then(() => {
Packit f0b94e
      response.setHeader("Content-Type", "image/png");
Packit f0b94e
      response.write(IMG_BYTES);
Packit f0b94e
      response.finish();
Packit f0b94e
    });
Packit f0b94e
  }
Packit f0b94e
}