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

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

mercurial