iframe_meta_refresh.sjs (2305B)
1 /* 2 * Test server for iframe refresh from meta http-equiv 3 */ 4 5 const SHARED_KEY = "iframe_meta_refresh"; 6 const DEFAULT_STATE = { count: 0, referrers: [] }; 7 const REFRESH_PAGE = 8 "http://example.com/tests/dom/base/test/iframe_meta_refresh.sjs?action=test"; 9 10 function createContent(refresh) { 11 let metaRefresh = ""; 12 let scriptMessage = ""; 13 14 if (refresh) { 15 metaRefresh = `<meta http-equiv="refresh" content="0;URL=${REFRESH_PAGE}">`; 16 } else { 17 scriptMessage = ` 18 <script> 19 window.addEventListener("load", function() { 20 parent.postMessage("childLoadComplete", "http://mochi.test:8888"); 21 }, false); 22 </script>`; 23 } 24 25 return `<!DOCTYPE HTML> 26 <html> 27 <head> 28 <meta charset="utf-8"> 29 ${metaRefresh} 30 <title> Test referrer of meta http-equiv refresh</title> 31 </head> 32 <body> 33 ${scriptMessage} 34 </body> 35 </html>`; 36 } 37 38 function handleRequest(request, response) { 39 let query = new URLSearchParams(request.queryString); 40 41 let action = query.get("action"); 42 43 var referrerLevel = "none"; 44 if (request.hasHeader("Referer")) { 45 let referrer = request.getHeader("Referer"); 46 if (referrer.indexOf("test_meta_refresh_referrer") > 0) { 47 referrerLevel = "full"; 48 } else if (referrer == "http://mochi.test:8888/") { 49 referrerLevel = "origin"; 50 } 51 } 52 53 var state = getSharedState(SHARED_KEY); 54 if (state === "") { 55 state = DEFAULT_STATE; 56 } else { 57 state = JSON.parse(state); 58 } 59 60 response.setStatusLine(request.httpVersion, 200, "OK"); 61 62 //avoid confusing cache behaviors 63 response.setHeader("Cache-Control", "no-cache", false); 64 65 if (action === "results") { 66 response.setHeader("Content-Type", "text/plain", false); 67 response.write(JSON.stringify(state)); 68 return; 69 } 70 71 if (action === "reset") { 72 //reset server state 73 setSharedState(SHARED_KEY, JSON.stringify(DEFAULT_STATE)); 74 response.write(""); 75 return; 76 } 77 78 if (action === "test") { 79 let load = query.get("load"); 80 state.count++; 81 if (state.referrers.indexOf(referrerLevel) < 0) { 82 state.referrers.push(referrerLevel); 83 } 84 85 // Write frame content 86 response.write(createContent(load)); 87 } 88 89 setSharedState(SHARED_KEY, JSON.stringify(state)); 90 }