browser/devtools/webconsole/test/browser_webconsole_netlogging.js

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:25dced6da672
1 /* vim:set ts=2 sw=2 sts=2 et: */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Any copyright is dedicated to the Public Domain.
4 * http://creativecommons.org/publicdomain/zero/1.0/
5 *
6 * Contributor(s):
7 * Julian Viereck <jviereck@mozilla.com>
8 * Patrick Walton <pcwalton@mozilla.com>
9 * Mihai Șucan <mihai.sucan@gmail.com>
10 *
11 * ***** END LICENSE BLOCK ***** */
12
13 // Tests that network log messages bring up the network panel.
14
15 const TEST_NETWORK_REQUEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-network-request.html";
16
17 const TEST_IMG = "http://example.com/browser/browser/devtools/webconsole/test/test-image.png";
18
19 const TEST_DATA_JSON_CONTENT =
20 '{ id: "test JSON data", myArray: [ "foo", "bar", "baz", "biff" ] }';
21
22 let lastRequest = null;
23 let requestCallback = null;
24
25 function test()
26 {
27 addTab("data:text/html;charset=utf-8,Web Console network logging tests");
28
29 browser.addEventListener("load", function onLoad() {
30 browser.removeEventListener("load", onLoad, true);
31
32 openConsole(null, function(aHud) {
33 hud = aHud;
34
35 HUDService.lastFinishedRequest.callback = requestCallbackWrapper;
36
37 executeSoon(testPageLoad);
38 });
39 }, true);
40 }
41
42 function requestCallbackWrapper(aRequest)
43 {
44 lastRequest = aRequest;
45
46 hud.ui.webConsoleClient.getResponseContent(lastRequest.actor,
47 function(aResponse) {
48 lastRequest.response.content = aResponse.content;
49 lastRequest.discardResponseBody = aResponse.contentDiscarded;
50
51 hud.ui.webConsoleClient.getRequestPostData(lastRequest.actor,
52 function(aResponse) {
53 lastRequest.request.postData = aResponse.postData;
54 lastRequest.discardRequestBody = aResponse.postDataDiscarded;
55
56 if (requestCallback) {
57 requestCallback();
58 }
59 });
60 });
61 }
62
63 function testPageLoad()
64 {
65 requestCallback = function() {
66 // Check if page load was logged correctly.
67 ok(lastRequest, "Page load was logged");
68
69 is(lastRequest.request.url, TEST_NETWORK_REQUEST_URI,
70 "Logged network entry is page load");
71 is(lastRequest.request.method, "GET", "Method is correct");
72 ok(!lastRequest.request.postData.text, "No request body was stored");
73 ok(lastRequest.discardRequestBody, "Request body was discarded");
74 ok(!lastRequest.response.content.text, "No response body was stored");
75 ok(lastRequest.discardResponseBody, "Response body was discarded");
76
77 lastRequest = null;
78 requestCallback = null;
79 executeSoon(testPageLoadBody);
80 };
81
82 content.location = TEST_NETWORK_REQUEST_URI;
83 }
84
85 function testPageLoadBody()
86 {
87 // Turn on logging of request bodies and check again.
88 hud.ui.setSaveRequestAndResponseBodies(true).then(() => {
89 ok(hud.ui._saveRequestAndResponseBodies,
90 "The saveRequestAndResponseBodies property was successfully set.");
91
92 testPageLoadBodyAfterSettingUpdate();
93 });
94 }
95
96 function testPageLoadBodyAfterSettingUpdate()
97 {
98 let loaded = false;
99 let requestCallbackInvoked = false;
100
101 requestCallback = function() {
102 ok(lastRequest, "Page load was logged again");
103 ok(!lastRequest.discardResponseBody, "Response body was not discarded");
104 is(lastRequest.response.content.text.indexOf("<!DOCTYPE HTML>"), 0,
105 "Response body's beginning is okay");
106
107 lastRequest = null;
108 requestCallback = null;
109 requestCallbackInvoked = true;
110
111 if (loaded) {
112 executeSoon(testXhrGet);
113 }
114 };
115
116 browser.addEventListener("load", function onLoad() {
117 browser.removeEventListener("load", onLoad, true);
118 loaded = true;
119
120 if (requestCallbackInvoked) {
121 executeSoon(testXhrGet);
122 }
123 }, true);
124
125 content.location.reload();
126 }
127
128 function testXhrGet()
129 {
130 requestCallback = function() {
131 ok(lastRequest, "testXhrGet() was logged");
132 is(lastRequest.request.method, "GET", "Method is correct");
133 ok(!lastRequest.request.postData.text, "No request body was sent");
134 ok(!lastRequest.discardRequestBody, "Request body was not discarded");
135 is(lastRequest.response.content.text, TEST_DATA_JSON_CONTENT,
136 "Response is correct");
137
138 lastRequest = null;
139 requestCallback = null;
140 executeSoon(testXhrPost);
141 };
142
143 // Start the XMLHttpRequest() GET test.
144 content.wrappedJSObject.testXhrGet();
145 }
146
147 function testXhrPost()
148 {
149 requestCallback = function() {
150 ok(lastRequest, "testXhrPost() was logged");
151 is(lastRequest.request.method, "POST", "Method is correct");
152 is(lastRequest.request.postData.text, "Hello world!",
153 "Request body was logged");
154 is(lastRequest.response.content.text, TEST_DATA_JSON_CONTENT,
155 "Response is correct");
156
157 lastRequest = null;
158 requestCallback = null;
159 executeSoon(testFormSubmission);
160 };
161
162 // Start the XMLHttpRequest() POST test.
163 content.wrappedJSObject.testXhrPost();
164 }
165
166 function testFormSubmission()
167 {
168 // Start the form submission test. As the form is submitted, the page is
169 // loaded again. Bind to the load event to catch when this is done.
170 requestCallback = function() {
171 ok(lastRequest, "testFormSubmission() was logged");
172 is(lastRequest.request.method, "POST", "Method is correct");
173 isnot(lastRequest.request.postData.text.
174 indexOf("Content-Type: application/x-www-form-urlencoded"), -1,
175 "Content-Type is correct");
176 isnot(lastRequest.request.postData.text.
177 indexOf("Content-Length: 20"), -1, "Content-length is correct");
178 isnot(lastRequest.request.postData.text.
179 indexOf("name=foo+bar&age=144"), -1, "Form data is correct");
180 is(lastRequest.response.content.text.indexOf("<!DOCTYPE HTML>"), 0,
181 "Response body's beginning is okay");
182
183 executeSoon(testNetworkPanel);
184 };
185
186 let form = content.document.querySelector("form");
187 ok(form, "we have the HTML form");
188 form.submit();
189 }
190
191 function testNetworkPanel()
192 {
193 // Open the NetworkPanel. The functionality of the NetworkPanel is tested
194 // within separate test files.
195 let networkPanel = hud.ui.openNetworkPanel(hud.ui.filterBox, lastRequest);
196
197 networkPanel.panel.addEventListener("popupshown", function onPopupShown() {
198 networkPanel.panel.removeEventListener("popupshown", onPopupShown, true);
199
200 is(hud.ui.filterBox._netPanel, networkPanel,
201 "Network panel stored on anchor node");
202 ok(true, "NetworkPanel was opened");
203
204 // All tests are done. Shutdown.
205 networkPanel.panel.hidePopup();
206 lastRequest = null;
207 HUDService.lastFinishedRequest.callback = null;
208 executeSoon(finishTest);
209 }, true);
210 }
211

mercurial