/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* vim: set sts=2 sw=2 et tw=80 ft=javascript: */ "use strict"; Cu.importGlobalProperties(["URLSearchParams"]); function handleRequest(request, response) { let params = new URLSearchParams(request.queryString); switch (params.get("test")) { case "cache": /* eslint-disable-next-line no-use-before-define */ handleCacheTestRequest(request, response); break; case "user-agent": /* eslint-disable-next-line no-use-before-define */ handleUserAgentTestRequest(request, response); break; case "injected-script": /* eslint-disable-next-line no-use-before-define */ handleInjectedScriptTestRequest(request, response, params); break; } } function handleCacheTestRequest(request, response) { response.setHeader("Content-Type", "text/plain; charset=UTF-8", false); if (request.hasHeader("pragma") && request.hasHeader("cache-control")) { response.write( `${request.getHeader("pragma")}:${request.getHeader("cache-control")}` ); } else { response.write("empty cache headers"); } } function handleUserAgentTestRequest(request, response) { response.setHeader("Content-Type", "text/html", false); const userAgentHeader = request.hasHeader("user-agent") ? request.getHeader("user-agent") : null; const query = new URLSearchParams(request.queryString); if (query.get("crossOriginIsolated") === "true") { response.setHeader("Cross-Origin-Opener-Policy", "same-origin", false); } const IFRAME_HTML = `

Iframe

`; // We always want the iframe to have a different host from the top-level document. const iframeHost = request.host === "example.com" ? "example.org" : "example.com"; const iframeOrigin = `${request.scheme}://${iframeHost}`; const iframeUrl = `${iframeOrigin}/document-builder.sjs?html=${encodeURI( IFRAME_HTML )}`; const HTML = ` test

Top-level

${userAgentHeader ?? "no user-agent header"}

`; response.write(HTML); } function handleInjectedScriptTestRequest(request, response, params) { response.setHeader("Content-Type", "text/html; charset=UTF-8", false); let content = ""; const frames = parseInt(params.get("frames"), 10); if (frames > 0) { // Output an iframe in seamless mode, so that there is an higher chance that in case // of test failures we get a screenshot where the nested iframes are all visible. content = ``; } response.write(`

IFRAME ${frames}

injected script NOT executed
${content} `); }