Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: http3
- Manifest: devtools/shared/network-observer/test/browser/browser.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
const TEST_URL = URL_ROOT + "doc_network-observer.html";
const JSON_URL = URL_ROOT + "slow_json.sjs";
const JSON_URL2 = URL_ROOT + "slow_json.sjs?complete";
const JSON_URL3 = URL_ROOT + "slow_json.sjs?partial";
add_task(async function () {
// Test content decoding handled automatically by the network observer.
await testDecodingResponseContent({ decodeResponseBodies: true });
// Test content decoding lazily from the consumer of the event.
await testDecodingResponseContent({ decodeResponseBodies: false });
});
async function testDecodingResponseContent({ decodeResponseBodies }) {
info(
"Test response content decoding with decodeResponseBodies=" +
decodeResponseBodies
);
const tab = await addTab(TEST_URL);
const events = [];
const networkObserver = new NetworkObserver({
decodeResponseBodies,
ignoreChannelFunction: channel =>
channel.URI.spec !== JSON_URL && channel.URI.spec !== JSON_URL3,
onNetworkEvent: () => {
const owner = new ResponseContentOwner();
events.push(owner);
return owner;
},
});
registerCleanupFunction(() => networkObserver.destroy());
await SpecialPowers.spawn(
gBrowser.selectedBrowser,
[JSON_URL, JSON_URL2],
(_url, _url2) => {
const xhr = new content.wrappedJSObject.XMLHttpRequest();
xhr.addEventListener("progress", e => {
if (e.loaded > 0) {
const xhr2 = new content.wrappedJSObject.XMLHttpRequest();
xhr2.open("GET", _url2);
xhr2.send();
}
});
xhr.open("GET", _url);
xhr.send();
}
);
info("Wait for all network events to be received");
await BrowserTestUtils.waitForCondition(() => events.length >= 1);
is(events.length, 1, "Received the expected number of network events");
await BrowserTestUtils.waitForCondition(
() => events[0].hasResponseContentComplete
);
is(
events[0].isContentEncoded,
!decodeResponseBodies,
"The isContentEncoded flag has the expected value"
);
is(
await events[0].getDecodedContent(),
'"\u3042"',
"expected response content"
);
is(events[0].truncated, false, "response content should not be truncated");
await SpecialPowers.spawn(gBrowser.selectedBrowser, [JSON_URL3], _url => {
content.wrappedJSObject.fetch(_url);
});
info("Wait for all network events to be received");
await BrowserTestUtils.waitForCondition(() => events.length >= 2);
is(events.length, 2, "Received the expected number of network events");
await BrowserTestUtils.waitForCondition(
() => events[1].hasResponseContentComplete
);
is(
events[1].isContentEncoded,
!decodeResponseBodies,
"The isContentEncoded flag has the expected value"
);
is(await events[1].getDecodedContent(), '"', "expected response content");
todo_is(events[1].truncated, true, "response content would be truncated");
networkObserver.destroy();
gBrowser.removeTab(tab);
}