Files
sousa-gecko/devtools/client/netmonitor/test/browser_net_send-beacon.js
T
Hubert Boma Manilla fc5a8ad266 Bug 1557795 - [devtools] Start triggering multiple network events updates r=devtools-reviewers,jdescottes
Lets start triggering updates at certain keypoint in the cycle instead
batching into one update at the end.
This should depend on mechanisim for throttling resources so as not to spam the
frontend with lots of updates

Differential Revision: https://phabricator.services.mozilla.com/D247424
2025-07-01 23:01:47 +00:00

70 lines
2.2 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
/**
* Tests if beacons are handled correctly.
*/
const IFRAME_URL = EXAMPLE_URL + "html_send-beacon-late-iframe-request.html";
add_task(async function () {
const { tab, monitor } = await initNetMonitor(SEND_BEACON_URL, {
requestCount: 1,
});
const { store, windowRequire } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
const { getSortedRequests } = windowRequire(
"devtools/client/netmonitor/src/selectors/index"
);
store.dispatch(Actions.batchEnable(false));
is(
store.getState().requests.requests.length,
0,
"The requests menu should be empty."
);
// Execute requests.
await performRequests(monitor, tab, 1);
is(
store.getState().requests.requests.length,
1,
"The beacon should be recorded."
);
// Wait for updates of status, blockedReason fields
await waitForRequestData(store, ["status", "blockedReason"], null, 0);
const request = getSortedRequests(store.getState())[0];
is(request.method, "POST", "The method is correct.");
ok(request.url.endsWith("beacon_request"), "The URL is correct.");
is(request.status, "404", "The status is correct.");
is(request.blockedReason, 0, "The request is not blocked");
const onNetworkEvents = waitForNetworkEvents(monitor, 2);
await SpecialPowers.spawn(
tab.linkedBrowser,
[IFRAME_URL],
async function (url) {
const iframe = content.document.createElement("iframe");
iframe.src = url;
content.document.body.appendChild(iframe);
await new Promise(resolve => (iframe.onload = resolve));
iframe.remove();
}
);
await onNetworkEvents;
await waitForRequestData(store, ["status", "blockedReason"], null, 2);
const lateRequest = getSortedRequests(store.getState())[2];
is(lateRequest.method, "POST", "The method is correct.");
ok(lateRequest.url.endsWith("beacon_late_request"), "The URL is correct.");
is(lateRequest.status, "404", "The status is correct.");
is(lateRequest.blockedReason, 0, "The request is not blocked");
return teardown(monitor);
});