diff options
| -rw-r--r-- | src/bun.js/bindings/webcore/EventFactory.cpp | 21 | ||||
| -rw-r--r-- | src/bun.js/bindings/webcore/EventHeaders.h | 4 | ||||
| -rw-r--r-- | src/bun.js/bindings/webcore/WebSocket.cpp | 56 | ||||
| -rw-r--r-- | src/bun.js/bindings/webcore/WebSocket.h | 2 | ||||
| -rw-r--r-- | src/http/websocket_http_client.zig | 3 |
5 files changed, 45 insertions, 41 deletions
diff --git a/src/bun.js/bindings/webcore/EventFactory.cpp b/src/bun.js/bindings/webcore/EventFactory.cpp index 3677b9dfe..ccb5b41b4 100644 --- a/src/bun.js/bindings/webcore/EventFactory.cpp +++ b/src/bun.js/bindings/webcore/EventFactory.cpp @@ -75,16 +75,17 @@ JSC::JSValue toJSNewlyCreated(JSC::JSGlobalObject*, JSDOMGlobalObject* globalObj case EventInterfaceType: { return createWrapper<Event>(globalObject, WTFMove(impl)); } - // case BeforeUnloadEventInterfaceType: - // return createWrapper<BeforeUnloadEvent>(globalObject, WTFMove(impl)); - // #if ENABLE(MEDIA_RECORDER) - // case BlobEventInterfaceType: - // return createWrapper<BlobEvent>(globalObject, WTFMove(impl)); - // #endif - // case ClipboardEventInterfaceType: - // return createWrapper<ClipboardEvent>(globalObject, WTFMove(impl)); - // case CloseEventInterfaceType: - // return createWrapper<CloseEvent>(globalObject, WTFMove(impl)); + // case BeforeUnloadEventInterfaceType: + // return createWrapper<BeforeUnloadEvent>(globalObject, WTFMove(impl)); + // #if ENABLE(MEDIA_RECORDER) + // case BlobEventInterfaceType: + // return createWrapper<BlobEvent>(globalObject, WTFMove(impl)); + // #endif + // case ClipboardEventInterfaceType: + // return createWrapper<ClipboardEvent>(globalObject, WTFMove(impl)); + case CloseEventInterfaceType: { + return createWrapper<CloseEvent>(globalObject, WTFMove(impl)); + } // case CompositionEventInterfaceType: // return createWrapper<CompositionEvent>(globalObject, WTFMove(impl)); // case CustomEventInterfaceType: diff --git a/src/bun.js/bindings/webcore/EventHeaders.h b/src/bun.js/bindings/webcore/EventHeaders.h index 347d333d0..6692b9234 100644 --- a/src/bun.js/bindings/webcore/EventHeaders.h +++ b/src/bun.js/bindings/webcore/EventHeaders.h @@ -74,8 +74,8 @@ // #endif // #include "ClipboardEvent.h" // #include "JSClipboardEvent.h" -// #include "CloseEvent.h" -// #include "JSCloseEvent.h" +#include "CloseEvent.h" +#include "JSCloseEvent.h" // #include "CompositionEvent.h" // #include "JSCompositionEvent.h" // #include "CustomEvent.h" diff --git a/src/bun.js/bindings/webcore/WebSocket.cpp b/src/bun.js/bindings/webcore/WebSocket.cpp index 4cfe39f95..6f70b898c 100644 --- a/src/bun.js/bindings/webcore/WebSocket.cpp +++ b/src/bun.js/bindings/webcore/WebSocket.cpp @@ -822,7 +822,7 @@ void WebSocket::didReceiveBinaryData(Vector<uint8_t>&& binaryData) // }); } -void WebSocket::didReceiveMessageError(WTF::StringImpl::StaticStringImpl* reason) +void WebSocket::didReceiveMessageError(unsigned short code, WTF::StringImpl::StaticStringImpl* reason) { LOG(Network, "WebSocket %p didReceiveErrorMessage()", this); // queueTaskKeepingObjectAlive(*this, TaskSource::WebSocket, [this, reason = WTFMove(reason)] { @@ -832,7 +832,7 @@ void WebSocket::didReceiveMessageError(WTF::StringImpl::StaticStringImpl* reason if (auto* context = scriptExecutionContext()) { this->m_pendingActivityCount++; // https://html.spec.whatwg.org/multipage/web-sockets.html#feedback-from-the-protocol:concept-websocket-closed, we should synchronously fire a close event. - dispatchEvent(CloseEvent::create(false, 0, WTF::String(reason))); + dispatchEvent(CloseEvent::create(code < 1002, code, WTF::String(reason))); this->m_pendingActivityCount--; } } @@ -955,158 +955,158 @@ void WebSocket::didFailWithErrorCode(int32_t code) // invalid_response case 1: { auto message = MAKE_STATIC_STRING_IMPL("Invalid response"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // expected_101_status_code case 2: { auto message = MAKE_STATIC_STRING_IMPL("Expected 101 status code"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // missing_upgrade_header case 3: { auto message = MAKE_STATIC_STRING_IMPL("Missing upgrade header"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // missing_connection_header case 4: { auto message = MAKE_STATIC_STRING_IMPL("Missing connection header"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // missing_websocket_accept_header case 5: { auto message = MAKE_STATIC_STRING_IMPL("Missing websocket accept header"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // invalid_upgrade_header case 6: { auto message = MAKE_STATIC_STRING_IMPL("Invalid upgrade header"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // invalid_connection_header case 7: { auto message = MAKE_STATIC_STRING_IMPL("Invalid connection header"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // invalid_websocket_version case 8: { auto message = MAKE_STATIC_STRING_IMPL("Invalid websocket version"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // mismatch_websocket_accept_header case 9: { auto message = MAKE_STATIC_STRING_IMPL("Mismatch websocket accept header"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // missing_client_protocol case 10: { auto message = MAKE_STATIC_STRING_IMPL("Missing client protocol"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // mismatch_client_protocol case 11: { auto message = MAKE_STATIC_STRING_IMPL("Mismatch client protocol"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // timeout case 12: { auto message = MAKE_STATIC_STRING_IMPL("Timeout"); - didReceiveMessageError(message); + didReceiveMessageError(1013, message); break; } // closed case 13: { auto message = MAKE_STATIC_STRING_IMPL("Closed by client"); - didReceiveMessageError(message); + didReceiveMessageError(1000, message); break; } // failed_to_write case 14: { auto message = MAKE_STATIC_STRING_IMPL("Failed to write"); - didReceiveMessageError(message); + didReceiveMessageError(1006, message); break; } // failed_to_connect case 15: { auto message = MAKE_STATIC_STRING_IMPL("Failed to connect"); - didReceiveMessageError(message); + didReceiveMessageError(1006, message); break; } // headers_too_large case 16: { auto message = MAKE_STATIC_STRING_IMPL("Headers too large"); - didReceiveMessageError(message); + didReceiveMessageError(1007, message); break; } // ended case 17: { auto message = MAKE_STATIC_STRING_IMPL("Closed by server"); - didReceiveMessageError(message); + didReceiveMessageError(1001, message); break; } // failed_to_allocate_memory case 18: { auto message = MAKE_STATIC_STRING_IMPL("Failed to allocate memory"); - didReceiveMessageError(message); + didReceiveMessageError(1001, message); break; } // control_frame_is_fragmented case 19: { auto message = MAKE_STATIC_STRING_IMPL("Protocol error - control frame is fragmented"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // invalid_control_frame case 20: { auto message = MAKE_STATIC_STRING_IMPL("Protocol error - invalid control frame"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // compression_unsupported case 21: { auto message = MAKE_STATIC_STRING_IMPL("Compression not implemented yet"); - didReceiveMessageError(message); + didReceiveMessageError(1011, message); break; } // unexpected_mask_from_server case 22: { auto message = MAKE_STATIC_STRING_IMPL("Protocol error - unexpected mask from server"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // expected_control_frame case 23: { auto message = MAKE_STATIC_STRING_IMPL("Protocol error - expected control frame"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // unsupported_control_frame case 24: { auto message = MAKE_STATIC_STRING_IMPL("Protocol error - unsupported control frame"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // unexpected_opcode case 25: { auto message = MAKE_STATIC_STRING_IMPL("Protocol error - unexpected opcode"); - didReceiveMessageError(message); + didReceiveMessageError(1002, message); break; } // invalid_utf8 case 26: { auto message = MAKE_STATIC_STRING_IMPL("Server sent invalid UTF8"); - didReceiveMessageError(message); + didReceiveMessageError(1003, message); break; } } diff --git a/src/bun.js/bindings/webcore/WebSocket.h b/src/bun.js/bindings/webcore/WebSocket.h index 7fd4e24a7..2043d58b9 100644 --- a/src/bun.js/bindings/webcore/WebSocket.h +++ b/src/bun.js/bindings/webcore/WebSocket.h @@ -139,7 +139,7 @@ private: void refEventTarget() final { ref(); } void derefEventTarget() final { deref(); } - void didReceiveMessageError(WTF::StringImpl::StaticStringImpl* reason); + void didReceiveMessageError(unsigned short code, WTF::StringImpl::StaticStringImpl* reason); void didUpdateBufferedAmount(unsigned bufferedAmount); void didStartClosingHandshake(); diff --git a/src/http/websocket_http_client.zig b/src/http/websocket_http_client.zig index 64ee3f778..eaade8cd9 100644 --- a/src/http/websocket_http_client.zig +++ b/src/http/websocket_http_client.zig @@ -186,12 +186,15 @@ pub fn NewHTTPUpgradeClient(comptime ssl: bool) type { var vm = global.bunVM(); vm.us_loop_reference_count +|= 1; client.event_loop_ref = true; + const prev_start_server_on_next_tick = vm.eventLoop().start_server_on_next_tick; + vm.eventLoop().start_server_on_next_tick = true; if (Socket.connect(host_.slice(), port, @ptrCast(*uws.us_socket_context_t, socket_ctx), HTTPClient, client, "tcp")) |out| { out.tcp.timeout(120); return out; } vm.us_loop_reference_count -|= 1; + vm.eventLoop().start_server_on_next_tick = prev_start_server_on_next_tick; client.clearData(); |
