134 lines
3.4 KiB
JavaScript
134 lines
3.4 KiB
JavaScript
/* 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);
|
|
});
|
|
}
|