file_same_site_cookies_subrequest.sjs (2217B)
1 // Custom *.sjs file specifically for the needs of Bug 1286861 2 3 // small red image 4 const IMG_BYTES = atob( 5 "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12" + 6 "P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" 7 ); 8 9 const FRAME = ` 10 <!DOCTYPE html> 11 <html> 12 <head> 13 <title>Bug 1286861 - Add support for same site cookies</title> 14 </head> 15 <body> 16 <img src = "http://mochi.test:8888/tests/dom/security/test/general/file_same_site_cookies_subrequest.sjs?checkCookie"> 17 </body> 18 </html>`; 19 20 function handleRequest(request, response) { 21 // avoid confusing cache behaviors 22 response.setHeader("Cache-Control", "no-cache", false); 23 24 if (request.queryString.includes("setStrictSameSiteCookie")) { 25 response.setHeader( 26 "Set-Cookie", 27 "myKey=strictSameSiteCookie; samesite=strict", 28 true 29 ); 30 response.setHeader("Content-Type", "image/png"); 31 response.write(IMG_BYTES); 32 return; 33 } 34 35 if (request.queryString.includes("setLaxSameSiteCookie")) { 36 response.setHeader( 37 "Set-Cookie", 38 "myKey=laxSameSiteCookie; samesite=lax", 39 true 40 ); 41 response.setHeader("Content-Type", "image/png"); 42 response.write(IMG_BYTES); 43 return; 44 } 45 46 // save the object state of the initial request, which returns 47 // async once the server has processed the img request. 48 if (request.queryString.includes("queryresult")) { 49 response.processAsync(); 50 setObjectState("queryResult", response); 51 return; 52 } 53 54 if (request.queryString.includes("loadFrame")) { 55 response.write(FRAME); 56 return; 57 } 58 59 if (request.queryString.includes("checkCookie")) { 60 var cookie = "unitialized"; 61 if (request.hasHeader("Cookie")) { 62 cookie = request.getHeader("Cookie"); 63 } else { 64 cookie = "myKey=noCookie"; 65 } 66 response.setHeader("Content-Type", "image/png"); 67 response.write(IMG_BYTES); 68 69 // return the result 70 getObjectState("queryResult", function (queryResponse) { 71 if (!queryResponse) { 72 return; 73 } 74 queryResponse.write(cookie); 75 queryResponse.finish(); 76 }); 77 return; 78 } 79 80 // we should never get here, but just in case return something unexpected 81 response.write("D'oh"); 82 }