summaryrefslogtreecommitdiffstats
path: root/uriloader/exthandler/tests/mochitest/download.sjs
diff options
context:
space:
mode:
Diffstat (limited to 'uriloader/exthandler/tests/mochitest/download.sjs')
-rw-r--r--uriloader/exthandler/tests/mochitest/download.sjs38
1 files changed, 38 insertions, 0 deletions
diff --git a/uriloader/exthandler/tests/mochitest/download.sjs b/uriloader/exthandler/tests/mochitest/download.sjs
new file mode 100644
index 0000000000..bee7bd7015
--- /dev/null
+++ b/uriloader/exthandler/tests/mochitest/download.sjs
@@ -0,0 +1,38 @@
+"use strict";
+
+Cu.import("resource://gre/modules/Timer.jsm");
+
+function actuallyHandleRequest(req, res) {
+ res.setHeader("Content-Type", "application/octet-stream", false);
+ res.write("abc123");
+ res.finish();
+}
+
+function handleRequest(req, res) {
+ if (req.queryString.includes('finish')) {
+ res.write("OK");
+ let downloadReq = null;
+ getObjectState("downloadReq", o => { downloadReq = o });
+ // Two possibilities: either the download request has already reached us, or not.
+ if (downloadReq) {
+ downloadReq.wrappedJSObject.callback();
+ } else {
+ // Set a variable to allow the request to complete immediately:
+ setState("finishReq", "true");
+ }
+ } else if (req.queryString.includes('reset')) {
+ res.write("OK");
+ setObjectState("downloadReq", null);
+ setState("finishReq", "false");
+ } else {
+ res.processAsync();
+ if (getState("finishReq") === "true") {
+ actuallyHandleRequest(req, res);
+ } else {
+ let o = {callback() { actuallyHandleRequest(req, res) }};
+ o.wrappedJSObject = o;
+ o.QueryInterface = () => o;
+ setObjectState("downloadReq", o);
+ }
+ }
+}