Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
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 | } |