1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/devtools/webconsole/test/test_network_post.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,269 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html lang="en"> 1.6 +<head> 1.7 + <meta charset="utf8"> 1.8 + <title>Test for the network actor (POST request)</title> 1.9 + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 1.10 + <script type="text/javascript;version=1.8" src="common.js"></script> 1.11 + <!-- Any copyright is dedicated to the Public Domain. 1.12 + - http://creativecommons.org/publicdomain/zero/1.0/ --> 1.13 +</head> 1.14 +<body> 1.15 +<p>Test for the network actor (POST request)</p> 1.16 + 1.17 +<iframe src="http://example.com/chrome/toolkit/devtools/webconsole/test/network_requests_iframe.html"></iframe> 1.18 + 1.19 +<script class="testbody" type="text/javascript;version=1.8"> 1.20 +SimpleTest.waitForExplicitFinish(); 1.21 + 1.22 +function startTest() 1.23 +{ 1.24 + removeEventListener("load", startTest); 1.25 + 1.26 + attachConsole(["NetworkActivity"], onAttach, true); 1.27 +} 1.28 + 1.29 +function onAttach(aState, aResponse) 1.30 +{ 1.31 + info("enable network request and response body logging"); 1.32 + 1.33 + onSetPreferences = onSetPreferences.bind(null, aState); 1.34 + aState.client.setPreferences({ 1.35 + "NetworkMonitor.saveRequestAndResponseBodies": true, 1.36 + }, onSetPreferences); 1.37 +} 1.38 + 1.39 +function onSetPreferences(aState, aResponse) 1.40 +{ 1.41 + is(aResponse.updated.length, 1, "updated prefs length"); 1.42 + is(aResponse.updated[0], "NetworkMonitor.saveRequestAndResponseBodies", 1.43 + "updated prefs length"); 1.44 + 1.45 + info("test network POST request"); 1.46 + 1.47 + onNetworkEvent = onNetworkEvent.bind(null, aState); 1.48 + aState.dbgClient.addListener("networkEvent", onNetworkEvent); 1.49 + onNetworkEventUpdate = onNetworkEventUpdate.bind(null, aState); 1.50 + aState.dbgClient.addListener("networkEventUpdate", onNetworkEventUpdate); 1.51 + 1.52 + let iframe = document.querySelector("iframe").contentWindow; 1.53 + iframe.wrappedJSObject.testXhrPost(); 1.54 +} 1.55 + 1.56 +function onNetworkEvent(aState, aType, aPacket) 1.57 +{ 1.58 + is(aPacket.from, aState.actor, "network event actor"); 1.59 + 1.60 + info("checking the network event packet"); 1.61 + 1.62 + let netActor = aPacket.eventActor; 1.63 + 1.64 + checkObject(netActor, { 1.65 + actor: /[a-z]/, 1.66 + startedDateTime: /^\d+\-\d+\-\d+T.+$/, 1.67 + url: /data\.json/, 1.68 + method: "POST", 1.69 + }); 1.70 + 1.71 + aState.netActor = netActor.actor; 1.72 + 1.73 + aState.dbgClient.removeListener("networkEvent", onNetworkEvent); 1.74 +} 1.75 + 1.76 +let updates = []; 1.77 + 1.78 +function onNetworkEventUpdate(aState, aType, aPacket) 1.79 +{ 1.80 + info("received networkEventUpdate " + aPacket.updateType); 1.81 + is(aPacket.from, aState.netActor, "networkEventUpdate actor"); 1.82 + 1.83 + updates.push(aPacket.updateType); 1.84 + 1.85 + let expectedPacket = null; 1.86 + 1.87 + switch (aPacket.updateType) { 1.88 + case "requestHeaders": 1.89 + case "responseHeaders": 1.90 + ok(aPacket.headers > 0, "headers > 0"); 1.91 + ok(aPacket.headersSize > 0, "headersSize > 0"); 1.92 + break; 1.93 + case "requestCookies": 1.94 + expectedPacket = { 1.95 + cookies: 3, 1.96 + }; 1.97 + break; 1.98 + case "requestPostData": 1.99 + ok(aPacket.dataSize > 0, "dataSize > 0"); 1.100 + ok(!aPacket.discardRequestBody, "discardRequestBody"); 1.101 + break; 1.102 + case "responseStart": 1.103 + expectedPacket = { 1.104 + response: { 1.105 + httpVersion: /^HTTP\/\d\.\d$/, 1.106 + status: 200, 1.107 + statusText: "OK", 1.108 + headersSize: /^\d+$/, 1.109 + discardResponseBody: false, 1.110 + }, 1.111 + }; 1.112 + break; 1.113 + case "responseCookies": 1.114 + expectedPacket = { 1.115 + cookies: 0, 1.116 + }; 1.117 + break; 1.118 + case "responseContent": 1.119 + expectedPacket = { 1.120 + mimeType: "application/json", 1.121 + contentSize: /^\d+$/, 1.122 + discardResponseBody: false, 1.123 + }; 1.124 + break; 1.125 + case "eventTimings": 1.126 + expectedPacket = { 1.127 + totalTime: /^\d+$/, 1.128 + }; 1.129 + break; 1.130 + default: 1.131 + ok(false, "unknown network event update type: " + 1.132 + aPacket.updateType); 1.133 + return; 1.134 + } 1.135 + 1.136 + if (expectedPacket) { 1.137 + info("checking the packet content"); 1.138 + checkObject(aPacket, expectedPacket); 1.139 + } 1.140 + 1.141 + if (updates.indexOf("responseContent") > -1 && 1.142 + updates.indexOf("eventTimings") > -1) { 1.143 + aState.dbgClient.removeListener("networkEventUpdate", 1.144 + onNetworkEvent); 1.145 + 1.146 + onRequestHeaders = onRequestHeaders.bind(null, aState); 1.147 + aState.client.getRequestHeaders(aState.netActor, 1.148 + onRequestHeaders); 1.149 + } 1.150 +} 1.151 + 1.152 +function onRequestHeaders(aState, aResponse) 1.153 +{ 1.154 + info("checking request headers"); 1.155 + 1.156 + ok(aResponse.headers.length > 0, "request headers > 0"); 1.157 + ok(aResponse.headersSize > 0, "request headersSize > 0"); 1.158 + 1.159 + checkHeadersOrCookies(aResponse.headers, { 1.160 + Referer: /network_requests_iframe\.html/, 1.161 + Cookie: /bug768096/, 1.162 + }); 1.163 + 1.164 + onRequestCookies = onRequestCookies.bind(null, aState); 1.165 + aState.client.getRequestCookies(aState.netActor, 1.166 + onRequestCookies); 1.167 +} 1.168 + 1.169 +function onRequestCookies(aState, aResponse) 1.170 +{ 1.171 + info("checking request cookies"); 1.172 + 1.173 + is(aResponse.cookies.length, 3, "request cookies length"); 1.174 + 1.175 + checkHeadersOrCookies(aResponse.cookies, { 1.176 + foobar: "fooval", 1.177 + omgfoo: "bug768096", 1.178 + badcookie: "bug826798=st3fan", 1.179 + }); 1.180 + 1.181 + onRequestPostData = onRequestPostData.bind(null, aState); 1.182 + aState.client.getRequestPostData(aState.netActor, 1.183 + onRequestPostData); 1.184 +} 1.185 + 1.186 +function onRequestPostData(aState, aResponse) 1.187 +{ 1.188 + info("checking request POST data"); 1.189 + 1.190 + checkObject(aResponse, { 1.191 + postData: { 1.192 + text: /^Hello world! foobaz barr.+foobaz barr$/, 1.193 + }, 1.194 + postDataDiscarded: false, 1.195 + }); 1.196 + 1.197 + is(aResponse.postData.text.length, 552, "postData text length"); 1.198 + 1.199 + onResponseHeaders = onResponseHeaders.bind(null, aState); 1.200 + aState.client.getResponseHeaders(aState.netActor, 1.201 + onResponseHeaders); 1.202 +} 1.203 + 1.204 +function onResponseHeaders(aState, aResponse) 1.205 +{ 1.206 + info("checking response headers"); 1.207 + 1.208 + ok(aResponse.headers.length > 0, "response headers > 0"); 1.209 + ok(aResponse.headersSize > 0, "response headersSize > 0"); 1.210 + 1.211 + checkHeadersOrCookies(aResponse.headers, { 1.212 + "Content-Type": /^application\/(json|octet-stream)$/, 1.213 + "Content-Length": /^\d+$/, 1.214 + }); 1.215 + 1.216 + onResponseCookies = onResponseCookies.bind(null, aState); 1.217 + aState.client.getResponseCookies(aState.netActor, 1.218 + onResponseCookies); 1.219 +} 1.220 + 1.221 +function onResponseCookies(aState, aResponse) 1.222 +{ 1.223 + info("checking response cookies"); 1.224 + 1.225 + is(aResponse.cookies.length, 0, "response cookies length"); 1.226 + 1.227 + onResponseContent = onResponseContent.bind(null, aState); 1.228 + aState.client.getResponseContent(aState.netActor, 1.229 + onResponseContent); 1.230 +} 1.231 + 1.232 +function onResponseContent(aState, aResponse) 1.233 +{ 1.234 + info("checking response content"); 1.235 + 1.236 + checkObject(aResponse, { 1.237 + content: { 1.238 + text: /"test JSON data"/, 1.239 + }, 1.240 + contentDiscarded: false, 1.241 + }); 1.242 + 1.243 + onEventTimings = onEventTimings.bind(null, aState); 1.244 + aState.client.getEventTimings(aState.netActor, 1.245 + onEventTimings); 1.246 +} 1.247 + 1.248 +function onEventTimings(aState, aResponse) 1.249 +{ 1.250 + info("checking event timings"); 1.251 + 1.252 + checkObject(aResponse, { 1.253 + timings: { 1.254 + blocked: /^-1|\d+$/, 1.255 + dns: /^-1|\d+$/, 1.256 + connect: /^-1|\d+$/, 1.257 + send: /^-1|\d+$/, 1.258 + wait: /^-1|\d+$/, 1.259 + receive: /^-1|\d+$/, 1.260 + }, 1.261 + totalTime: /^\d+$/, 1.262 + }); 1.263 + 1.264 + closeDebugger(aState, function() { 1.265 + SimpleTest.finish(); 1.266 + }); 1.267 +} 1.268 + 1.269 +addEventListener("load", startTest); 1.270 +</script> 1.271 +</body> 1.272 +</html>