inspectedwindow-reload-target.sjs (2481B)
1 "use strict"; 2 3 function handleRequest(request, response) { 4 const params = new URLSearchParams(request.queryString); 5 6 switch (params.get("test")) { 7 case "cache": 8 handleCacheTestRequest(request, response); 9 break; 10 11 case "user-agent": 12 handleUserAgentTestRequest(request, response); 13 break; 14 15 case "injected-script": 16 handleInjectedScriptTestRequest(request, response, params); 17 break; 18 } 19 } 20 21 function handleCacheTestRequest(request, response) { 22 response.setHeader("Content-Type", "text/plain; charset=UTF-8", false); 23 24 if (request.hasHeader("pragma") && request.hasHeader("cache-control")) { 25 response.write( 26 `${request.getHeader("pragma")}:${request.getHeader("cache-control")}` 27 ); 28 } else { 29 response.write("empty cache headers"); 30 } 31 } 32 33 function handleUserAgentTestRequest(request, response) { 34 response.setHeader("Content-Type", "text/plain; charset=UTF-8", false); 35 36 if (request.hasHeader("user-agent")) { 37 response.write(request.getHeader("user-agent")); 38 } else { 39 response.write("no user agent header"); 40 } 41 } 42 43 function handleInjectedScriptTestRequest(request, response, params) { 44 response.setHeader("Content-Type", "text/html; charset=UTF-8", false); 45 46 const frames = parseInt(params.get("frames"), 10); 47 let content = ""; 48 49 if (frames > 0) { 50 // Output an iframe in seamless mode, so that there is an higher chance that in case 51 // of test failures we get a screenshot where the nested iframes are all visible. 52 content = `<iframe seamless src="?test=injected-script&frames=${ 53 frames - 1 54 }"></iframe>`; 55 } else { 56 // Output an about:srcdoc frame to be sure that inspectedWindow.eval is able to 57 // evaluate js code into it. 58 const srcdoc = ` 59 <pre>injected script NOT executed</pre> 60 <script>window.pageScriptExecutedFirst = true</script> 61 `; 62 content = `<iframe style="height: 30px;" srcdoc="${srcdoc}"></iframe>`; 63 } 64 65 if (params.get("stop") == "windowStop") { 66 content = "<script>window.stop();</script>" + content; 67 } 68 69 response.write(`<!DOCTYPE html> 70 <html> 71 <head> 72 <meta charset="utf-8"> 73 <style> 74 iframe { width: 100%; height: ${frames * 150}px; } 75 </style> 76 </head> 77 <body> 78 <h1>IFRAME ${frames}</h1> 79 <pre>injected script NOT executed</pre> 80 <script> 81 window.pageScriptExecutedFirst = true; 82 </script> 83 ${content} 84 </body> 85 </html> 86 `); 87 }