Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test the ResourceCommand API around NETWORK_EVENT_STACKTRACE
const TEST_URI = `${URL_ROOT_SSL}network_document.html`;
const REQUEST_STUB = {
code: `await fetch("/request_post_0.html", { method: "POST" });`,
expected: {
stacktraceAvailable: true,
lastFrame: {
filename:
lineNumber: 1,
columnNumber: 40,
functionName: "triggerRequest",
asyncCause: null,
},
},
};
add_task(async function () {
info("Test network stacktraces events");
const tab = await addTab(TEST_URI);
const { client, resourceCommand, targetCommand } = await initResourceCommand(
tab
);
const networkEvents = new Map();
const stackTraces = new Map();
function onResourceAvailable(resources) {
for (const resource of resources) {
if (
resource.resourceType === resourceCommand.TYPES.NETWORK_EVENT_STACKTRACE
) {
ok(
!networkEvents.has(resource.resourceId),
"The network event does not exist"
);
is(
resource.stacktraceAvailable,
REQUEST_STUB.expected.stacktraceAvailable,
"The stacktrace is available"
);
is(
JSON.stringify(resource.lastFrame),
JSON.stringify(REQUEST_STUB.expected.lastFrame),
"The last frame of the stacktrace is available"
);
stackTraces.set(resource.resourceId, true);
return;
}
if (resource.resourceType === resourceCommand.TYPES.NETWORK_EVENT) {
ok(
stackTraces.has(resource.stacktraceResourceId),
"The stack trace does exists"
);
networkEvents.set(resource.resourceId, true);
}
}
}
function onResourceUpdated() {}
await resourceCommand.watchResources(
[
resourceCommand.TYPES.NETWORK_EVENT_STACKTRACE,
resourceCommand.TYPES.NETWORK_EVENT,
],
{
onAvailable: onResourceAvailable,
onUpdated: onResourceUpdated,
}
);
await triggerNetworkRequests(tab.linkedBrowser, [REQUEST_STUB.code]);
resourceCommand.unwatchResources(
[
resourceCommand.TYPES.NETWORK_EVENT_STACKTRACE,
resourceCommand.TYPES.NETWORK_EVENT,
],
{
onAvailable: onResourceAvailable,
onUpdated: onResourceUpdated,
}
);
targetCommand.destroy();
await client.close();
BrowserTestUtils.removeTab(tab);
});