summaryrefslogtreecommitdiff
path: root/toolkit/devtools/netmonitor/test/browser_net_security-tab-visibility.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/devtools/netmonitor/test/browser_net_security-tab-visibility.js')
-rw-r--r--toolkit/devtools/netmonitor/test/browser_net_security-tab-visibility.js111
1 files changed, 111 insertions, 0 deletions
diff --git a/toolkit/devtools/netmonitor/test/browser_net_security-tab-visibility.js b/toolkit/devtools/netmonitor/test/browser_net_security-tab-visibility.js
new file mode 100644
index 000000000..bc905a5ec
--- /dev/null
+++ b/toolkit/devtools/netmonitor/test/browser_net_security-tab-visibility.js
@@ -0,0 +1,111 @@
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+/**
+ * Test that security details tab is visible only when it should.
+ */
+
+add_task(function* () {
+ const TEST_DATA = [
+ {
+ desc: "http request",
+ uri: "http://example.com" + CORS_SJS_PATH,
+ visibleOnNewEvent: false,
+ visibleOnSecurityInfo: false,
+ visibleOnceComplete: false,
+ }, {
+ desc: "working https request",
+ uri: "https://example.com" + CORS_SJS_PATH,
+ visibleOnNewEvent: false,
+ visibleOnSecurityInfo: true,
+ visibleOnceComplete: true,
+ }, {
+ desc: "broken https request",
+ uri: "https://nocert.example.com",
+ isBroken: true,
+ visibleOnNewEvent: false,
+ visibleOnSecurityInfo: true,
+ visibleOnceComplete: true,
+ }
+ ];
+
+ let [tab, debuggee, monitor] = yield initNetMonitor(CUSTOM_GET_URL);
+ let { $, EVENTS, NetMonitorView } = monitor.panelWin;
+ let { RequestsMenu } = NetMonitorView;
+ RequestsMenu.lazyUpdate = false;
+
+ for (let testcase of TEST_DATA) {
+ info("Testing Security tab visibility for " + testcase.desc);
+ let onNewItem = monitor.panelWin.once(EVENTS.NETWORK_EVENT);
+ let onSecurityInfo = monitor.panelWin.once(EVENTS.RECEIVED_SECURITY_INFO);
+ let onComplete = testcase.isBroken ?
+ waitForSecurityBrokenNetworkEvent() :
+ waitForNetworkEvents(monitor, 1);
+
+ let tab = $("#security-tab");
+
+ info("Performing a request to " + testcase.uri);
+ debuggee.performRequests(1, testcase.uri);
+
+ info("Waiting for new network event.");
+ yield onNewItem;
+
+ info("Selecting the request.");
+ RequestsMenu.selectedIndex = 0;
+
+ is(RequestsMenu.selectedItem.attachment.securityState, undefined,
+ "Security state has not yet arrived.");
+ is(tab.hidden, !testcase.visibleOnNewEvent,
+ "Security tab is " +
+ (testcase.visibleOnNewEvent ? "visible" : "hidden") +
+ " after new request was added to the menu.");
+
+ info("Waiting for security information to arrive.");
+ yield onSecurityInfo;
+
+ ok(RequestsMenu.selectedItem.attachment.securityState,
+ "Security state arrived.");
+ is(tab.hidden, !testcase.visibleOnSecurityInfo,
+ "Security tab is " +
+ (testcase.visibleOnSecurityInfo ? "visible" : "hidden") +
+ " after security information arrived.");
+
+ info("Waiting for request to complete.");
+ yield onComplete;
+ is(tab.hidden, !testcase.visibleOnceComplete,
+ "Security tab is " +
+ (testcase.visibleOnceComplete ? "visible" : "hidden") +
+ " after request has been completed.");
+
+ info("Clearing requests.");
+ RequestsMenu.clear();
+ }
+
+ yield teardown(monitor);
+
+ /**
+ * Returns a promise that's resolved once a request with security issues is
+ * completed.
+ */
+ function waitForSecurityBrokenNetworkEvent() {
+ let awaitedEvents = [
+ "UPDATING_REQUEST_HEADERS",
+ "RECEIVED_REQUEST_HEADERS",
+ "UPDATING_REQUEST_COOKIES",
+ "RECEIVED_REQUEST_COOKIES",
+ "STARTED_RECEIVING_RESPONSE",
+ "UPDATING_RESPONSE_CONTENT",
+ "RECEIVED_RESPONSE_CONTENT",
+ "UPDATING_EVENT_TIMINGS",
+ "RECEIVED_EVENT_TIMINGS",
+ ];
+
+ let promises = awaitedEvents.map((event) => {
+ return monitor.panelWin.once(EVENTS[event]);
+ });
+
+ return Promise.all(promises);
+ }
+});