Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/workerd/api/events.c++
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ MessageEvent::MessageEvent(jsg::Lock& js, kj::String type, Initializer initializ
}),
data(kj::mv(initializer.data).orDefault([&] { return jsg::JsRef(js, js.null()); })),
lastEventId(kj::mv(initializer.lastEventId).orDefault(kj::String())),
maybeSource(kj::mv(initializer.source)),
maybeSource(kj::mv(initializer.source).orDefault(kj::none)),
Comment thread
jasnell marked this conversation as resolved.
// Per the spec, origin defaults to the empty string for user-constructed events.
maybeOrigin(kj::mv(initializer.origin)
.map([](jsg::USVString&& origin) -> kj::String { return kj::mv(origin); })
Expand Down
2 changes: 1 addition & 1 deletion src/workerd/api/events.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class MessageEvent final: public Event {
jsg::Optional<jsg::JsRef<jsg::JsValue>> data;
jsg::Optional<jsg::USVString> origin;
jsg::Optional<kj::String> lastEventId;
jsg::Optional<jsg::Ref<MessagePort>> source;
jsg::Optional<kj::Maybe<jsg::Ref<MessagePort>>> source;
jsg::Optional<kj::Array<jsg::Ref<MessagePort>>> ports;

JSG_STRUCT(bubbles, cancelable, composed, data, origin, lastEventId, source, ports);
Expand Down
37 changes: 37 additions & 0 deletions src/workerd/api/tests/events-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -782,6 +782,43 @@ export const messageEventSpecInit = {
},
};

// MessageEventInit's source is nullable, so an event whose source reads as null can
// serve as the init for a new event.
export const messageEventNullSource = {
async test() {
strictEqual(new MessageEvent('message', { source: null }).source, null);

const original = new MessageEvent('message', {
data: 'x',
lastEventId: '7',
});
const copy = new MessageEvent(original.type, original);
strictEqual(copy.data, 'x');
strictEqual(copy.lastEventId, '7');
strictEqual(copy.source, null);

// Message events fired by a WebSocket have a null source as well.
const { 0: client, 1: server } = new WebSocketPair();
client.accept();
server.accept();
const { promise, resolve, reject } = Promise.withResolvers();
client.addEventListener('message', (event) => {
try {
resolve(new MessageEvent(event.type, event));
} catch (err) {
reject(err);
}
});
server.send('hello');
const cloned = await promise;
strictEqual(cloned.data, 'hello');
strictEqual(cloned.source, null);

client.close();
server.close();
},
};

// CloseEventInit supports the common EventInit members.
export const closeEventSpecInit = {
test() {
Expand Down
2 changes: 1 addition & 1 deletion types/generated-snapshot/experimental/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1752,7 +1752,7 @@ interface MessageEventInit {
data?: any;
origin?: string;
lastEventId?: string;
source?: MessagePort;
source?: MessagePort | null;
ports?: MessagePort[];
}
/**
Expand Down
2 changes: 1 addition & 1 deletion types/generated-snapshot/experimental/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1756,7 +1756,7 @@ export interface MessageEventInit {
data?: any;
origin?: string;
lastEventId?: string;
source?: MessagePort;
source?: MessagePort | null;
ports?: MessagePort[];
}
/**
Expand Down
2 changes: 1 addition & 1 deletion types/generated-snapshot/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1726,7 +1726,7 @@ interface MessageEventInit {
data?: any;
origin?: string;
lastEventId?: string;
source?: MessagePort;
source?: MessagePort | null;
ports?: MessagePort[];
}
/**
Expand Down
2 changes: 1 addition & 1 deletion types/generated-snapshot/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1730,7 +1730,7 @@ export interface MessageEventInit {
data?: any;
origin?: string;
lastEventId?: string;
source?: MessagePort;
source?: MessagePort | null;
ports?: MessagePort[];
}
/**
Expand Down
Loading