1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/webconsole/test/browser_webconsole_netlogging.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,211 @@ 1.4 +/* vim:set ts=2 sw=2 sts=2 et: */ 1.5 +/* ***** BEGIN LICENSE BLOCK ***** 1.6 + * Any copyright is dedicated to the Public Domain. 1.7 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.8 + * 1.9 + * Contributor(s): 1.10 + * Julian Viereck <jviereck@mozilla.com> 1.11 + * Patrick Walton <pcwalton@mozilla.com> 1.12 + * Mihai Șucan <mihai.sucan@gmail.com> 1.13 + * 1.14 + * ***** END LICENSE BLOCK ***** */ 1.15 + 1.16 +// Tests that network log messages bring up the network panel. 1.17 + 1.18 +const TEST_NETWORK_REQUEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-network-request.html"; 1.19 + 1.20 +const TEST_IMG = "http://example.com/browser/browser/devtools/webconsole/test/test-image.png"; 1.21 + 1.22 +const TEST_DATA_JSON_CONTENT = 1.23 + '{ id: "test JSON data", myArray: [ "foo", "bar", "baz", "biff" ] }'; 1.24 + 1.25 +let lastRequest = null; 1.26 +let requestCallback = null; 1.27 + 1.28 +function test() 1.29 +{ 1.30 + addTab("data:text/html;charset=utf-8,Web Console network logging tests"); 1.31 + 1.32 + browser.addEventListener("load", function onLoad() { 1.33 + browser.removeEventListener("load", onLoad, true); 1.34 + 1.35 + openConsole(null, function(aHud) { 1.36 + hud = aHud; 1.37 + 1.38 + HUDService.lastFinishedRequest.callback = requestCallbackWrapper; 1.39 + 1.40 + executeSoon(testPageLoad); 1.41 + }); 1.42 + }, true); 1.43 +} 1.44 + 1.45 +function requestCallbackWrapper(aRequest) 1.46 +{ 1.47 + lastRequest = aRequest; 1.48 + 1.49 + hud.ui.webConsoleClient.getResponseContent(lastRequest.actor, 1.50 + function(aResponse) { 1.51 + lastRequest.response.content = aResponse.content; 1.52 + lastRequest.discardResponseBody = aResponse.contentDiscarded; 1.53 + 1.54 + hud.ui.webConsoleClient.getRequestPostData(lastRequest.actor, 1.55 + function(aResponse) { 1.56 + lastRequest.request.postData = aResponse.postData; 1.57 + lastRequest.discardRequestBody = aResponse.postDataDiscarded; 1.58 + 1.59 + if (requestCallback) { 1.60 + requestCallback(); 1.61 + } 1.62 + }); 1.63 + }); 1.64 +} 1.65 + 1.66 +function testPageLoad() 1.67 +{ 1.68 + requestCallback = function() { 1.69 + // Check if page load was logged correctly. 1.70 + ok(lastRequest, "Page load was logged"); 1.71 + 1.72 + is(lastRequest.request.url, TEST_NETWORK_REQUEST_URI, 1.73 + "Logged network entry is page load"); 1.74 + is(lastRequest.request.method, "GET", "Method is correct"); 1.75 + ok(!lastRequest.request.postData.text, "No request body was stored"); 1.76 + ok(lastRequest.discardRequestBody, "Request body was discarded"); 1.77 + ok(!lastRequest.response.content.text, "No response body was stored"); 1.78 + ok(lastRequest.discardResponseBody, "Response body was discarded"); 1.79 + 1.80 + lastRequest = null; 1.81 + requestCallback = null; 1.82 + executeSoon(testPageLoadBody); 1.83 + }; 1.84 + 1.85 + content.location = TEST_NETWORK_REQUEST_URI; 1.86 +} 1.87 + 1.88 +function testPageLoadBody() 1.89 +{ 1.90 + // Turn on logging of request bodies and check again. 1.91 + hud.ui.setSaveRequestAndResponseBodies(true).then(() => { 1.92 + ok(hud.ui._saveRequestAndResponseBodies, 1.93 + "The saveRequestAndResponseBodies property was successfully set."); 1.94 + 1.95 + testPageLoadBodyAfterSettingUpdate(); 1.96 + }); 1.97 +} 1.98 + 1.99 +function testPageLoadBodyAfterSettingUpdate() 1.100 +{ 1.101 + let loaded = false; 1.102 + let requestCallbackInvoked = false; 1.103 + 1.104 + requestCallback = function() { 1.105 + ok(lastRequest, "Page load was logged again"); 1.106 + ok(!lastRequest.discardResponseBody, "Response body was not discarded"); 1.107 + is(lastRequest.response.content.text.indexOf("<!DOCTYPE HTML>"), 0, 1.108 + "Response body's beginning is okay"); 1.109 + 1.110 + lastRequest = null; 1.111 + requestCallback = null; 1.112 + requestCallbackInvoked = true; 1.113 + 1.114 + if (loaded) { 1.115 + executeSoon(testXhrGet); 1.116 + } 1.117 + }; 1.118 + 1.119 + browser.addEventListener("load", function onLoad() { 1.120 + browser.removeEventListener("load", onLoad, true); 1.121 + loaded = true; 1.122 + 1.123 + if (requestCallbackInvoked) { 1.124 + executeSoon(testXhrGet); 1.125 + } 1.126 + }, true); 1.127 + 1.128 + content.location.reload(); 1.129 +} 1.130 + 1.131 +function testXhrGet() 1.132 +{ 1.133 + requestCallback = function() { 1.134 + ok(lastRequest, "testXhrGet() was logged"); 1.135 + is(lastRequest.request.method, "GET", "Method is correct"); 1.136 + ok(!lastRequest.request.postData.text, "No request body was sent"); 1.137 + ok(!lastRequest.discardRequestBody, "Request body was not discarded"); 1.138 + is(lastRequest.response.content.text, TEST_DATA_JSON_CONTENT, 1.139 + "Response is correct"); 1.140 + 1.141 + lastRequest = null; 1.142 + requestCallback = null; 1.143 + executeSoon(testXhrPost); 1.144 + }; 1.145 + 1.146 + // Start the XMLHttpRequest() GET test. 1.147 + content.wrappedJSObject.testXhrGet(); 1.148 +} 1.149 + 1.150 +function testXhrPost() 1.151 +{ 1.152 + requestCallback = function() { 1.153 + ok(lastRequest, "testXhrPost() was logged"); 1.154 + is(lastRequest.request.method, "POST", "Method is correct"); 1.155 + is(lastRequest.request.postData.text, "Hello world!", 1.156 + "Request body was logged"); 1.157 + is(lastRequest.response.content.text, TEST_DATA_JSON_CONTENT, 1.158 + "Response is correct"); 1.159 + 1.160 + lastRequest = null; 1.161 + requestCallback = null; 1.162 + executeSoon(testFormSubmission); 1.163 + }; 1.164 + 1.165 + // Start the XMLHttpRequest() POST test. 1.166 + content.wrappedJSObject.testXhrPost(); 1.167 +} 1.168 + 1.169 +function testFormSubmission() 1.170 +{ 1.171 + // Start the form submission test. As the form is submitted, the page is 1.172 + // loaded again. Bind to the load event to catch when this is done. 1.173 + requestCallback = function() { 1.174 + ok(lastRequest, "testFormSubmission() was logged"); 1.175 + is(lastRequest.request.method, "POST", "Method is correct"); 1.176 + isnot(lastRequest.request.postData.text. 1.177 + indexOf("Content-Type: application/x-www-form-urlencoded"), -1, 1.178 + "Content-Type is correct"); 1.179 + isnot(lastRequest.request.postData.text. 1.180 + indexOf("Content-Length: 20"), -1, "Content-length is correct"); 1.181 + isnot(lastRequest.request.postData.text. 1.182 + indexOf("name=foo+bar&age=144"), -1, "Form data is correct"); 1.183 + is(lastRequest.response.content.text.indexOf("<!DOCTYPE HTML>"), 0, 1.184 + "Response body's beginning is okay"); 1.185 + 1.186 + executeSoon(testNetworkPanel); 1.187 + }; 1.188 + 1.189 + let form = content.document.querySelector("form"); 1.190 + ok(form, "we have the HTML form"); 1.191 + form.submit(); 1.192 +} 1.193 + 1.194 +function testNetworkPanel() 1.195 +{ 1.196 + // Open the NetworkPanel. The functionality of the NetworkPanel is tested 1.197 + // within separate test files. 1.198 + let networkPanel = hud.ui.openNetworkPanel(hud.ui.filterBox, lastRequest); 1.199 + 1.200 + networkPanel.panel.addEventListener("popupshown", function onPopupShown() { 1.201 + networkPanel.panel.removeEventListener("popupshown", onPopupShown, true); 1.202 + 1.203 + is(hud.ui.filterBox._netPanel, networkPanel, 1.204 + "Network panel stored on anchor node"); 1.205 + ok(true, "NetworkPanel was opened"); 1.206 + 1.207 + // All tests are done. Shutdown. 1.208 + networkPanel.panel.hidePopup(); 1.209 + lastRequest = null; 1.210 + HUDService.lastFinishedRequest.callback = null; 1.211 + executeSoon(finishTest); 1.212 + }, true); 1.213 +} 1.214 +