| // META: global=window,worker | |
| // META: script=/common/get-host-info.sub.js | |
| // META: script=resources/webtransport-test-helpers.sub.js | |
| // META: script=/common/utils.js | |
| const BAD_URLS = [ | |
| null, | |
| '', | |
| 'no-scheme', | |
| 'http://example.com/' /* scheme is wrong */, | |
| 'quic-transport://example.com/' /* scheme is wrong */, | |
| 'https:///' /* no host specified */, | |
| 'https://example.com/#failing' /* has fragment */, | |
| `https://${HOST}:999999/` /* invalid port */, | |
| ]; | |
| for (const url of BAD_URLS) { | |
| test(() => { | |
| assert_throws_dom('SyntaxError', () => new WebTransport(url), | |
| 'constructor should throw'); | |
| }, `WebTransport constructor should reject URL '${url}'`); | |
| } | |
| const OPTIONS = [ | |
| { allowPooling: true }, | |
| { requireUnreliable: true }, | |
| { allowPooling: true, requireUnreliable: true }, | |
| { congestionControl: "default" }, | |
| { congestionControl: "throughput" }, | |
| { congestionControl: "low-latency" }, | |
| { allowPooling: true, requireUnreliable: true, congestionControl: "low-latency" }, | |
| // XXX Need to test serverCertificateHashes | |
| ]; | |
| for (const options of OPTIONS) { | |
| promise_test(async t => { | |
| const id = token(); | |
| const wt = new WebTransport(webtransport_url(`client-close.py?token=${id}`), options ); | |
| await wt.ready; | |
| wt.close(); | |
| }, "WebTransport constructor should allow options " + JSON.stringify(options)); | |
| } | |
| promise_test(async t => { | |
| const wt = new WebTransport(`https://${HOST}:0/`); | |
| // Sadly we cannot use promise_rejects_dom as the error constructor is | |
| // WebTransportError rather than DOMException. | |
| // We get a possible error, and then make sure wt.ready is rejected with it. | |
| const e = await wt.ready.catch(e => e); | |
| await promise_rejects_exactly(t, e, wt.ready, 'ready should be rejected'); | |
| await promise_rejects_exactly(t, e, wt.closed, 'closed should be rejected'); | |
| assert_true(e instanceof WebTransportError); | |
| assert_equals(e.source, 'session', 'source'); | |
| assert_equals(e.streamErrorCode, null, 'streamErrorCode'); | |
| }, 'Connection to port 0 should fail'); |