mirror of
https://github.com/denoland/deno.git
synced 2025-01-21 13:00:36 -05:00
fix(ext/fetch): don't throw when bodyUsed
inspect after upgrade (#27088)
Fixes https://github.com/denoland/deno/issues/27083
This commit is contained in:
parent
3a55b67815
commit
93bbbe4184
2 changed files with 59 additions and 2 deletions
|
@ -286,8 +286,13 @@ function mixinBody(prototype, bodySymbol, mimeTypeSymbol) {
|
||||||
*/
|
*/
|
||||||
get() {
|
get() {
|
||||||
webidl.assertBranded(this, prototype);
|
webidl.assertBranded(this, prototype);
|
||||||
if (this[bodySymbol] !== null) {
|
try {
|
||||||
return this[bodySymbol].consumed();
|
if (this[bodySymbol] !== null) {
|
||||||
|
return this[bodySymbol].consumed();
|
||||||
|
}
|
||||||
|
} catch (_) {
|
||||||
|
// Request is closed.
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
|
@ -4327,3 +4327,55 @@ Deno.test({
|
||||||
|
|
||||||
await server.shutdown();
|
await server.shutdown();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// https://github.com/denoland/deno/issues/27083
|
||||||
|
Deno.test(
|
||||||
|
{ permissions: { net: true } },
|
||||||
|
async function httpServerWebSocketInspectRequest() {
|
||||||
|
const ac = new AbortController();
|
||||||
|
const listeningDeferred = Promise.withResolvers<void>();
|
||||||
|
const doneDeferred = Promise.withResolvers<void>();
|
||||||
|
const server = Deno.serve({
|
||||||
|
handler: (request) => {
|
||||||
|
const {
|
||||||
|
response,
|
||||||
|
socket,
|
||||||
|
} = Deno.upgradeWebSocket(request);
|
||||||
|
|
||||||
|
socket.onopen = () => {
|
||||||
|
Deno.inspect(request); // should not throw
|
||||||
|
};
|
||||||
|
socket.onerror = (e) => {
|
||||||
|
console.error(e);
|
||||||
|
fail();
|
||||||
|
};
|
||||||
|
socket.onmessage = (m) => {
|
||||||
|
socket.send(m.data);
|
||||||
|
socket.close(1001);
|
||||||
|
};
|
||||||
|
socket.onclose = () => doneDeferred.resolve();
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
port: servePort,
|
||||||
|
signal: ac.signal,
|
||||||
|
onListen: onListen(listeningDeferred.resolve),
|
||||||
|
onError: createOnErrorCb(ac),
|
||||||
|
});
|
||||||
|
|
||||||
|
await listeningDeferred.promise;
|
||||||
|
const def = Promise.withResolvers<void>();
|
||||||
|
const ws = new WebSocket(`ws://localhost:${servePort}`);
|
||||||
|
ws.onmessage = (m) => assertEquals(m.data, "foo");
|
||||||
|
ws.onerror = (e) => {
|
||||||
|
console.error(e);
|
||||||
|
fail();
|
||||||
|
};
|
||||||
|
ws.onclose = () => def.resolve();
|
||||||
|
ws.onopen = () => ws.send("foo");
|
||||||
|
|
||||||
|
await def.promise;
|
||||||
|
await doneDeferred.promise;
|
||||||
|
ac.abort();
|
||||||
|
await server.finished;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
Loading…
Add table
Reference in a new issue