[whatwg] MessagePorts and message delivery ordering

Ian Hickson ian at hixie.ch
Thu Aug 6 14:43:43 PDT 2009

On Thu, 6 Aug 2009, Drew Wilson wrote:
> I was writing some unit tests for SharedWorkers, and I saw some behavior
> that seems to be spec compliant, but which was counter-intuitive from a
> developer standpoint.
> Let's say that you have two message ports - some other window or a shared
> worker owns the other end of those ports.
> You then do this:
> port1.postMessage("foo");
> port2.postMessage("bar");
> At the other end, the order of the delivery of these messages is entirely
> arbitrary (could be "foo"->"bar", or "bar"->"foo") even though those ports
> share the same owner. This is because each port is an individual task
> source, and ordering within a given task source is guaranteed by the spec,
> but ordering across task sources is intentionally not guaranteed (this
> allows UAs to prioritize task sources).

Woo, at least one person understands what's going on with the event loop 

> Anyhow, just thought I'd point it out, and make sure there isn't 
> something in the spec that I missed that should affect delivery ordering 
> in this case.

I'm pretty sure your interpretation is correct. I'm not really sure 
whether to consider it a problem or not. It's a problem only if both ports 
are owned by the same owner on each end (i.e. port1 and port2 are owned by 
the same owner, obviously, but also port1' and port2' are owned by the 
same owner, though maybe a different owner than port1 and port2).

I don't really see any way around it. We can't really make the task source 
for ports be dependent on who the other end's owner is, because that might 
change asynchronously without the other owner knowing much about it.

Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

More information about the whatwg mailing list