toolkit/devtools/webconsole/test/test_network_post.html

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:0f32059f9121
1 <!DOCTYPE HTML>
2 <html lang="en">
3 <head>
4 <meta charset="utf8">
5 <title>Test for the network actor (POST request)</title>
6 <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
7 <script type="text/javascript;version=1.8" src="common.js"></script>
8 <!-- Any copyright is dedicated to the Public Domain.
9 - http://creativecommons.org/publicdomain/zero/1.0/ -->
10 </head>
11 <body>
12 <p>Test for the network actor (POST request)</p>
13
14 <iframe src="http://example.com/chrome/toolkit/devtools/webconsole/test/network_requests_iframe.html"></iframe>
15
16 <script class="testbody" type="text/javascript;version=1.8">
17 SimpleTest.waitForExplicitFinish();
18
19 function startTest()
20 {
21 removeEventListener("load", startTest);
22
23 attachConsole(["NetworkActivity"], onAttach, true);
24 }
25
26 function onAttach(aState, aResponse)
27 {
28 info("enable network request and response body logging");
29
30 onSetPreferences = onSetPreferences.bind(null, aState);
31 aState.client.setPreferences({
32 "NetworkMonitor.saveRequestAndResponseBodies": true,
33 }, onSetPreferences);
34 }
35
36 function onSetPreferences(aState, aResponse)
37 {
38 is(aResponse.updated.length, 1, "updated prefs length");
39 is(aResponse.updated[0], "NetworkMonitor.saveRequestAndResponseBodies",
40 "updated prefs length");
41
42 info("test network POST request");
43
44 onNetworkEvent = onNetworkEvent.bind(null, aState);
45 aState.dbgClient.addListener("networkEvent", onNetworkEvent);
46 onNetworkEventUpdate = onNetworkEventUpdate.bind(null, aState);
47 aState.dbgClient.addListener("networkEventUpdate", onNetworkEventUpdate);
48
49 let iframe = document.querySelector("iframe").contentWindow;
50 iframe.wrappedJSObject.testXhrPost();
51 }
52
53 function onNetworkEvent(aState, aType, aPacket)
54 {
55 is(aPacket.from, aState.actor, "network event actor");
56
57 info("checking the network event packet");
58
59 let netActor = aPacket.eventActor;
60
61 checkObject(netActor, {
62 actor: /[a-z]/,
63 startedDateTime: /^\d+\-\d+\-\d+T.+$/,
64 url: /data\.json/,
65 method: "POST",
66 });
67
68 aState.netActor = netActor.actor;
69
70 aState.dbgClient.removeListener("networkEvent", onNetworkEvent);
71 }
72
73 let updates = [];
74
75 function onNetworkEventUpdate(aState, aType, aPacket)
76 {
77 info("received networkEventUpdate " + aPacket.updateType);
78 is(aPacket.from, aState.netActor, "networkEventUpdate actor");
79
80 updates.push(aPacket.updateType);
81
82 let expectedPacket = null;
83
84 switch (aPacket.updateType) {
85 case "requestHeaders":
86 case "responseHeaders":
87 ok(aPacket.headers > 0, "headers > 0");
88 ok(aPacket.headersSize > 0, "headersSize > 0");
89 break;
90 case "requestCookies":
91 expectedPacket = {
92 cookies: 3,
93 };
94 break;
95 case "requestPostData":
96 ok(aPacket.dataSize > 0, "dataSize > 0");
97 ok(!aPacket.discardRequestBody, "discardRequestBody");
98 break;
99 case "responseStart":
100 expectedPacket = {
101 response: {
102 httpVersion: /^HTTP\/\d\.\d$/,
103 status: 200,
104 statusText: "OK",
105 headersSize: /^\d+$/,
106 discardResponseBody: false,
107 },
108 };
109 break;
110 case "responseCookies":
111 expectedPacket = {
112 cookies: 0,
113 };
114 break;
115 case "responseContent":
116 expectedPacket = {
117 mimeType: "application/json",
118 contentSize: /^\d+$/,
119 discardResponseBody: false,
120 };
121 break;
122 case "eventTimings":
123 expectedPacket = {
124 totalTime: /^\d+$/,
125 };
126 break;
127 default:
128 ok(false, "unknown network event update type: " +
129 aPacket.updateType);
130 return;
131 }
132
133 if (expectedPacket) {
134 info("checking the packet content");
135 checkObject(aPacket, expectedPacket);
136 }
137
138 if (updates.indexOf("responseContent") > -1 &&
139 updates.indexOf("eventTimings") > -1) {
140 aState.dbgClient.removeListener("networkEventUpdate",
141 onNetworkEvent);
142
143 onRequestHeaders = onRequestHeaders.bind(null, aState);
144 aState.client.getRequestHeaders(aState.netActor,
145 onRequestHeaders);
146 }
147 }
148
149 function onRequestHeaders(aState, aResponse)
150 {
151 info("checking request headers");
152
153 ok(aResponse.headers.length > 0, "request headers > 0");
154 ok(aResponse.headersSize > 0, "request headersSize > 0");
155
156 checkHeadersOrCookies(aResponse.headers, {
157 Referer: /network_requests_iframe\.html/,
158 Cookie: /bug768096/,
159 });
160
161 onRequestCookies = onRequestCookies.bind(null, aState);
162 aState.client.getRequestCookies(aState.netActor,
163 onRequestCookies);
164 }
165
166 function onRequestCookies(aState, aResponse)
167 {
168 info("checking request cookies");
169
170 is(aResponse.cookies.length, 3, "request cookies length");
171
172 checkHeadersOrCookies(aResponse.cookies, {
173 foobar: "fooval",
174 omgfoo: "bug768096",
175 badcookie: "bug826798=st3fan",
176 });
177
178 onRequestPostData = onRequestPostData.bind(null, aState);
179 aState.client.getRequestPostData(aState.netActor,
180 onRequestPostData);
181 }
182
183 function onRequestPostData(aState, aResponse)
184 {
185 info("checking request POST data");
186
187 checkObject(aResponse, {
188 postData: {
189 text: /^Hello world! foobaz barr.+foobaz barr$/,
190 },
191 postDataDiscarded: false,
192 });
193
194 is(aResponse.postData.text.length, 552, "postData text length");
195
196 onResponseHeaders = onResponseHeaders.bind(null, aState);
197 aState.client.getResponseHeaders(aState.netActor,
198 onResponseHeaders);
199 }
200
201 function onResponseHeaders(aState, aResponse)
202 {
203 info("checking response headers");
204
205 ok(aResponse.headers.length > 0, "response headers > 0");
206 ok(aResponse.headersSize > 0, "response headersSize > 0");
207
208 checkHeadersOrCookies(aResponse.headers, {
209 "Content-Type": /^application\/(json|octet-stream)$/,
210 "Content-Length": /^\d+$/,
211 });
212
213 onResponseCookies = onResponseCookies.bind(null, aState);
214 aState.client.getResponseCookies(aState.netActor,
215 onResponseCookies);
216 }
217
218 function onResponseCookies(aState, aResponse)
219 {
220 info("checking response cookies");
221
222 is(aResponse.cookies.length, 0, "response cookies length");
223
224 onResponseContent = onResponseContent.bind(null, aState);
225 aState.client.getResponseContent(aState.netActor,
226 onResponseContent);
227 }
228
229 function onResponseContent(aState, aResponse)
230 {
231 info("checking response content");
232
233 checkObject(aResponse, {
234 content: {
235 text: /"test JSON data"/,
236 },
237 contentDiscarded: false,
238 });
239
240 onEventTimings = onEventTimings.bind(null, aState);
241 aState.client.getEventTimings(aState.netActor,
242 onEventTimings);
243 }
244
245 function onEventTimings(aState, aResponse)
246 {
247 info("checking event timings");
248
249 checkObject(aResponse, {
250 timings: {
251 blocked: /^-1|\d+$/,
252 dns: /^-1|\d+$/,
253 connect: /^-1|\d+$/,
254 send: /^-1|\d+$/,
255 wait: /^-1|\d+$/,
256 receive: /^-1|\d+$/,
257 },
258 totalTime: /^\d+$/,
259 });
260
261 closeDebugger(aState, function() {
262 SimpleTest.finish();
263 });
264 }
265
266 addEventListener("load", startTest);
267 </script>
268 </body>
269 </html>

mercurial