@@ -112761,7 +112761,7 @@ import "https://example.com/foo/../module2.mjs";</code></pre>
112761112761 </ol>
112762112762
112763112763 <p class="note">Certain <span>event handler IDL attributes</span> have additional requirements, in
112764- particular the <code data-x="handler-MessagePort -onmessage">onmessage</code> attribute of
112764+ particular the <code data-x="handler-MessageEventTarget -onmessage">onmessage</code> attribute of
112765112765 <code>MessagePort</code> objects.</p>
112766112766
112767112767 </div>
@@ -118994,13 +118994,13 @@ function handleMessage(event) {
118994118994 <p>The key difference is that when using <code
118995118995 data-x="dom-EventTarget-addEventListener">addEventListener()</code>, the <code
118996118996 data-x="dom-MessagePort-start">start()</code> method must also be invoked. When using <code
118997- data-x="handler-MessagePort -onmessage">onmessage</code>, the call to <code
118997+ data-x="handler-MessageEventTarget -onmessage">onmessage</code>, the call to <code
118998118998 data-x="dom-MessagePort-start">start()</code> is implied.</p>
118999118999
119000119000 <p>The <code data-x="dom-MessagePort-start">start()</code> method, whether called explicitly or
119001- implicitly (by setting <code data-x="handler-MessagePort -onmessage">onmessage</code>), starts the
119002- flow of messages: messages posted on message ports are initially paused, so that they don't get
119003- dropped on the floor before the script has had a chance to set up its handlers.</p>
119001+ implicitly (by setting <code data-x="handler-MessageEventTarget -onmessage">onmessage</code>),
119002+ starts the flow of messages: messages posted on message ports are initially paused, so that they
119003+ don't get dropped on the floor before the script has had a chance to set up its handlers.</p>
119004119004
119005119005 </div>
119006119006
@@ -119142,7 +119142,29 @@ interface <dfn interface>MessageChannel</dfn> {
119142119142
119143119143 </div>
119144119144
119145+ <h4 w-nodev><span id="the-messageeventtarget-abstract-interface"></span>The
119146+ <code>MessageEventTarget</code> mixin</h4>
119147+ <h4 w-dev>Properties present on <code>MessagePort</code>, <code>Worker</code>, and
119148+ <code>DedicatedWorkerGlobalScope</code></h4>
119145119149
119150+ <pre><code class="idl">interface mixin <dfn interface>MessageEventTarget</dfn> {
119151+ attribute <span>EventHandler</span> <span data-x="handler-MessageEventTarget-onmessage">onmessage</span>;
119152+ attribute <span>EventHandler</span> <span data-x="handler-MessageEventTarget-onmessageerror">onmessageerror</span>;
119153+ };</code></pre>
119154+
119155+ <p>The following are the <span>event handlers</span> (and their corresponding <span data-x="event
119156+ handler event type">event handler event types</span>) <span w-nodev>that must be</span> supported,
119157+ as <span>event handler IDL attributes</span>, by <span w-nodev>objects implementing the
119158+ <code>MessageEventTarget</code> interface</span><span w-dev><code>MessagePort</code>,
119159+ <code>Worker</code>, and <code>DedicatedWorkerGlobalScope</code> objects</span>:</p>
119160+
119161+ <table>
119162+ <thead>
119163+ <tr><th><span data-x="event handlers">Event handler</span> <th><span>Event handler event type</span>
119164+ <tbody>
119165+ <tr><td><span id="handler-messageport-onmessage"></span><span id="handler-worker-onmessage"></span><span id="handler-dedicatedworkerglobalscope-onmessage"></span><dfn attribute for="MessageEventTarget"><code data-x="handler-MessageEventTarget-onmessage">onmessage</code></dfn> <td> <code data-x="event-message">message</code>
119166+ <tr><td><span id="handler-messageport-onmessageerror"></span><span id="handler-worker-onmessageerror"></span><span id="handler-dedicatedworkerglobalscope-onmessageerror"></span><dfn attribute for="MessageEventTarget"><code data-x="handler-MessageEventTarget-onmessageerror">onmessageerror</code></dfn> <td> <code data-x="event-messageerror">messageerror</code>
119167+ </table>
119146119168
119147119169 <h4>Message ports</h4>
119148119170
@@ -119157,11 +119179,11 @@ interface <dfn interface>MessagePort</dfn> : <span>EventTarget</span> {
119157119179 undefined <span data-x="dom-MessagePort-close">close</span>();
119158119180
119159119181 // event handlers
119160- attribute <span>EventHandler</span> <span data-x="handler-MessagePort-onmessage">onmessage</span>;
119161- attribute <span>EventHandler</span> <span data-x="handler-MessagePort-onmessageerror">onmessageerror</span>;
119162119182 attribute <span>EventHandler</span> <span data-x="handler-MessagePort-onclose">onclose</span>;
119163119183};
119164119184
119185+ <span>MessagePort</span> includes <span>MessageEventTarget</span>;
119186+
119165119187dictionary <dfn dictionary>StructuredSerializeOptions</dfn> {
119166119188 sequence<<span data-x="idl-object">object</span>> <dfn dict-member for="StructuredSerializeOptions" data-x="dom-StructuredSerializeOptions-transfer">transfer</dfn> = [];
119167119189};</code></pre>
@@ -119187,6 +119209,11 @@ dictionary <dfn dictionary>StructuredSerializeOptions</dfn> {
119187119209
119188119210 <div w-nodev>
119189119211
119212+ <p>Each <code>MessagePort</code> object has a <dfn>message event target</dfn> (a
119213+ <code>MessageEventTarget</code>), to which the <code data-x="event-message">message</code> and <code
119214+ data-x="event-messageerror">messageerror</code> events are dispatched. Unless otherwise
119215+ specified, it defaults to the <code>MessagePort</code> object itself.</p>
119216+
119190119217 <p>Each <code>MessagePort</code> object can be entangled with another (a symmetric relationship).
119191119218 Each <code>MessagePort</code> object also has a <span>task source</span> called the <dfn>port
119192119219 message queue</dfn>, initially empty. A <span>port message queue</span> can be enabled or
@@ -119377,6 +119404,9 @@ dictionary <dfn dictionary>StructuredSerializeOptions</dfn> {
119377119404 itself was transferred and thus all its tasks moved along with it.</p>
119378119405 </li>
119379119406
119407+ <li><p>Let <var>messageEventTarget</var> be <var>finalTargetPort</var>'s <span>message event
119408+ target</span>.</p></li>
119409+
119380119410 <li><p>Let <var>targetRealm</var> be <var>finalTargetPort</var>'s <span
119381119411 data-x="concept-relevant-realm">relevant realm</span>.</p></li>
119382119412
@@ -119387,7 +119417,7 @@ dictionary <dfn dictionary>StructuredSerializeOptions</dfn> {
119387119417
119388119418 <p>If this throws an exception, catch it, <span data-x="concept-event-fire">fire an
119389119419 event</span> named <code data-x="event-messageerror">messageerror</code> at
119390- <var>finalTargetPort </var>, using <code>MessageEvent</code>, and then return.
119420+ <var>messageEventTarget </var>, using <code>MessageEvent</code>, and then return.
119391119421 </li>
119392119422
119393119423 <li><p>Let <var>messageClone</var> be <var>deserializeRecord</var>.[[Deserialized]].</p></li>
@@ -119397,7 +119427,7 @@ dictionary <dfn dictionary>StructuredSerializeOptions</dfn> {
119397119427 maintaining their relative order.</p></li>
119398119428
119399119429 <li><p><span data-x="concept-event-fire">Fire an event</span> named <code
119400- data-x="event-message">message</code> at <var>finalTargetPort </var>, using
119430+ data-x="event-message">message</code> at <var>messageEventTarget </var>, using
119401119431 <code>MessageEvent</code>, with the <code data-x="dom-MessageEvent-data">data</code> attribute
119402119432 initialized to <var>messageClone</var> and the <code
119403119433 data-x="dom-MessageEvent-ports">ports</code> attribute initialized to
@@ -119462,15 +119492,13 @@ dictionary <dfn dictionary>StructuredSerializeOptions</dfn> {
119462119492 <thead>
119463119493 <tr><th><span data-x="event handlers">Event handler</span> <th><span>Event handler event type</span>
119464119494 <tbody>
119465- <tr><td><dfn attribute for="MessagePort"><code data-x="handler-MessagePort-onmessage">onmessage</code></dfn> <td> <code data-x="event-message">message</code>
119466- <tr><td><dfn attribute for="MessagePort"><code data-x="handler-MessagePort-onmessageerror">onmessageerror</code></dfn> <td> <code data-x="event-messageerror">messageerror</code>
119467119495 <tr><td><dfn attribute for="MessagePort"><code data-x="handler-MessagePort-onclose">onclose</code></dfn> <td> <code data-x="event-close">close</code>
119468119496 </table>
119469119497
119470119498 <p>The first time a <code>MessagePort</code> object's <code
119471- data-x="handler-MessagePort -onmessage">onmessage</code> IDL attribute is set, the port's <span>port
119472- message queue</span> must be enabled, as if the <code data-x="dom-MessagePort-start">start()</code>
119473- method had been called.</p>
119499+ data-x="handler-MessageEventTarget -onmessage">onmessage</code> IDL attribute is set, the port's
119500+ <span>port message queue</span> must be enabled, as if the <code
119501+ data-x="dom-MessagePort-start">start()</code> method had been called.</p>
119474119502
119475119503 </div>
119476119504
@@ -119797,8 +119825,8 @@ function showLogout() {
119797119825
119798119826 <p>The <code data-x="dom-Worker">Worker()</code> constructor call creates a worker and returns a
119799119827 <code>Worker</code> object representing that worker, which is used to communicate with the worker.
119800- That object's <code data-x="handler-Worker -onmessage">onmessage</code> event handler allows the
119801- code to receive messages from the worker.</p>
119828+ That object's <code data-x="handler-MessageEventTarget -onmessage">onmessage</code> event handler
119829+ allows the code to receive messages from the worker.</p>
119802119830
119803119831 <p>The worker itself is as follows:</p>
119804119832
@@ -120065,8 +120093,8 @@ function showLogout() {
120065120093 other ports.</p>
120066120094
120067120095 <p>To receive messages from a dedicated worker, use the <code
120068- data-x="handler-worker -onmessage">onmessage</code> <span data-x="event handler IDL attributes">event
120069- handler IDL attribute</span> on the <code>Worker</code> object:</p>
120096+ data-x="handler-MessageEventTarget -onmessage">onmessage</code> <span data-x="event handler IDL
120097+ attributes">event handler IDL attribute</span> on the <code>Worker</code> object:</p>
120070120098
120071120099 <pre><code class="js">worker.onmessage = function (event) { ... };</code></pre>
120072120100
@@ -120091,7 +120119,7 @@ function showLogout() {
120091120119}, [buffer]);</code></pre>
120092120120
120093120121 <p>To receive a message inside the worker, the <code
120094- data-x="handler-DedicatedWorkerGlobalScope -onmessage">onmessage</code> <span data-x="event handler
120122+ data-x="handler-MessageEventTarget -onmessage">onmessage</code> <span data-x="event handler
120095120123 IDL attributes">event handler IDL attribute</span> is used.</p>
120096120124
120097120125 <pre><code class="js">onmessage = function (event) { ... };</code></pre>
@@ -120295,18 +120323,14 @@ interface <dfn interface>DedicatedWorkerGlobalScope</dfn> : <span>WorkerGlobalSc
120295120323 undefined <span data-x="dom-DedicatedWorkerGlobalScope-postMessage-options">postMessage</span>(any message, optional <span>StructuredSerializeOptions</span> options = {});
120296120324
120297120325 undefined <span data-x="dom-DedicatedWorkerGlobalScope-close">close</span>();
120326+ };
120298120327
120299- attribute <span>EventHandler</span> <span data-x="handler-DedicatedWorkerGlobalScope-onmessage">onmessage</span>;
120300- attribute <span>EventHandler</span> <span data-x="handler-DedicatedWorkerGlobalScope-onmessageerror">onmessageerror</span>;
120301- };</code></pre>
120302-
120303- <p><code>DedicatedWorkerGlobalScope</code> objects act as if they had an implicit
120304- <code>MessagePort</code> associated with them. This port is part of a channel that is set up when
120305- the worker is created, but it is not exposed.<span w-nodev> This object must never be garbage
120306- collected before the <code>DedicatedWorkerGlobalScope</code> object.</span></p>
120328+ <span>DedicatedWorkerGlobalScope</span> includes <span>MessageEventTarget</span>;</code></pre>
120307120329
120308- <p w-nodev>All messages received by that port must immediately be retargeted at the
120309- <code>DedicatedWorkerGlobalScope</code> object.</p>
120330+ <p><code>DedicatedWorkerGlobalScope</code> objects have an associated <dfn>inside port</dfn> (a
120331+ <code>MessagePort</code>). This port is part of a channel that is set up when the worker is
120332+ created, but it is not exposed.<span w-nodev> This object must never be garbage collected before
120333+ the <code>DedicatedWorkerGlobalScope</code> object.</span></p>
120310120334
120311120335 <dl class="domintro">
120312120336 <dt><code data-x=""><var>dedicatedWorkerGlobal</var>.<span subdfn data-x="dom-DedicatedWorkerGlobalScope-name">name</span></code></dt>
@@ -120363,21 +120387,6 @@ interface <dfn interface>DedicatedWorkerGlobalScope</dfn> : <span>WorkerGlobalSc
120363120387
120364120388 </div>
120365120389
120366- <p>The following are the <span>event handlers</span> (and their corresponding <span data-x="event
120367- handler event type">event handler event types</span>) <span w-nodev>that must be</span> supported,
120368- as <span>event handler IDL attributes</span>, by objects implementing the
120369- <code>DedicatedWorkerGlobalScope</code> interface:</p>
120370-
120371- <table>
120372- <thead>
120373- <tr><th><span data-x="event handlers">Event handler</span> <th><span>Event handler event type</span>
120374- <tbody>
120375- <tr><td><dfn attribute for="DedicatedWorkerGlobalScope"><code data-x="handler-DedicatedWorkerGlobalScope-onmessage">onmessage</code></dfn> <td> <code data-x="event-message">message</code>
120376- <tr><td><dfn attribute for="DedicatedWorkerGlobalScope"><code data-x="handler-DedicatedWorkerGlobalScope-onmessageerror">onmessageerror</code></dfn> <td> <code data-x="event-messageerror">messageerror</code>
120377- </table>
120378-
120379-
120380-
120381120390 <h5>Shared workers and the <code subdfn>SharedWorkerGlobalScope</code> interface</h5>
120382120391
120383120392 <pre><code class="idl">[Global=(Worker,SharedWorker),Exposed=SharedWorker]
@@ -120733,7 +120742,17 @@ interface <dfn interface>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope
120733120742 <var>inside settings</var>'s <span data-x="environment settings object's
120734120743 realm">realm</span>.</p></li>
120735120744
120736- <li><p>Associate <var>inside port</var> with <var>worker global scope</var>.</p></li>
120745+ <li>
120746+ <p>If <var>shared</var> is false, then:</p>
120747+
120748+ <ol>
120749+ <li><p>Set <var>inside port</var>'s <span>message event target</span> to <var>worker global
120750+ scope</var>.</p></li>
120751+
120752+ <li><p>Set <var>worker global scope</var>'s <span>inside port</span> to <var>inside
120753+ port</var>.</p></li>
120754+ </ol>
120755+ </li>
120737120756
120738120757 <li><p><span>Entangle</span> <var>outside port</var> and <var>inside port</var>.</p></li>
120739120758
@@ -120987,8 +121006,6 @@ interface <dfn interface>Worker</dfn> : <span>EventTarget</span> {
120987121006
120988121007 undefined <span data-x="dom-Worker-postMessage">postMessage</span>(any message, sequence<<span data-x="idl-object">object</span>> transfer);
120989121008 undefined <span data-x="dom-Worker-postMessage-options">postMessage</span>(any message, optional <span>StructuredSerializeOptions</span> options = {});
120990- attribute <span>EventHandler</span> <span data-x="handler-Worker-onmessage">onmessage</span>;
120991- attribute <span>EventHandler</span> <span data-x="handler-Worker-onmessageerror">onmessageerror</span>;
120992121009};
120993121010
120994121011dictionary <dfn dictionary>WorkerOptions</dfn> {
@@ -120999,7 +121016,8 @@ dictionary <dfn dictionary>WorkerOptions</dfn> {
120999121016
121000121017enum <dfn enum>WorkerType</dfn> { "classic", "module" };
121001121018
121002- <span>Worker</span> includes <span>AbstractWorker</span>;</code></pre>
121019+ <span>Worker</span> includes <span>AbstractWorker</span>;
121020+ <span>Worker</span> includes <span>MessageEventTarget</span>;</code></pre>
121003121021
121004121022 <dl class="domintro">
121005121023 <dt><code data-x=""><var>worker</var> = new <span subdfn data-x="dom-Worker">Worker</span>(<var>scriptURL</var> [, <var>options</var> ])</code></dt>
@@ -121024,17 +121042,15 @@ enum <dfn enum>WorkerType</dfn> { "classic", "module" };
121024121042
121025121043 <div w-nodev>
121026121044
121045+ <p>Each <code>Worker</code> object has an associated <dfn for="Worker">outside port</dfn> (a
121046+ <code>MessagePort</code>). This port is part of a channel that is set up when the worker is
121047+ created, but it is not exposed. This object must never be garbage collected before the
121048+ <code>Worker</code> object.</p>
121049+
121027121050 <p>The <dfn method for="Worker"><code data-x="dom-Worker-terminate">terminate()</code></dfn>
121028121051 method, when invoked, must cause the <span>terminate a worker</span> algorithm to be run on the
121029121052 worker with which the object is associated.</p>
121030121053
121031- <p><code>Worker</code> objects act as if they had an implicit <code>MessagePort</code> associated
121032- with them. This port is part of a channel that is set up when the worker is created, but it is not
121033- exposed. This object must never be garbage collected before the <code>Worker</code> object.</p>
121034-
121035- <p>All messages received by that port must immediately be retargeted at the <code>Worker</code>
121036- object.</p>
121037-
121038121054 <p>The <dfn method for="Worker"><code
121039121055 data-x="dom-Worker-postMessage">postMessage(<var>message</var>, <var>transfer</var>)</code></dfn>
121040121056 and <dfn method for="Worker"><code
@@ -121043,8 +121059,8 @@ enum <dfn enum>WorkerType</dfn> { "classic", "module" };
121043121059 they immediately invoked the respective <code
121044121060 data-x="dom-MessagePort-postMessage">postMessage(<var>message</var>, <var>transfer</var>)</code>
121045121061 and <code data-x="dom-MessagePort-postMessage-options">postMessage(<var>message</var>,
121046- <var>options</var>)</code> on the port, with the same arguments, and returned the same return
121047- value.</p>
121062+ <var>options</var>)</code> on <span>this</span>'s <span>outside port</span> , with the same
121063+ arguments, and returned the same return value.</p>
121048121064
121049121065 </div>
121050121066
@@ -121057,19 +121073,6 @@ enum <dfn enum>WorkerType</dfn> { "classic", "module" };
121057121073
121058121074 </div>
121059121075
121060- <p>The following are the <span>event handlers</span> (and their corresponding <span data-x="event
121061- handler event type">event handler event types</span>) <span w-nodev>that must be</span> supported,
121062- as <span>event handler IDL attributes</span>, by objects implementing the <code>Worker</code>
121063- interface:</p>
121064-
121065- <table>
121066- <thead>
121067- <tr><th><span data-x="event handlers">Event handler</span> <th><span>Event handler event type</span>
121068- <tbody>
121069- <tr><td><dfn attribute for="Worker"><code data-x="handler-Worker-onmessage">onmessage</code></dfn> <td> <code data-x="event-message">message</code>
121070- <tr><td><dfn attribute for="Worker"><code data-x="handler-Worker-onmessageerror">onmessageerror</code></dfn> <td> <code data-x="event-messageerror">messageerror</code>
121071- </table>
121072-
121073121076 <div w-nodev>
121074121077
121075121078 <hr>
@@ -121105,7 +121108,10 @@ enum <dfn enum>WorkerType</dfn> { "classic", "module" };
121105121108 <li><p>Let <var>outside port</var> be a <span>new</span> <code>MessagePort</code> in <var>outside
121106121109 settings</var>'s <span data-x="environment settings object's realm">realm</span>.</p></li>
121107121110
121108- <li><p>Associate the <var>outside port</var> with <var>worker</var>.</p></li>
121111+ <li><p>Set <var>outside port</var>'s <span>message event target</span> to
121112+ <var>worker</var>.</p></li>
121113+
121114+ <li><p>Set <var>worker</var>'s <span>outside port</span> to <var>outside port</var>.</p></li>
121109121115
121110121116 <li>
121111121117 <p>Run this step <span>in parallel</span>:</p>
0 commit comments