Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/* import-globals-from head_cookies.js */
let WebTransportListener = function () {};
WebTransportListener.prototype = {
onSessionReady(sessionId) {
info("SessionId " + sessionId);
this.ready();
},
onSessionClosed(errorCode, reason) {
info("Error: " + errorCode + " reason: " + reason);
if (this.closed) {
this.closed();
}
},
onIncomingBidirectionalStreamAvailable(stream) {
info("got incoming bidirectional stream");
this.streamAvailable(stream);
},
onIncomingUnidirectionalStreamAvailable(stream) {
info("got incoming unidirectional stream");
this.streamAvailable(stream);
},
onDatagramReceived(data) {
info("got datagram");
if (this.onDatagram) {
this.onDatagram(data);
}
},
onMaxDatagramSize(size) {
info("max datagram size: " + size);
if (this.onMaxDatagramSize) {
this.onMaxDatagramSize(size);
}
},
onOutgoingDatagramOutCome(id, outcome) {
if (this.onDatagramOutcome) {
this.onDatagramOutcome({ id, outcome });
}
},
QueryInterface: ChromeUtils.generateQI(["WebTransportSessionEventListener"]),
};
function WebTransportStreamCallback() {}
WebTransportStreamCallback.prototype = {
QueryInterface: ChromeUtils.generateQI(["nsIWebTransportStreamCallback"]),
onBidirectionalStreamReady(aStream) {
Assert.ok(aStream != null);
this.finish(aStream);
},
onUnidirectionalStreamReady(aStream) {
Assert.ok(aStream != null);
this.finish(aStream);
},
onError(aError) {
this.finish(aError);
},
};
function StreamStatsCallback() {}
StreamStatsCallback.prototype = {
QueryInterface: ChromeUtils.generateQI([
"nsIWebTransportStreamStatsCallback",
]),
onSendStatsAvailable(aStats) {
Assert.ok(aStats != null);
this.finish(aStats);
},
onReceiveStatsAvailable(aStats) {
Assert.ok(aStats != null);
this.finish(aStats);
},
};
function inputStreamReader() {}
inputStreamReader.prototype = {
QueryInterface: ChromeUtils.generateQI(["nsIInputStreamCallback"]),
onInputStreamReady(input) {
let data = NetUtil.readInputStreamToString(input, input.available());
this.finish(data);
},
};
function streamCreatePromise(transport, bidi) {
return new Promise(resolve => {
let listener = new WebTransportStreamCallback().QueryInterface(
Ci.nsIWebTransportStreamCallback
);
listener.finish = resolve;
if (bidi) {
transport.createOutgoingBidirectionalStream(listener);
} else {
transport.createOutgoingUnidirectionalStream(listener);
}
});
}
function sendStreamStatsPromise(stream) {
return new Promise(resolve => {
let listener = new StreamStatsCallback().QueryInterface(
Ci.nsIWebTransportStreamStatsCallback
);
listener.finish = resolve;
stream.QueryInterface(Ci.nsIWebTransportSendStream);
stream.getSendStreamStats(listener);
});
}
function receiveStreamStatsPromise(stream) {
return new Promise(resolve => {
let listener = new StreamStatsCallback().QueryInterface(
Ci.nsIWebTransportStreamStatsCallback
);
listener.finish = resolve;
stream.QueryInterface(Ci.nsIWebTransportReceiveStream);
stream.getReceiveStreamStats(listener);
});
}