content/base/test/file_CrossSiteXHR_inner_data.sjs

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

michael@0 1 var data = '<!DOCTYPE HTML>\n\
michael@0 2 <html>\n\
michael@0 3 <head>\n\
michael@0 4 <script>\n\
michael@0 5 window.addEventListener("message", function(e) {\n\
michael@0 6 \n\
michael@0 7 sendData = null;\n\
michael@0 8 \n\
michael@0 9 req = eval(e.data);\n\
michael@0 10 var res = {\n\
michael@0 11 didFail: false,\n\
michael@0 12 events: [],\n\
michael@0 13 progressEvents: 0\n\
michael@0 14 };\n\
michael@0 15 \n\
michael@0 16 var xhr = new XMLHttpRequest();\n\
michael@0 17 for (type of ["load", "abort", "error", "loadstart", "loadend"]) {\n\
michael@0 18 xhr.addEventListener(type, function(e) {\n\
michael@0 19 res.events.push(e.type);\n\
michael@0 20 }, false);\n\
michael@0 21 }\n\
michael@0 22 xhr.addEventListener("readystatechange", function(e) {\n\
michael@0 23 res.events.push("rs" + xhr.readyState);\n\
michael@0 24 }, false);\n\
michael@0 25 xhr.addEventListener("progress", function(e) {\n\
michael@0 26 res.progressEvents++;\n\
michael@0 27 }, false);\n\
michael@0 28 if (req.uploadProgress) {\n\
michael@0 29 xhr.upload.addEventListener(req.uploadProgress, function(e) {\n\
michael@0 30 res.progressEvents++;\n\
michael@0 31 }, false);\n\
michael@0 32 }\n\
michael@0 33 xhr.onerror = function(e) {\n\
michael@0 34 res.didFail = true;\n\
michael@0 35 };\n\
michael@0 36 xhr.onloadend = function (event) {\n\
michael@0 37 res.status = xhr.status;\n\
michael@0 38 try {\n\
michael@0 39 res.statusText = xhr.statusText;\n\
michael@0 40 } catch (e) {\n\
michael@0 41 delete(res.statusText);\n\
michael@0 42 }\n\
michael@0 43 res.responseXML = xhr.responseXML ?\n\
michael@0 44 (new XMLSerializer()).serializeToString(xhr.responseXML) :\n\
michael@0 45 null;\n\
michael@0 46 res.responseText = xhr.responseText;\n\
michael@0 47 \n\
michael@0 48 res.responseHeaders = {};\n\
michael@0 49 for (responseHeader in req.responseHeaders) {\n\
michael@0 50 res.responseHeaders[responseHeader] =\n\
michael@0 51 xhr.getResponseHeader(responseHeader);\n\
michael@0 52 }\n\
michael@0 53 res.allResponseHeaders = {};\n\
michael@0 54 var splitHeaders = xhr.getAllResponseHeaders().split("\\r\\n");\n\
michael@0 55 for (var i = 0; i < splitHeaders.length; i++) {\n\
michael@0 56 var headerValuePair = splitHeaders[i].split(":");\n\
michael@0 57 if(headerValuePair[1] != null){\n\
michael@0 58 var headerName = trimString(headerValuePair[0]);\n\
michael@0 59 var headerValue = trimString(headerValuePair[1]); \n\
michael@0 60 res.allResponseHeaders[headerName] = headerValue;\n\
michael@0 61 }\n\
michael@0 62 }\n\
michael@0 63 post(e, res);\n\
michael@0 64 }\n\
michael@0 65 \n\
michael@0 66 if (req.withCred)\n\
michael@0 67 xhr.withCredentials = true;\n\
michael@0 68 if (req.body)\n\
michael@0 69 sendData = req.body;\n\
michael@0 70 \n\
michael@0 71 res.events.push("opening");\n\
michael@0 72 xhr.open(req.method, req.url, true);\n\
michael@0 73 \n\
michael@0 74 for (header in req.headers) {\n\
michael@0 75 xhr.setRequestHeader(header, req.headers[header]);\n\
michael@0 76 }\n\
michael@0 77 \n\
michael@0 78 res.events.push("sending");\n\
michael@0 79 xhr.send(sendData);\n\
michael@0 80 \n\
michael@0 81 }, false);\n\
michael@0 82 \n\
michael@0 83 function post(e, res) {\n\
michael@0 84 e.source.postMessage(res.toSource(), "*");\n\
michael@0 85 }\n\
michael@0 86 function trimString(stringValue) {\n\
michael@0 87 return stringValue.replace("/^\s+|\s+$/g","");\n\
michael@0 88 };\n\
michael@0 89 \n\
michael@0 90 </script>\n\
michael@0 91 </head>\n\
michael@0 92 <body>\n\
michael@0 93 Inner page\n\
michael@0 94 </body>\n\
michael@0 95 </html>'
michael@0 96
michael@0 97 function handleRequest(request, response)
michael@0 98 {
michael@0 99 response.setStatusLine(null, 302, "Follow me");
michael@0 100 response.setHeader("Location", "data:text/html," + escape(data));
michael@0 101 response.setHeader("Content-Type", "text/plain");
michael@0 102 response.write("Follow that guy!");
michael@0 103 }

mercurial