diff --git a/src/browser/tests/net/websocket.html b/src/browser/tests/net/websocket.html
index 257c2136..dbfc0c4a 100644
--- a/src/browser/tests/net/websocket.html
+++ b/src/browser/tests/net/websocket.html
@@ -544,3 +544,43 @@
});
}
+
+
diff --git a/src/browser/webapi/event/MessageEvent.zig b/src/browser/webapi/event/MessageEvent.zig
index 66ffd8c6..dfd813d5 100644
--- a/src/browser/webapi/event/MessageEvent.zig
+++ b/src/browser/webapi/event/MessageEvent.zig
@@ -44,6 +44,7 @@ pub const Data = union(enum) {
value: js.Value.Temp,
string: []const u8,
arraybuffer: js.ArrayBuffer,
+ blob: *@import("../Blob.zig"),
};
const Options = Event.inheritOptions(MessageEvent, MessageEventOptions);
@@ -83,6 +84,7 @@ pub fn deinit(self: *MessageEvent, session: *Session) void {
if (self._data) |d| {
switch (d) {
.value => |js_val| js_val.release(),
+ .blob => |blob| blob.releaseRef(session),
.string, .arraybuffer => {},
}
}
diff --git a/src/browser/webapi/net/WebSocket.zig b/src/browser/webapi/net/WebSocket.zig
index dc19728e..7fa390e4 100644
--- a/src/browser/webapi/net/WebSocket.zig
+++ b/src/browser/webapi/net/WebSocket.zig
@@ -410,13 +410,19 @@ fn dispatchOpenEvent(self: *WebSocket) !void {
}
fn dispatchMessageEvent(self: *WebSocket, data: []const u8, frame_type: http.WsFrameType) !void {
- std.debug.print("{any} {s}\n", .{ frame_type, data });
const page = self._page;
const target = self.asEventTarget();
if (page._event_manager.hasDirectListeners(target, "message", self._on_message)) {
- const msg_data: MessageEvent.Data = if (frame_type == .binary and self._binary_type == .arraybuffer)
- .{ .arraybuffer = .{ .values = data } }
+ const msg_data: MessageEvent.Data = if (frame_type == .binary)
+ switch (self._binary_type) {
+ .arraybuffer => .{ .arraybuffer = .{ .values = data } },
+ .blob => blk: {
+ const blob = try Blob.init(&.{data}, .{}, page);
+ blob.acquireRef();
+ break :blk .{ .blob = blob };
+ },
+ }
else
.{ .string = data };