| // META: global=window,worker |
| // META: script=/common/get-host-info.sub.js |
| // META: script=resources/webtransport-test-helpers.sub.js |
| |
| promise_test(async t => { |
| const wt = new WebTransport(webtransport_url('custom-response.py?:status=200')); |
| await wt.ready; |
| }, 'WebTransport session is established with status code 200'); |
| |
| promise_test(async t => { |
| const wt = new WebTransport(webtransport_url('custom-response.py?:status=204')); |
| await wt.ready; |
| }, 'WebTransport session is established with status code 204'); |
| |
| promise_test(async t => { |
| const wt = new WebTransport(webtransport_url('custom-response.py?:status=301')); |
| // Sadly we cannot use promise_rejects_dom as the error constructor is |
| // WebTransportError rather than DOMException. Ditto below. |
| // We get a possible error, and then make sure wt.closed is rejected with it. |
| const e = await wt.ready.catch(e => e); |
| await promise_rejects_exactly(t, e, wt.closed, 'closed promise should be rejected'); |
| await promise_rejects_exactly(t, e, wt.ready, 'ready promise shoud be rejected'); |
| assert_true(e instanceof WebTransportError); |
| assert_equals(e.source, 'session', 'source'); |
| assert_equals(e.streamErrorCode, null, 'streamErrorCode'); |
| }, 'WebTransport session establishment fails with status code 301'); |
| |
| promise_test(async t => { |
| const wt = new WebTransport(webtransport_url('custom-response.py?:status=401')); |
| const e = await wt.ready.catch(e => e); |
| await promise_rejects_exactly(t, e, wt.closed, 'closed promise should be rejected'); |
| await promise_rejects_exactly(t, e, wt.ready, 'ready promise shoud be rejected'); |
| assert_true(e instanceof WebTransportError); |
| assert_equals(e.source, 'session', 'source'); |
| assert_equals(e.streamErrorCode, null, 'streamErrorCode'); |
| }, 'WebTransport session establishment with status code 401'); |
| |
| promise_test(async t => { |
| const wt = new WebTransport(webtransport_url('custom-response.py?:status=404')); |
| const e = await wt.ready.catch(e => e); |
| await promise_rejects_exactly(t, e, wt.closed, 'closed promise should be rejected'); |
| await promise_rejects_exactly(t, e, wt.ready, 'ready promise shoud be rejected'); |
| assert_true(e instanceof WebTransportError); |
| assert_equals(e.source, 'session', 'source'); |
| assert_equals(e.streamErrorCode, null, 'streamErrorCode'); |
| }, 'WebTransport session establishment fails with status code 404'); |
| |
| promise_test(async t => { |
| // Create WebTransport session. |
| const wt = new WebTransport(webtransport_url('echo-request-headers.py')); |
| await wt.ready; |
| |
| // Read incoming unidirectional stream for echoed request headers. |
| const streams = await wt.incomingUnidirectionalStreams; |
| |
| const stream_reader = streams.getReader(); |
| const { value: recv_stream } = await stream_reader.read(); |
| stream_reader.releaseLock(); |
| |
| const request_headers = await read_stream_as_json(recv_stream); |
| |
| // Check the standard request headers. |
| check_and_remove_standard_headers(request_headers); |
| }, 'Echo back request headers'); |
| |
| promise_test(async t => { |
| // Create WebTransport session, and attach "Set-Cookie: foo=bar" to the response of |
| // the handshake. |
| const encodedSetCookie = encodeURIComponent('foo=bar'); |
| let wt = new WebTransport(webtransport_url('custom-response.py?set-cookie=' + encodedSetCookie)); |
| await wt.ready; |
| |
| wt = new WebTransport(webtransport_url('echo-request-headers.py')); |
| await wt.ready; |
| |
| // Read incoming unidirectional stream for echoed request headers. |
| const streams = await wt.incomingUnidirectionalStreams; |
| |
| const stream_reader = streams.getReader(); |
| const { value: recv_stream } = await stream_reader.read(); |
| stream_reader.releaseLock(); |
| |
| const request_headers = await read_stream_as_json(recv_stream); |
| |
| // Check cookie header is not echoed back. |
| check_and_remove_standard_headers(request_headers); |
| assert_equals(request_headers['cookie'], undefined); |
| }, 'Cookie header is not echoed back'); |