/* 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";
var { setTimeout } = ChromeUtils.importESModule(
"resource://gre/modules/Timer.sys.mjs"
);
add_setup(async
function () {
await http3_setup_tests(
"h3");
});
function makeChan(url) {
let chan = NetUtil.newChannel({
uri: url,
loadUsingSystemPrincipal:
true,
contentPolicyType: Ci.nsIContentPolicy.TYPE_DOCUMENT,
}).QueryInterface(Ci.nsIHttpChannel);
return chan;
}
function channelOpenPromise(chan, flags) {
return new Promise(resolve => {
function finish(req, buffer) {
resolve([req, buffer]);
}
chan.asyncOpen(
new ChannelListener(finish,
null, flags));
});
}
async
function doTestTimings() {
Services.obs.notifyObservers(
null,
"net:prune-all-connections");
// eslint-disable-next-line mozilla/no-arbitrary-setTimeout
await
new Promise(resolve => setTimeout(resolve,
1000));
let chan = makeChan(`https:
//foo.example.com`);
let [req] = await channelOpenPromise(chan);
let httpVersion =
"";
try {
httpVersion = req.protocolVersion;
}
catch (e) {}
Assert.equal(httpVersion,
"h3");
let timing = req.QueryInterface(Ci.nsITimedChannel);
Assert.greater(timing.connectStartTime,
0);
Assert.equal(timing.connectStartTime, timing.secureConnectionStartTime);
}
add_task(async
function test_connectStart_equals_secureConnectionStart() {
Services.prefs.setIntPref(
"network.http.speculative-parallel-limit",
0);
await doTestTimings();
Services.prefs.setIntPref(
"network.http.speculative-parallel-limit",
6);
await doTestTimings();
});