summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/script/file_blocked_script.sjs
diff options
context:
space:
mode:
Diffstat (limited to 'dom/tests/mochitest/script/file_blocked_script.sjs')
-rw-r--r--dom/tests/mochitest/script/file_blocked_script.sjs70
1 files changed, 70 insertions, 0 deletions
diff --git a/dom/tests/mochitest/script/file_blocked_script.sjs b/dom/tests/mochitest/script/file_blocked_script.sjs
new file mode 100644
index 0000000000..a5b375a23d
--- /dev/null
+++ b/dom/tests/mochitest/script/file_blocked_script.sjs
@@ -0,0 +1,70 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+function setGlobalState(data, key) {
+ x = {
+ data,
+ QueryInterface(iid) {
+ return this;
+ },
+ };
+ x.wrappedJSObject = x;
+ setObjectState(key, x);
+}
+
+function getGlobalState(key) {
+ var data;
+ getObjectState(key, function (x) {
+ data = x && x.wrappedJSObject.data;
+ });
+ return data;
+}
+
+function finishBlockedRequest(request, response, query) {
+ response.setStatusLine(request.httpVersion, 200, "OK");
+ response.setHeader("Cache-Control", "no-cache", false);
+ response.setHeader("Content-Type", "application/javascript", false);
+ response.write("scriptLoaded('" + query[1] + "');");
+ response.finish();
+
+ setGlobalState(undefined, query[1]);
+}
+
+function handleRequest(request, response) {
+ var query = request.queryString.split("&");
+ switch (query[0]) {
+ case "blocked":
+ var alreadyUnblocked = getGlobalState(query[1]);
+
+ response.processAsync();
+ if (alreadyUnblocked === true) {
+ // the unblock request came before the blocked request, just go on and finish synchronously
+ finishBlockedRequest(request, response, query);
+ } else {
+ setGlobalState(response, query[1]);
+ }
+ break;
+
+ case "unblock":
+ response.setStatusLine(request.httpVersion, 200, "OK");
+ response.setHeader("Cache-Control", "no-cache", false);
+ response.setHeader("Content-Type", "image/png", false);
+ response.write("\x89PNG"); // just a broken image is enough for our purpose
+
+ var blockedResponse = getGlobalState(query[1]);
+ if (blockedResponse === undefined) {
+ // the unblock request came before the blocked request, remember to not block it
+ setGlobalState(true, query[1]);
+ } else if (typeof blockedResponse == "object") {
+ finishBlockedRequest(request, blockedResponse, query);
+ }
+ break;
+
+ default:
+ response.setStatusLine(request.httpVersion, 400, "Bad request");
+ break;
+ }
+}