function bytesFromString(str) { returnnew TextEncoder().encode(str);
}
add_task(async function test_wt_datagram() {
let webTransport = NetUtil.newWebTransport();
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
let pReady = new Promise(resolve => {
listener.ready = resolve;
});
let pSize = new Promise(resolve => {
listener.onMaxDatagramSize = resolve;
});
let pOutcome = new Promise(resolve => {
listener.onDatagramOutcome = resolve;
});
add_task(async function test_connect_wt() {
let webTransport = NetUtil.newWebTransport();
await new Promise(resolve => {
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
listener.ready = resolve;
add_task(async function test_reject() {
let webTransport = NetUtil.newWebTransport();
await new Promise(resolve => {
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
listener.closed = resolve;
async function test_closed(path) {
let webTransport = NetUtil.newWebTransport();
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
let pReady = new Promise(resolve => {
listener.ready = resolve;
});
let pClose = new Promise(resolve => {
listener.closed = resolve;
});
webTransport.asyncConnect(
NetUtil.newURI(`https://${host}${path}`), true,
[],
Services.scriptSecurityManager.getSystemPrincipal(),
Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
listener
);
await pReady;
await pClose;
}
add_task(async function test_closed_0ms() {
await test_closed("/closeafter0ms");
});
add_task(async function test_closed_100ms() {
await test_closed("/closeafter100ms");
});
add_task(async function test_wt_stream_create() {
let webTransport = NetUtil.newWebTransport().QueryInterface(
Ci.nsIWebTransport
);
await new Promise(resolve => {
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
listener.ready = resolve;
add_task(async function test_wt_stream_send_and_stats() {
let webTransport = NetUtil.newWebTransport().QueryInterface(
Ci.nsIWebTransport
);
await new Promise(resolve => {
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
listener.ready = resolve;
let stream = await streamCreatePromise(webTransport, false);
let outputStream = stream.outputStream;
let data = "1234567890ABC";
outputStream.write(data, data.length);
// We need some time to send the packet out. // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
await new Promise(resolve => setTimeout(resolve, 2000));
let stats = await sendStreamStatsPromise(stream); Assert.equal(stats.bytesSent, data.length);
webTransport.closeSession(0, "");
});
add_task(async function test_wt_receive_stream_and_stats() {
let webTransport = NetUtil.newWebTransport().QueryInterface(
Ci.nsIWebTransport
);
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
let pReady = new Promise(resolve => {
listener.ready = resolve;
});
let pStreamReady = new Promise(resolve => {
listener.streamAvailable = resolve;
});
webTransport.asyncConnect(
NetUtil.newURI(`https://${host}/create_unidi_stream_and_hello`), true,
[],
Services.scriptSecurityManager.getSystemPrincipal(),
Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
listener
);
await pReady;
let stream = await pStreamReady;
let data = await new Promise(resolve => {
let handler = new inputStreamReader().QueryInterface(
Ci.nsIInputStreamCallback
);
handler.finish = resolve;
let inputStream = stream.inputStream;
inputStream.asyncWait(handler, 0, 0, Services.tm.currentThread);
});
let stats = await receiveStreamStatsPromise(stream); Assert.equal(stats.bytesReceived, data.length);
stream.sendStopSending(0);
webTransport.closeSession(0, "");
});
add_task(async function test_wt_outgoing_bidi_stream() {
let webTransport = NetUtil.newWebTransport().QueryInterface(
Ci.nsIWebTransport
);
await new Promise(resolve => {
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
listener.ready = resolve;
let stream = await streamCreatePromise(webTransport, true);
let outputStream = stream.outputStream;
let data = "1234567";
outputStream.write(data, data.length);
let received = await new Promise(resolve => {
let handler = new inputStreamReader().QueryInterface(
Ci.nsIInputStreamCallback
);
handler.finish = resolve;
let inputStream = stream.inputStream;
inputStream.asyncWait(handler, 0, 0, Services.tm.currentThread);
});
add_task(async function test_wt_incoming_bidi_stream() {
let webTransport = NetUtil.newWebTransport().QueryInterface(
Ci.nsIWebTransport
);
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
let pReady = new Promise(resolve => {
listener.ready = resolve;
});
let pStreamReady = new Promise(resolve => {
listener.streamAvailable = resolve;
});
webTransport.asyncConnect(
NetUtil.newURI(`https://${host}/create_bidi_stream`), true,
[],
Services.scriptSecurityManager.getSystemPrincipal(),
Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
listener
);
await pReady;
let stream = await pStreamReady;
let outputStream = stream.outputStream;
let data = "12345678";
outputStream.write(data, data.length);
let received = await new Promise(resolve => {
let handler = new inputStreamReader().QueryInterface(
Ci.nsIInputStreamCallback
);
handler.finish = resolve;
let inputStream = stream.inputStream;
inputStream.asyncWait(handler, 0, 0, Services.tm.currentThread);
});
async function createWebTransportAndConnect() {
let webTransport = NetUtil.newWebTransport();
await new Promise(resolve => {
let listener = new WebTransportListener().QueryInterface(
Ci.WebTransportSessionEventListener
);
listener.ready = resolve;
add_task(async function test_multple_webtransport_connnection() {
let webTransports = []; for (let i = 0; i < 3; i++) {
let transport = await createWebTransportAndConnect();
webTransports.push(transport);
}
let first = webTransports[0];
await streamCreatePromise(first, true);
for (let i = 0; i < 3; i++) {
webTransports[i].closeSession(0, "");
}
});
Messung V0.5
¤ Dauer der Verarbeitung: 0.20 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.