|
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 |