1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/base/test/file_CrossSiteXHR_inner.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,121 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<!-- 1.6 + NOTE! The content of this file is duplicated in file_CrossSiteXHR_inner.jar 1.7 + and file_CrossSiteXHR_inner_data.sjs 1.8 + Please update those files if you update this one. 1.9 +--> 1.10 + 1.11 +<html> 1.12 +<head> 1.13 +<script> 1.14 +function trimString(stringValue) { 1.15 + return stringValue.replace(/^\s+|\s+$/g, ''); 1.16 +}; 1.17 + 1.18 +window.addEventListener("message", function(e) { 1.19 + 1.20 + sendData = null; 1.21 + 1.22 + req = eval(e.data); 1.23 + var res = { 1.24 + didFail: false, 1.25 + events: [], 1.26 + progressEvents: 0, 1.27 + status: 0, 1.28 + responseText: "", 1.29 + statusText: "", 1.30 + responseXML: null, 1.31 + sendThrew: false 1.32 + }; 1.33 + 1.34 + var xhr = new XMLHttpRequest(); 1.35 + for (type of ["load", "abort", "error", "loadstart", "loadend"]) { 1.36 + xhr.addEventListener(type, function(e) { 1.37 + res.events.push(e.type); 1.38 + }, false); 1.39 + } 1.40 + xhr.addEventListener("readystatechange", function(e) { 1.41 + res.events.push("rs" + xhr.readyState); 1.42 + }, false); 1.43 + xhr.addEventListener("progress", function(e) { 1.44 + res.progressEvents++; 1.45 + }, false); 1.46 + if (req.uploadProgress) { 1.47 + xhr.upload.addEventListener(req.uploadProgress, function(e) { 1.48 + res.progressEvents++; 1.49 + }, false); 1.50 + } 1.51 + xhr.onerror = function(e) { 1.52 + res.didFail = true; 1.53 + }; 1.54 + xhr.onloadend = function (event) { 1.55 + res.status = xhr.status; 1.56 + try { 1.57 + res.statusText = xhr.statusText; 1.58 + } catch (e) { 1.59 + delete(res.statusText); 1.60 + } 1.61 + res.responseXML = xhr.responseXML ? 1.62 + (new XMLSerializer()).serializeToString(xhr.responseXML) : 1.63 + null; 1.64 + res.responseText = xhr.responseText; 1.65 + 1.66 + res.responseHeaders = {}; 1.67 + for (responseHeader in req.responseHeaders) { 1.68 + res.responseHeaders[responseHeader] = 1.69 + xhr.getResponseHeader(responseHeader); 1.70 + } 1.71 + res.allResponseHeaders = {}; 1.72 + var splitHeaders = xhr.getAllResponseHeaders().split("\r\n"); 1.73 + for (var i = 0; i < splitHeaders.length; i++) { 1.74 + var headerValuePair = splitHeaders[i].split(":"); 1.75 + if(headerValuePair[1] != null) { 1.76 + var headerName = trimString(headerValuePair[0]); 1.77 + var headerValue = trimString(headerValuePair[1]); 1.78 + res.allResponseHeaders[headerName] = headerValue; 1.79 + } 1.80 + } 1.81 + post(e, res); 1.82 + } 1.83 + 1.84 + if (req.withCred) 1.85 + xhr.withCredentials = true; 1.86 + if (req.body) 1.87 + sendData = req.body; 1.88 + 1.89 + res.events.push("opening"); 1.90 + // Allow passign in falsy usernames/passwords so we can test them 1.91 + try { 1.92 + xhr.open(req.method, req.url, true, 1.93 + ("username" in req) ? req.username : "", 1.94 + ("password" in req) ? req.password : "aa"); 1.95 + } catch (ex) { 1.96 + res.didFail = true; 1.97 + post(e, res); 1.98 + } 1.99 + 1.100 + for (header in req.headers) { 1.101 + xhr.setRequestHeader(header, req.headers[header]); 1.102 + } 1.103 + 1.104 + res.events.push("sending"); 1.105 + try { 1.106 + xhr.send(sendData); 1.107 + } catch (ex) { 1.108 + res.didFail = true; 1.109 + res.sendThrew = true; 1.110 + post(e, res); 1.111 + } 1.112 + 1.113 +}, false); 1.114 + 1.115 +function post(e, res) { 1.116 + e.source.postMessage(res.toSource(), "http://mochi.test:8888"); 1.117 +} 1.118 + 1.119 +</script> 1.120 +</head> 1.121 +<body> 1.122 +Inner page 1.123 +</body> 1.124 +</html>