diff options
Diffstat (limited to 'devtools/client/netmonitor/test/browser_net_throttling_profiles.js')
-rw-r--r-- | devtools/client/netmonitor/test/browser_net_throttling_profiles.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/devtools/client/netmonitor/test/browser_net_throttling_profiles.js b/devtools/client/netmonitor/test/browser_net_throttling_profiles.js new file mode 100644 index 0000000000..707efb8189 --- /dev/null +++ b/devtools/client/netmonitor/test/browser_net_throttling_profiles.js @@ -0,0 +1,67 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test all the network throttling profiles + +"use strict"; + +requestLongerTimeout(2); + +const throttlingProfiles = require("resource://devtools/client/shared/components/throttling/profiles.js"); + +const httpServer = createTestHTTPServer(); +httpServer.registerPathHandler(`/`, function (request, response) { + response.setStatusLine(request.httpVersion, 200, "OK"); + response.write(`<meta charset=utf8><h1>Test throttling profiles</h1>`); +}); + +// 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 () { + await pushPref("devtools.cache.disabled", true); + + const { monitor } = await initNetMonitor(TEST_URI, { requestCount: 1 }); + const { store, connector, windowRequire } = monitor.panelWin; + const { updateNetworkThrottling } = connector; + + const { getSortedRequests } = windowRequire( + "devtools/client/netmonitor/src/selectors/index" + ); + + for (const profile of throttlingProfiles) { + info(`Starting test for throttling profile ${JSON.stringify(profile)}`); + + info("sending throttle request"); + await updateNetworkThrottling(true, profile); + + const onRequest = waitForNetworkEvents(monitor, 1); + await SpecialPowers.spawn(gBrowser.selectedBrowser, [profile], _profile => { + // Size must be greater than the profile download cap. + const size = _profile.download * 2; + content.fetch("data?size=" + size); + }); + await onRequest; + + info(`Wait for eventTimings for throttling profile ${profile.id}`); + await waitForRequestData(store, ["eventTimings"]); + + const requestItem = getSortedRequests(store.getState()).at(-1); + ok( + requestItem.eventTimings.timings.receive > 1000, + `Request was properly throttled for profile ${profile.id}` + ); + } + + await teardown(monitor); +}); |