- From: Simon Pieters <simonp@opera.com>
- Date: Wed, 11 Apr 2012 07:24:50 +0200
- To: "Andrew Wilson" <atwilson@google.com>
- Cc: "Jarred Nicholls" <jarred@webkit.org>, "Jonas Sicking" <jonas@sicking.cc>, "public-webapps@w3c.org" <public-webapps@w3c.org>
On Tue, 10 Apr 2012 19:33:55 +0200, Andrew Wilson <atwilson@google.com>
wrote:
> I'll agree that having to use ports[0] to access the MessagePort in a
> connect event has always felt a bit like an API wart. However, I don't
> entirely recall why we wanted to have the connect event use the
> MessageEvent interface. So I'd be uncomfortable with changing connect
> event
> to not match that interface without understanding why we made those
> interfaces match in the first place (perhaps Ian can chime in here).
I don't see the problem with using MessageEvent for connect.
> I'll also note that the MessageEvent for cross-document messaging has a
> |ports| attribute, so I'm not certain why removing this attribute on the
> connect event "makes it closer to the [cross-document messaging] API" -
> can
> you clarify your reasoning here?
The code you write looks more like in cross-document messaging:
// cross-document messaging:
// I can get a message event from several places
onmessage = function(e) {
// post a pong message back
e.source.postMessage('pong', '*');
}
// shared workers:
// I can get a connect event from several places
onconnect = function(e) {
// post a pong message back
e.source.postMessage('pong');
}
The author doesn't need to care that e.source are different objects in the
two cases, they only need to care that it exposes a postMessage method
that they can use to communicate back.
> Also, since MessagePort is not a
> WindowProxy, I'm not sure we want to encourage developers to treat them
> as
> the same by putting them both as the |source| attribute in MessageEvents
> in
> different contexts, especially since the postMessage() APIs don't
> precisely
> match.
Hey, we use MessageEvent in lots of different contexts with different
semantics -- cross-document messaging, workers, shared workers,
EventSource, WebSocket... I don't think making this change to shared
workers is going to invalidate the usage of MessageEvent.
On Tue, 10 Apr 2012 19:47:12 +0200, Andrew Wilson <atwilson@google.com>
wrote:
> To follow up on Jonas' earlier comment, the postMessage/MessageEvent APIs
> changed to support object transfers after we defined the connect event
> structure, so it's not unreasonable that we should take another look at
> the
> connect event to try to make it match the current definition of
> postMessage().
>
> I think the model of connect event we've used in the past
> (pre-structure-clone-transfer) is as if the creator of the SharedWorker
> were sending a message like so:
>
> postMessage("", [newPort]);
>
> The recipient then receives a MessageEvent with data="" and
> ports=[newPort].
>
> In the new world where postMessage() supports a transfer object, I think
> the appropriate analogous connect event would be to result in a
> MessageEvent with both the |data| and |ports| attributes pointing at an
> array containing a single MessagePort. I don't think putting the
> MessagePort as the source attribute is the right model.
I don't think authors think of it in this way.
--
Simon Pieters
Opera Software
Received on Wednesday, 11 April 2012 05:25:24 UTC