summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/file_inspectedwindow_reload_target.sjs
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/file_inspectedwindow_reload_target.sjs')
-rw-r--r--browser/components/extensions/test/browser/file_inspectedwindow_reload_target.sjs130
1 files changed, 130 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/file_inspectedwindow_reload_target.sjs b/browser/components/extensions/test/browser/file_inspectedwindow_reload_target.sjs
new file mode 100644
index 0000000000..2a7a401360
--- /dev/null
+++ b/browser/components/extensions/test/browser/file_inspectedwindow_reload_target.sjs
@@ -0,0 +1,130 @@
+/* -*- 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 = `
+ <!doctype html>
+ <html>
+ <head>
+ <meta charset=utf8>
+ <script>
+ globalThis.initialUserAgent = navigator.userAgent;
+ </script>
+ </head>
+ <body>
+ <h1>Iframe</h1>
+ </body>
+ </html>`;
+ // 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 = `
+ <!doctype html>
+ <html>
+ <head>
+ <meta charset=utf8>
+ <title>test</title>
+ <script>
+ "use strict";
+ /*
+ * Store the user agent very early in the document loading process
+ * so we can assert in tests that it is set early enough.
+ */
+ globalThis.initialUserAgent = navigator.userAgent;
+ globalThis.userAgentHeader = ${JSON.stringify(userAgentHeader)};
+ </script>
+ </head>
+ <body>
+ <h1>Top-level</h1>
+ <h2>${userAgentHeader ?? "no user-agent header"}</h2>
+ <iframe src='${iframeUrl}'></iframe>
+ </body>
+ </html>`;
+
+ 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 = `<iframe seamless src="?test=injected-script&frames=${
+ frames - 1
+ }"></iframe>`;
+ }
+
+ response.write(`<!DOCTYPE html>
+ <html>
+ <head>
+ <meta charset="utf-8">
+ <style>
+ iframe { width: 100%; height: ${frames * 150}px; }
+ </style>
+ </head>
+ <body>
+ <h1>IFRAME ${frames}</h1>
+ <pre>injected script NOT executed</pre>
+ <script type="text/javascript">
+ window.pageScriptExecutedFirst = true;
+ </script>
+ ${content}
+ </body>
+ </html>
+ `);
+}