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