Skip to content

Commit 86ada01

Browse files
authored
Mirror the ports property (GoogleChrome#2874)
1 parent 064df86 commit 86ada01

4 files changed

Lines changed: 13 additions & 7 deletions

File tree

packages/workbox-window/src/Workbox.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ class Workbox extends WorkboxEventTarget {
528528
* @param {Event} originalEvent
529529
*/
530530
private readonly _onMessage = async (originalEvent: MessageEvent) => {
531-
const {data, source} = originalEvent;
531+
const {data, ports, source} = originalEvent;
532532

533533
// Wait until there's an "own" service worker. This is used to buffer
534534
// `message` events that may be received prior to calling `register()`.
@@ -543,8 +543,9 @@ class Workbox extends WorkboxEventTarget {
543543
if (this._ownSWs.has(source as ServiceWorker)) {
544544
this.dispatchEvent(new WorkboxEvent('message', {
545545
data,
546-
sw: source as ServiceWorker,
547546
originalEvent,
547+
ports,
548+
sw: source as ServiceWorker,
548549
}));
549550
}
550551
}
@@ -564,6 +565,7 @@ export {Workbox};
564565
* @property {Event} originalEvent The original [`message`]{@link https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent}
565566
* event.
566567
* @property {string} type `message`.
568+
* @property {MessagePort[]} ports The `ports` value from `originalEvent`.
567569
* @property {Workbox} target The `Workbox` instance.
568570
*/
569571

packages/workbox-window/src/utils/WorkboxEvent.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ export class WorkboxEvent<K extends keyof WorkboxEventMap> {
2828
}
2929

3030
export interface WorkboxMessageEvent extends WorkboxEvent<'message'> {
31-
originalEvent: Event;
3231
data: any;
32+
originalEvent: Event;
33+
ports: readonly MessagePort[];
3334
}
3435

3536
export interface WorkboxLifecycleEvent extends WorkboxEvent<keyof WorkboxLifecycleEventMap> {

test/workbox-window/window/sw-message-reply.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ addEventListener('message', async (event) => {
1717
includeUncontrolled: true,
1818
});
1919
for (const win of windows) {
20-
win.postMessage('postMessage from SW!');
20+
const channel = new MessageChannel();
21+
win.postMessage('postMessage from SW!', [channel.port1]);
2122
}
2223
} else if (event.data.type === 'BROADCAST_BACK') {
2324
const bc = new BroadcastChannel('workbox');

test/workbox-window/window/test-Workbox.mjs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -570,11 +570,13 @@ describe(`[workbox-window] Workbox`, function() {
570570
wb.messageSW({type: 'POST_MESSAGE_BACK'});
571571
await nextEvent(wb, 'message');
572572

573-
assertMatchesWorkboxEvent(messageSpy.args[0][0], {
574-
type: 'message',
575-
target: wb,
573+
const wbEvent = messageSpy.args[0][0];
574+
assertMatchesWorkboxEvent(wbEvent, {
576575
data: 'postMessage from SW!',
577576
originalEvent: {type: 'message'},
577+
ports: wbEvent.originalEvent.ports,
578+
target: wb,
579+
type: 'message',
578580
});
579581
});
580582

0 commit comments

Comments
 (0)