/*
* Test server for iframe refresh from meta http-equiv
*/
const SHARED_KEY = "iframe_meta_refresh";
const DEFAULT_STATE = { count: 0, referrers: [] };
const REFRESH_PAGE =
"http://example.com/tests/dom/base/test/iframe_meta_refresh.sjs?action=test";
function createContent(refresh) {
let metaRefresh = "";
let scriptMessage = "";
if (refresh) {
metaRefresh = ``;
} else {
scriptMessage = `
`;
}
return `
${metaRefresh}
Test referrer of meta http-equiv refresh
${scriptMessage}
`;
}
function handleRequest(request, response) {
Components.utils.importGlobalProperties(["URLSearchParams"]);
let query = new URLSearchParams(request.queryString);
let action = query.get("action");
var referrerLevel = "none";
if (request.hasHeader("Referer")) {
let referrer = request.getHeader("Referer");
if (referrer.indexOf("test_meta_refresh_referrer") > 0) {
referrerLevel = "full";
} else if (referrer == "http://mochi.test:8888/") {
referrerLevel = "origin";
}
}
var state = getSharedState(SHARED_KEY);
if (state === "") {
state = DEFAULT_STATE;
} else {
state = JSON.parse(state);
}
response.setStatusLine(request.httpVersion, 200, "OK");
//avoid confusing cache behaviors
response.setHeader("Cache-Control", "no-cache", false);
if (action === "results") {
response.setHeader("Content-Type", "text/plain", false);
response.write(JSON.stringify(state));
return;
}
if (action === "reset") {
//reset server state
setSharedState(SHARED_KEY, JSON.stringify(DEFAULT_STATE));
response.write("");
return;
}
if (action === "test") {
let load = query.get("load");
state.count++;
if (state.referrers.indexOf(referrerLevel) < 0) {
state.referrers.push(referrerLevel);
}
// Write frame content
response.write(createContent(load));
}
setSharedState(SHARED_KEY, JSON.stringify(state));
return;
}