55 lines
1.8 KiB
JavaScript
55 lines
1.8 KiB
JavaScript
/* -*- 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/. */
|
|
|
|
// small red image
|
|
const IMG_BYTES = atob(
|
|
"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12" +
|
|
"P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="
|
|
);
|
|
|
|
// stolen from file_blocked_script.sjs
|
|
function setGlobalState(data, key) {
|
|
let x = {
|
|
data,
|
|
QueryInterface: ChromeUtils.generateQI([]),
|
|
};
|
|
x.wrappedJSObject = x;
|
|
setObjectState(key, x);
|
|
}
|
|
|
|
function getGlobalState(key) {
|
|
var data;
|
|
getObjectState(key, function (x) {
|
|
data = x && x.wrappedJSObject.data;
|
|
});
|
|
return data;
|
|
}
|
|
|
|
function handleRequest(request, response) {
|
|
if (request.queryString == "complete") {
|
|
// Unblock the previous request.
|
|
response.setStatusLine(request.httpVersion, 200, "OK");
|
|
response.setHeader("Cache-Control", "no-cache", false);
|
|
response.setHeader("Content-Type", "application/json", false);
|
|
response.write("true"); // the payload doesn't matter.
|
|
|
|
let blockedResponse = getGlobalState("a11y-image");
|
|
if (blockedResponse) {
|
|
blockedResponse.setStatusLine(request.httpVersion, 200, "OK");
|
|
blockedResponse.setHeader("Cache-Control", "no-cache", false);
|
|
blockedResponse.setHeader("Content-Type", "image/png", false);
|
|
blockedResponse.write(IMG_BYTES);
|
|
blockedResponse.finish();
|
|
|
|
setGlobalState(undefined, "a11y-image");
|
|
}
|
|
} else {
|
|
// Getting the image
|
|
response.processAsync();
|
|
// Store the response in the global state
|
|
setGlobalState(response, "a11y-image");
|
|
}
|
|
}
|