browser_net_duration-sort.js (5476B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 /** 7 * Test if initial and pending requests are sorted correctly in the Duration column. 8 */ 9 10 add_task(async function () { 11 const { monitor } = await initNetMonitor(HTTPS_SIMPLE_URL, { 12 requestCount: 1, 13 }); 14 const { document, store, windowRequire } = monitor.panelWin; 15 const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); 16 store.dispatch(Actions.batchEnable(false)); 17 18 const delay1 = 50; 19 const delay2 = 500; 20 const delay3 = 1500; 21 const delay4 = 2500; 22 23 info("Starting test... "); 24 info("Sending initial requests."); 25 const initialRequests = [ 26 `sjs_delay-test-server.sjs?delay=${delay1}`, 27 `sjs_delay-test-server.sjs?delay=${delay2}`, 28 `sjs_delay-test-server.sjs?delay=${delay3}`, 29 ]; 30 let waitForResponse = waitForNetworkEvents(monitor, 3); 31 sendRequests(initialRequests); 32 await waitForResponse; 33 34 info("Testing initial items duration sort, ascending."); 35 EventUtils.sendMouseEvent( 36 { type: "click" }, 37 document.querySelector("#requests-list-duration-button") 38 ); 39 await testInitialContents([0, 1, 2]); 40 41 info("Testing initial items duration sort, descending."); 42 EventUtils.sendMouseEvent( 43 { type: "click" }, 44 document.querySelector("#requests-list-duration-button") 45 ); 46 await testInitialContents([2, 1, 0]); 47 48 info("Sending new requests."); 49 const newRequests = [ 50 "sjs_long-polling-server.sjs", 51 `sjs_delay-test-server.sjs?delay=${delay4}`, 52 ]; 53 waitForResponse = waitForNetworkEvents(monitor, 1, { 54 expectedEventTimings: 1, 55 }); 56 sendRequests(newRequests); 57 await waitForResponse; 58 59 info("Testing pending items duration sort, ascending."); 60 EventUtils.sendMouseEvent( 61 { type: "click" }, 62 document.querySelector("#requests-list-duration-button") 63 ); 64 await testPendingContents([0, 1, 2, 3, 4]); 65 66 info("Testing pending items duration sort, descending."); 67 EventUtils.sendMouseEvent( 68 { type: "click" }, 69 document.querySelector("#requests-list-duration-button") 70 ); 71 await testPendingContents([4, 3, 2, 1, 0]); 72 73 info("Complete pending request."); 74 waitForResponse = waitForNetworkEvents(monitor, 1, { 75 expectedPayloadReady: 2, 76 }); 77 sendRequests(["sjs_long-polling-server.sjs?unblock"]); 78 await waitForResponse; 79 80 info("Testing resolved items duration sort, ascending."); 81 EventUtils.sendMouseEvent( 82 { type: "click" }, 83 document.querySelector("#requests-list-duration-button") 84 ); 85 await testResolvedContents([0, 1, 2, 3, 4]); 86 87 info("Testing resolved items duration sort, descending."); 88 EventUtils.sendMouseEvent( 89 { type: "click" }, 90 document.querySelector("#requests-list-duration-button") 91 ); 92 await testResolvedContents([4, 3, 2, 1, 0]); 93 94 return teardown(monitor); 95 96 async function sendRequests(urls) { 97 await SpecialPowers.spawn(gBrowser.selectedBrowser, [urls], _urls => { 98 _urls.forEach(u => content.fetch(u)); 99 }); 100 } 101 102 async function testInitialContents([a, b, c]) { 103 const requestItems = [ 104 ...document.querySelectorAll(".request-list-item .requests-list-url"), 105 ].map(el => el.innerText); 106 107 is( 108 requestItems[a], 109 DELAY_SJS + `?delay=${delay1}`, 110 `${delay1}ms request sorted correctly.` 111 ); 112 is( 113 requestItems[b], 114 DELAY_SJS + `?delay=${delay2}`, 115 `${delay2}ms request sorted correctly.` 116 ); 117 is( 118 requestItems[c], 119 DELAY_SJS + `?delay=${delay3}`, 120 `${delay3}ms request sorted correctly.` 121 ); 122 } 123 124 async function testPendingContents([a, b, c, d, e]) { 125 const requestItems = [ 126 ...document.querySelectorAll(".request-list-item .requests-list-url"), 127 ].map(el => el.innerText); 128 129 is( 130 requestItems[a], 131 DELAY_SJS + `?delay=${delay1}`, 132 `${delay1}ms request sorted correctly.` 133 ); 134 is( 135 requestItems[b], 136 DELAY_SJS + `?delay=${delay2}`, 137 `${delay2}ms request sorted correctly.` 138 ); 139 is( 140 requestItems[c], 141 DELAY_SJS + `?delay=${delay3}`, 142 `${delay3}ms request sorted correctly.` 143 ); 144 is( 145 requestItems[d], 146 DELAY_SJS + `?delay=${delay4}`, 147 `${delay4}ms request sorted correctly.` 148 ); 149 is( 150 requestItems[e], 151 "https://example.com/browser/devtools/client/netmonitor/test/sjs_long-polling-server.sjs", 152 "Pending request sorted correctly." 153 ); 154 } 155 156 async function testResolvedContents([a, b, c, d, e]) { 157 const requestItems = [ 158 ...document.querySelectorAll(".request-list-item .requests-list-url"), 159 ] 160 .map(el => el.innerText) 161 // Filter out the unblock request which might take a random time to resolve 162 .filter(text => !text.endsWith("sjs_long-polling-server.sjs?unblock")); 163 164 is( 165 requestItems[a], 166 DELAY_SJS + `?delay=${delay1}`, 167 `${delay1}ms request sorted correctly.` 168 ); 169 is( 170 requestItems[b], 171 DELAY_SJS + `?delay=${delay2}`, 172 `${delay2}ms request sorted correctly.` 173 ); 174 is( 175 requestItems[c], 176 DELAY_SJS + `?delay=${delay3}`, 177 `${delay3}ms request sorted correctly.` 178 ); 179 is( 180 requestItems[d], 181 DELAY_SJS + `?delay=${delay4}`, 182 `${delay4}ms request sorted correctly.` 183 ); 184 is( 185 requestItems[e], 186 "https://example.com/browser/devtools/client/netmonitor/test/sjs_long-polling-server.sjs", 187 "Long polling request sorted correctly." 188 ); 189 } 190 });