I&#39;m saying that we should differentiate between the &quot;closed&quot; state and &quot;cloned&quot; state.<div><br></div><div>Implementors effectively need to do this anyway, because the spec says that closed ports are still task sources, while cloned ports are not.</div>
<div><br></div><div>It makes sense to be able to post closed ports via postmessage() because they are still task sources so the recipient could attach an onmessage handler and pull messages off them.</div><div><br></div><div>
It makes no sense to re-send an already-cloned port since it&#39;s not a task source and can&#39;t ever be a task source again (no way to send messages to it). Likewise it is no longer entangled and so you can&#39;t send messages via it. Re-sending a cloned port is an error, and we should treat it as such.</div>
<div><br></div><div>-atw<br><br><div class="gmail_quote">On Fri, Aug 28, 2009 at 12:11 PM, Ian Hickson <span dir="ltr">&lt;<a href="mailto:ian@hixie.ch">ian@hixie.ch</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Mon, 17 Aug 2009, Drew Wilson wrote:<br>
&gt;<br>
&gt; Following up on this issue:<br>
&gt; Currently, the checks specified for MessagePort.postMessage() are different<br>
&gt; from the checks done in window.postMessage() (as described in section 7.2.4<br>
&gt; &quot;Posting messages with message ports&quot;).<br>
&gt; In particular, step 4 of section 7.2.4 says:<br>
&gt;<br>
&gt; If any of the entries in ports are null, *if any of the entries in<br>
&gt; **ports** are not entangled **MessagePort** objects*, or if any<br>
&gt; MessagePort object is listed in ports more than once, then throw an<br>
&gt; INVALID_STATE_ERR exception.<br>
<br>
</div>It appears that this is fixed.<br>
<div class="im"><br>
<br>
&gt; Also, as written, the spec now incorrectly lets us send a cloned port<br>
&gt; multiple times. So code like this would not generate an error:<br>
&gt;<br>
&gt; var channel = new MessageChannel();<br>
&gt; otherWindow.postMessage(&quot;message1&quot;, channel.port1);<br>
&gt; otherWindow.postMessage(&quot;message2&quot;, channel.port1);   // Sent the same port<br>
&gt; again<br>
<br>
</div>That&#39;s intentional. By the second call, channel.port1 is not entangled;<br>
the &#39;message2&#39; event will have a lame duck port as its port.<br>
<div class="im"><br>
<br>
&gt; The current WebKit behavior is to throw an INVALID_STATE_ERR in this<br>
&gt; case, while still allowing closed ports to be sent, which I believe is<br>
&gt; the intended behavior based on previous discussions. If this is correct,<br>
&gt; we should update the spec to prohibit resending cloned ports.<br>
<br>
</div>I don&#39;t see how this could be correct.<br>
<div><div></div><div class="h5"><br>
--<br>
Ian Hickson               U+1047E                )\._.,--....,&#39;``.    fL<br>
<a href="http://ln.hixie.ch/" target="_blank">http://ln.hixie.ch/</a>       U+263A                /,   _.. \   _\  ;`._ ,.<br>
Things that are impossible just take longer.   `._.-(,_..&#39;--(,_..&#39;`-.;.&#39;<br>
</div></div></blockquote></div><br></div>