summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/test/browser_net_autoscroll.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_autoscroll.js')
-rw-r--r--devtools/client/netmonitor/test/browser_net_autoscroll.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_autoscroll.js b/devtools/client/netmonitor/test/browser_net_autoscroll.js
new file mode 100644
index 000000000..9abb3fd17
--- /dev/null
+++ b/devtools/client/netmonitor/test/browser_net_autoscroll.js
@@ -0,0 +1,75 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Bug 863102 - Automatically scroll down upon new network requests.
+ */
+add_task(function* () {
+ requestLongerTimeout(2);
+
+ let { monitor } = yield initNetMonitor(INFINITE_GET_URL);
+ let win = monitor.panelWin;
+ let topNode = win.document.getElementById("requests-menu-contents");
+ let requestsContainer = topNode.getElementsByTagName("scrollbox")[0];
+ ok(!!requestsContainer, "Container element exists as expected.");
+
+ // (1) Check that the scroll position is maintained at the bottom
+ // when the requests overflow the vertical size of the container.
+ yield waitForRequestsToOverflowContainer();
+ yield waitForScroll();
+ ok(scrolledToBottom(requestsContainer), "Scrolled to bottom on overflow.");
+
+ // (2) Now set the scroll position somewhere in the middle and check
+ // that additional requests do not change the scroll position.
+ let children = requestsContainer.childNodes;
+ let middleNode = children.item(children.length / 2);
+ middleNode.scrollIntoView();
+ ok(!scrolledToBottom(requestsContainer), "Not scrolled to bottom.");
+ // save for comparison later
+ let scrollTop = requestsContainer.scrollTop;
+ yield waitForNetworkEvents(monitor, 8);
+ yield waitSomeTime();
+ is(requestsContainer.scrollTop, scrollTop, "Did not scroll.");
+
+ // (3) Now set the scroll position back at the bottom and check that
+ // additional requests *do* cause the container to scroll down.
+ requestsContainer.scrollTop = requestsContainer.scrollHeight;
+ ok(scrolledToBottom(requestsContainer), "Set scroll position to bottom.");
+ yield waitForNetworkEvents(monitor, 8);
+ yield waitForScroll();
+ ok(scrolledToBottom(requestsContainer), "Still scrolled to bottom.");
+
+ // (4) Now select an item in the list and check that additional requests
+ // do not change the scroll position.
+ monitor.panelWin.NetMonitorView.RequestsMenu.selectedIndex = 0;
+ yield waitForNetworkEvents(monitor, 8);
+ yield waitSomeTime();
+ is(requestsContainer.scrollTop, 0, "Did not scroll.");
+
+ // Done: clean up.
+ yield teardown(monitor);
+
+ function* waitForRequestsToOverflowContainer() {
+ while (true) {
+ yield waitForNetworkEvents(monitor, 1);
+ if (requestsContainer.scrollHeight > requestsContainer.clientHeight) {
+ return;
+ }
+ }
+ }
+
+ function scrolledToBottom(element) {
+ return element.scrollTop + element.clientHeight >= element.scrollHeight;
+ }
+
+ function waitSomeTime() {
+ // Wait to make sure no scrolls happen
+ return wait(50);
+ }
+
+ function waitForScroll() {
+ return monitor._view.RequestsMenu.widget.once("scroll-to-bottom");
+ }
+});