1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/devtools/webconsole/test/test_network_longstring.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,300 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html lang="en"> 1.6 +<head> 1.7 + <meta charset="utf8"> 1.8 + <title>Test that the network actor uses the LongStringActor</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 that the network actor uses the LongStringActor</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 + window.ORIGINAL_LONG_STRING_LENGTH = DebuggerServer.LONG_STRING_LENGTH; 1.34 + window.ORIGINAL_LONG_STRING_INITIAL_LENGTH = 1.35 + DebuggerServer.LONG_STRING_INITIAL_LENGTH; 1.36 + 1.37 + DebuggerServer.LONG_STRING_LENGTH = 400; 1.38 + DebuggerServer.LONG_STRING_INITIAL_LENGTH = 400; 1.39 + 1.40 + onSetPreferences = onSetPreferences.bind(null, aState); 1.41 + aState.client.setPreferences({ 1.42 + "NetworkMonitor.saveRequestAndResponseBodies": true, 1.43 + }, onSetPreferences); 1.44 +} 1.45 + 1.46 +function onSetPreferences(aState, aResponse) 1.47 +{ 1.48 + is(aResponse.updated.length, 1, "updated prefs length"); 1.49 + is(aResponse.updated[0], "NetworkMonitor.saveRequestAndResponseBodies", 1.50 + "updated prefs length"); 1.51 + 1.52 + info("test network POST request"); 1.53 + 1.54 + onNetworkEvent = onNetworkEvent.bind(null, aState); 1.55 + aState.dbgClient.addListener("networkEvent", onNetworkEvent); 1.56 + onNetworkEventUpdate = onNetworkEventUpdate.bind(null, aState); 1.57 + aState.dbgClient.addListener("networkEventUpdate", onNetworkEventUpdate); 1.58 + 1.59 + let iframe = document.querySelector("iframe").contentWindow; 1.60 + iframe.wrappedJSObject.testXhrPost(); 1.61 +} 1.62 + 1.63 +function onNetworkEvent(aState, aType, aPacket) 1.64 +{ 1.65 + is(aPacket.from, aState.actor, "network event actor"); 1.66 + 1.67 + info("checking the network event packet"); 1.68 + 1.69 + let netActor = aPacket.eventActor; 1.70 + 1.71 + checkObject(netActor, { 1.72 + actor: /[a-z]/, 1.73 + startedDateTime: /^\d+\-\d+\-\d+T.+$/, 1.74 + url: /data\.json/, 1.75 + method: "POST", 1.76 + }); 1.77 + 1.78 + aState.netActor = netActor.actor; 1.79 + 1.80 + aState.dbgClient.removeListener("networkEvent", onNetworkEvent); 1.81 +} 1.82 + 1.83 +let updates = []; 1.84 + 1.85 +function onNetworkEventUpdate(aState, aType, aPacket) 1.86 +{ 1.87 + info("received networkEventUpdate " + aPacket.updateType); 1.88 + is(aPacket.from, aState.netActor, "networkEventUpdate actor"); 1.89 + 1.90 + updates.push(aPacket.updateType); 1.91 + 1.92 + let expectedPacket = null; 1.93 + 1.94 + switch (aPacket.updateType) { 1.95 + case "requestHeaders": 1.96 + case "responseHeaders": 1.97 + ok(aPacket.headers > 0, "headers > 0"); 1.98 + ok(aPacket.headersSize > 0, "headersSize > 0"); 1.99 + break; 1.100 + case "requestCookies": 1.101 + expectedPacket = { 1.102 + cookies: 3, 1.103 + }; 1.104 + break; 1.105 + case "requestPostData": 1.106 + ok(aPacket.dataSize > 0, "dataSize > 0"); 1.107 + ok(!aPacket.discardRequestBody, "discardRequestBody"); 1.108 + break; 1.109 + case "responseStart": 1.110 + expectedPacket = { 1.111 + response: { 1.112 + httpVersion: /^HTTP\/\d\.\d$/, 1.113 + status: 200, 1.114 + statusText: "OK", 1.115 + headersSize: /^\d+$/, 1.116 + discardResponseBody: false, 1.117 + }, 1.118 + }; 1.119 + break; 1.120 + case "responseCookies": 1.121 + expectedPacket = { 1.122 + cookies: 0, 1.123 + }; 1.124 + break; 1.125 + case "responseContent": 1.126 + expectedPacket = { 1.127 + mimeType: "application/json", 1.128 + contentSize: /^\d+$/, 1.129 + discardResponseBody: false, 1.130 + }; 1.131 + break; 1.132 + case "eventTimings": 1.133 + expectedPacket = { 1.134 + totalTime: /^\d+$/, 1.135 + }; 1.136 + break; 1.137 + default: 1.138 + ok(false, "unknown network event update type: " + 1.139 + aPacket.updateType); 1.140 + return; 1.141 + } 1.142 + 1.143 + if (expectedPacket) { 1.144 + info("checking the packet content"); 1.145 + checkObject(aPacket, expectedPacket); 1.146 + } 1.147 + 1.148 + if (updates.indexOf("responseContent") > -1 && 1.149 + updates.indexOf("eventTimings") > -1) { 1.150 + aState.dbgClient.removeListener("networkEventUpdate", 1.151 + onNetworkEvent); 1.152 + 1.153 + onRequestHeaders = onRequestHeaders.bind(null, aState); 1.154 + aState.client.getRequestHeaders(aState.netActor, 1.155 + onRequestHeaders); 1.156 + } 1.157 +} 1.158 + 1.159 +function onRequestHeaders(aState, aResponse) 1.160 +{ 1.161 + info("checking request headers"); 1.162 + 1.163 + ok(aResponse.headers.length > 0, "request headers > 0"); 1.164 + ok(aResponse.headersSize > 0, "request headersSize > 0"); 1.165 + 1.166 + checkHeadersOrCookies(aResponse.headers, { 1.167 + Referer: /network_requests_iframe\.html/, 1.168 + Cookie: /bug768096/, 1.169 + }); 1.170 + 1.171 + onRequestCookies = onRequestCookies.bind(null, aState); 1.172 + aState.client.getRequestCookies(aState.netActor, 1.173 + onRequestCookies); 1.174 +} 1.175 + 1.176 +function onRequestCookies(aState, aResponse) 1.177 +{ 1.178 + info("checking request cookies"); 1.179 + 1.180 + is(aResponse.cookies.length, 3, "request cookies length"); 1.181 + 1.182 + checkHeadersOrCookies(aResponse.cookies, { 1.183 + foobar: "fooval", 1.184 + omgfoo: "bug768096", 1.185 + badcookie: "bug826798=st3fan", 1.186 + }); 1.187 + 1.188 + onRequestPostData = onRequestPostData.bind(null, aState); 1.189 + aState.client.getRequestPostData(aState.netActor, 1.190 + onRequestPostData); 1.191 +} 1.192 + 1.193 +function onRequestPostData(aState, aResponse) 1.194 +{ 1.195 + info("checking request POST data"); 1.196 + 1.197 + checkObject(aResponse, { 1.198 + postData: { 1.199 + text: { 1.200 + type: "longString", 1.201 + initial: /^Hello world! foobaz barr.+foobaz barrfo$/, 1.202 + length: 552, 1.203 + actor: /[a-z]/, 1.204 + }, 1.205 + }, 1.206 + postDataDiscarded: false, 1.207 + }); 1.208 + 1.209 + is(aResponse.postData.text.initial.length, 1.210 + DebuggerServer.LONG_STRING_INITIAL_LENGTH, "postData text initial length"); 1.211 + 1.212 + onResponseHeaders = onResponseHeaders.bind(null, aState); 1.213 + aState.client.getResponseHeaders(aState.netActor, 1.214 + onResponseHeaders); 1.215 +} 1.216 + 1.217 +function onResponseHeaders(aState, aResponse) 1.218 +{ 1.219 + info("checking response headers"); 1.220 + 1.221 + ok(aResponse.headers.length > 0, "response headers > 0"); 1.222 + ok(aResponse.headersSize > 0, "response headersSize > 0"); 1.223 + 1.224 + checkHeadersOrCookies(aResponse.headers, { 1.225 + "Content-Type": /^application\/(json|octet-stream)$/, 1.226 + "Content-Length": /^\d+$/, 1.227 + "x-very-short": "hello world", 1.228 + "x-very-long": { 1.229 + "type": "longString", 1.230 + "length": 521, 1.231 + "initial": /^Lorem ipsum.+\. Donec vitae d$/, 1.232 + "actor": /[a-z]/, 1.233 + }, 1.234 + }); 1.235 + 1.236 + onResponseCookies = onResponseCookies.bind(null, aState); 1.237 + aState.client.getResponseCookies(aState.netActor, 1.238 + onResponseCookies); 1.239 +} 1.240 + 1.241 +function onResponseCookies(aState, aResponse) 1.242 +{ 1.243 + info("checking response cookies"); 1.244 + 1.245 + is(aResponse.cookies.length, 0, "response cookies length"); 1.246 + 1.247 + onResponseContent = onResponseContent.bind(null, aState); 1.248 + aState.client.getResponseContent(aState.netActor, 1.249 + onResponseContent); 1.250 +} 1.251 + 1.252 +function onResponseContent(aState, aResponse) 1.253 +{ 1.254 + info("checking response content"); 1.255 + 1.256 + checkObject(aResponse, { 1.257 + content: { 1.258 + text: { 1.259 + type: "longString", 1.260 + initial: /^\{ id: "test JSON data"(.|\r|\n)+ barfoo ba$/g, 1.261 + length: 1070, 1.262 + actor: /[a-z]/, 1.263 + }, 1.264 + }, 1.265 + contentDiscarded: false, 1.266 + }); 1.267 + 1.268 + is(aResponse.content.text.initial.length, 1.269 + DebuggerServer.LONG_STRING_INITIAL_LENGTH, "content initial length"); 1.270 + 1.271 + onEventTimings = onEventTimings.bind(null, aState); 1.272 + aState.client.getEventTimings(aState.netActor, 1.273 + onEventTimings); 1.274 +} 1.275 + 1.276 +function onEventTimings(aState, aResponse) 1.277 +{ 1.278 + info("checking event timings"); 1.279 + 1.280 + checkObject(aResponse, { 1.281 + timings: { 1.282 + blocked: /^-1|\d+$/, 1.283 + dns: /^-1|\d+$/, 1.284 + connect: /^-1|\d+$/, 1.285 + send: /^-1|\d+$/, 1.286 + wait: /^-1|\d+$/, 1.287 + receive: /^-1|\d+$/, 1.288 + }, 1.289 + totalTime: /^\d+$/, 1.290 + }); 1.291 + 1.292 + closeDebugger(aState, function() { 1.293 + DebuggerServer.LONG_STRING_LENGTH = ORIGINAL_LONG_STRING_LENGTH; 1.294 + DebuggerServer.LONG_STRING_INITIAL_LENGTH = ORIGINAL_LONG_STRING_INITIAL_LENGTH; 1.295 + 1.296 + SimpleTest.finish(); 1.297 + }); 1.298 +} 1.299 + 1.300 +addEventListener("load", startTest); 1.301 +</script> 1.302 +</body> 1.303 +</html>