/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ // Network throttling test: check that disabling throttling allows previously // blocked requests to go back to unthrottled and complete quickly. "use strict"; const httpServer = createTestHTTPServer(); httpServer.registerPathHandler(`/`, function (request, response) { response.setStatusLine(request.httpVersion, 200, "OK"); response.write(`

Test throttling profiles

`); }); // The "data" path takes a size query parameter and will return a body of the // requested size. httpServer.registerPathHandler("/data", function (request, response) { const size = request.queryString.match(/size=(\d+)/)[1]; response.setHeader("Content-Type", "text/plain"); response.setStatusLine(request.httpVersion, 200, "OK"); const body = new Array(size * 1).join("a"); response.bodyOutputStream.write(body, body.length); }); const TEST_URI = `http://localhost:${httpServer.identity.primaryPort}/`; add_task(async function () { const { monitor } = await initNetMonitor(TEST_URI, { requestCount: 1 }); const { store, windowRequire, connector } = monitor.panelWin; const { updateNetworkThrottling } = connector; const { getSortedRequests } = windowRequire( "devtools/client/netmonitor/src/selectors/index" ); const throttleProfile = { latency: 100, download: 1, upload: 10000, }; info("Enable very slow throttling"); await updateNetworkThrottling(true, throttleProfile); // Start waiting for 2 network events. const onNetworkEvents = waitForNetworkEvents(monitor, 2); await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => { content.fetch("data?size=100"); }); info("Wait until the request is visible in the UI and then wait for 100ms"); const throttledRequest = await waitFor( () => getSortedRequests(store.getState())[0] ); await wait(100); ok(!throttledRequest.eventTimings, "Request is still not finished"); info("Disable network throttling"); await updateNetworkThrottling(false); await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => { content.fetch("data?size=100"); }); await waitForRequestData(store, ["eventTimings"]); // The throttled request should be unblocked after disabling throttling. await onNetworkEvents; const requestItem = getSortedRequests(store.getState())[1]; Assert.less( requestItem.eventTimings.timings.receive, 1000, "download reported as taking less than one second" ); await teardown(monitor); });