michael@0: /* vim:set ts=2 sw=2 sts=2 et: */ michael@0: /* ***** BEGIN LICENSE BLOCK ***** michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: * michael@0: * Contributor(s): michael@0: * Julian Viereck michael@0: * Patrick Walton michael@0: * Mihai Șucan michael@0: * michael@0: * ***** END LICENSE BLOCK ***** */ michael@0: michael@0: // Tests that network log messages bring up the network panel. michael@0: michael@0: const TEST_NETWORK_REQUEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-network-request.html"; michael@0: michael@0: const TEST_IMG = "http://example.com/browser/browser/devtools/webconsole/test/test-image.png"; michael@0: michael@0: const TEST_DATA_JSON_CONTENT = michael@0: '{ id: "test JSON data", myArray: [ "foo", "bar", "baz", "biff" ] }'; michael@0: michael@0: let lastRequest = null; michael@0: let requestCallback = null; michael@0: michael@0: function test() michael@0: { michael@0: addTab("data:text/html;charset=utf-8,Web Console network logging tests"); michael@0: michael@0: browser.addEventListener("load", function onLoad() { michael@0: browser.removeEventListener("load", onLoad, true); michael@0: michael@0: openConsole(null, function(aHud) { michael@0: hud = aHud; michael@0: michael@0: HUDService.lastFinishedRequest.callback = requestCallbackWrapper; michael@0: michael@0: executeSoon(testPageLoad); michael@0: }); michael@0: }, true); michael@0: } michael@0: michael@0: function requestCallbackWrapper(aRequest) michael@0: { michael@0: lastRequest = aRequest; michael@0: michael@0: hud.ui.webConsoleClient.getResponseContent(lastRequest.actor, michael@0: function(aResponse) { michael@0: lastRequest.response.content = aResponse.content; michael@0: lastRequest.discardResponseBody = aResponse.contentDiscarded; michael@0: michael@0: hud.ui.webConsoleClient.getRequestPostData(lastRequest.actor, michael@0: function(aResponse) { michael@0: lastRequest.request.postData = aResponse.postData; michael@0: lastRequest.discardRequestBody = aResponse.postDataDiscarded; michael@0: michael@0: if (requestCallback) { michael@0: requestCallback(); michael@0: } michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: function testPageLoad() michael@0: { michael@0: requestCallback = function() { michael@0: // Check if page load was logged correctly. michael@0: ok(lastRequest, "Page load was logged"); michael@0: michael@0: is(lastRequest.request.url, TEST_NETWORK_REQUEST_URI, michael@0: "Logged network entry is page load"); michael@0: is(lastRequest.request.method, "GET", "Method is correct"); michael@0: ok(!lastRequest.request.postData.text, "No request body was stored"); michael@0: ok(lastRequest.discardRequestBody, "Request body was discarded"); michael@0: ok(!lastRequest.response.content.text, "No response body was stored"); michael@0: ok(lastRequest.discardResponseBody, "Response body was discarded"); michael@0: michael@0: lastRequest = null; michael@0: requestCallback = null; michael@0: executeSoon(testPageLoadBody); michael@0: }; michael@0: michael@0: content.location = TEST_NETWORK_REQUEST_URI; michael@0: } michael@0: michael@0: function testPageLoadBody() michael@0: { michael@0: // Turn on logging of request bodies and check again. michael@0: hud.ui.setSaveRequestAndResponseBodies(true).then(() => { michael@0: ok(hud.ui._saveRequestAndResponseBodies, michael@0: "The saveRequestAndResponseBodies property was successfully set."); michael@0: michael@0: testPageLoadBodyAfterSettingUpdate(); michael@0: }); michael@0: } michael@0: michael@0: function testPageLoadBodyAfterSettingUpdate() michael@0: { michael@0: let loaded = false; michael@0: let requestCallbackInvoked = false; michael@0: michael@0: requestCallback = function() { michael@0: ok(lastRequest, "Page load was logged again"); michael@0: ok(!lastRequest.discardResponseBody, "Response body was not discarded"); michael@0: is(lastRequest.response.content.text.indexOf(""), 0, michael@0: "Response body's beginning is okay"); michael@0: michael@0: lastRequest = null; michael@0: requestCallback = null; michael@0: requestCallbackInvoked = true; michael@0: michael@0: if (loaded) { michael@0: executeSoon(testXhrGet); michael@0: } michael@0: }; michael@0: michael@0: browser.addEventListener("load", function onLoad() { michael@0: browser.removeEventListener("load", onLoad, true); michael@0: loaded = true; michael@0: michael@0: if (requestCallbackInvoked) { michael@0: executeSoon(testXhrGet); michael@0: } michael@0: }, true); michael@0: michael@0: content.location.reload(); michael@0: } michael@0: michael@0: function testXhrGet() michael@0: { michael@0: requestCallback = function() { michael@0: ok(lastRequest, "testXhrGet() was logged"); michael@0: is(lastRequest.request.method, "GET", "Method is correct"); michael@0: ok(!lastRequest.request.postData.text, "No request body was sent"); michael@0: ok(!lastRequest.discardRequestBody, "Request body was not discarded"); michael@0: is(lastRequest.response.content.text, TEST_DATA_JSON_CONTENT, michael@0: "Response is correct"); michael@0: michael@0: lastRequest = null; michael@0: requestCallback = null; michael@0: executeSoon(testXhrPost); michael@0: }; michael@0: michael@0: // Start the XMLHttpRequest() GET test. michael@0: content.wrappedJSObject.testXhrGet(); michael@0: } michael@0: michael@0: function testXhrPost() michael@0: { michael@0: requestCallback = function() { michael@0: ok(lastRequest, "testXhrPost() was logged"); michael@0: is(lastRequest.request.method, "POST", "Method is correct"); michael@0: is(lastRequest.request.postData.text, "Hello world!", michael@0: "Request body was logged"); michael@0: is(lastRequest.response.content.text, TEST_DATA_JSON_CONTENT, michael@0: "Response is correct"); michael@0: michael@0: lastRequest = null; michael@0: requestCallback = null; michael@0: executeSoon(testFormSubmission); michael@0: }; michael@0: michael@0: // Start the XMLHttpRequest() POST test. michael@0: content.wrappedJSObject.testXhrPost(); michael@0: } michael@0: michael@0: function testFormSubmission() michael@0: { michael@0: // Start the form submission test. As the form is submitted, the page is michael@0: // loaded again. Bind to the load event to catch when this is done. michael@0: requestCallback = function() { michael@0: ok(lastRequest, "testFormSubmission() was logged"); michael@0: is(lastRequest.request.method, "POST", "Method is correct"); michael@0: isnot(lastRequest.request.postData.text. michael@0: indexOf("Content-Type: application/x-www-form-urlencoded"), -1, michael@0: "Content-Type is correct"); michael@0: isnot(lastRequest.request.postData.text. michael@0: indexOf("Content-Length: 20"), -1, "Content-length is correct"); michael@0: isnot(lastRequest.request.postData.text. michael@0: indexOf("name=foo+bar&age=144"), -1, "Form data is correct"); michael@0: is(lastRequest.response.content.text.indexOf(""), 0, michael@0: "Response body's beginning is okay"); michael@0: michael@0: executeSoon(testNetworkPanel); michael@0: }; michael@0: michael@0: let form = content.document.querySelector("form"); michael@0: ok(form, "we have the HTML form"); michael@0: form.submit(); michael@0: } michael@0: michael@0: function testNetworkPanel() michael@0: { michael@0: // Open the NetworkPanel. The functionality of the NetworkPanel is tested michael@0: // within separate test files. michael@0: let networkPanel = hud.ui.openNetworkPanel(hud.ui.filterBox, lastRequest); michael@0: michael@0: networkPanel.panel.addEventListener("popupshown", function onPopupShown() { michael@0: networkPanel.panel.removeEventListener("popupshown", onPopupShown, true); michael@0: michael@0: is(hud.ui.filterBox._netPanel, networkPanel, michael@0: "Network panel stored on anchor node"); michael@0: ok(true, "NetworkPanel was opened"); michael@0: michael@0: // All tests are done. Shutdown. michael@0: networkPanel.panel.hidePopup(); michael@0: lastRequest = null; michael@0: HUDService.lastFinishedRequest.callback = null; michael@0: executeSoon(finishTest); michael@0: }, true); michael@0: } michael@0: