RESOLVED FIXED 26902
postMessage() spec now supports sending arrays of ports
https://bugs.webkit.org/show_bug.cgi?id=26902
Summary postMessage() spec now supports sending arrays of ports
Andrew Wilson
Reported 2009-07-01 13:43:59 PDT
Currently, the various flavors of postMessage (DOMWindow.postMessage, MessagePort.postMessage, Worker.postMessage, etc) take a single optional MessagePort argument which is passed to the destination via the MessageEvent.messagePort attribute. The HTML5 spec has changed to allow passing an array of ports instead, and renames MessageEvent.messagePort to MessageEvent.ports. This spec change didn't seem to generate much feedback one way or the other, so I'm not certain whether it's going to stick (we're the first platform to support MessagePorts) but there's no technical reason not to implement it.
Attachments
proposed patch (41.16 KB, patch)
2009-08-19 17:25 PDT, Andrew Wilson
levin: review+
levin: commit-queue-
Andrew Wilson
Comment 1 2009-08-18 18:01:58 PDT
Splitting this bug into two parts - part 1 will get the WebCore infrastructure working with passing multiple ports around, and part 2 will hookup the JS bindings.
Andrew Wilson
Comment 2 2009-08-19 17:25:33 PDT
Created attachment 35162 [details] proposed patch
David Levin
Comment 3 2009-08-20 22:51:45 PDT
Comment on attachment 35162 [details] proposed patch A few things to consider but nothing that couldn't get checked in. > diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog > +2009-08-19 Drew Wilson <atwilson@google.com> > + > + Reviewed by NOBODY (OOPS!). > + > + postMessage() spec now supports sending arrays of ports > + https://bugs.webkit.org/show_bug.cgi?id=26902 > + > + Added OwnPtr to VectorTraits so we can store OwnPtrs in Vectors. Nice. In WebCore/ChangeLog "No new tests, " needs an indentation fix. > diff --git a/WebCore/dom/MessagePort.cpp b/WebCore/dom/MessagePort.cpp > + // Passed-in ports passed validity checks, so we can disentangle them. > + MessagePortChannelArray* result = new MessagePortChannelArray(ports->size()); "result" seems as generic as "i" to me. portArray? > + for (unsigned int i = 0 ; i < ports->size() ; ++i) { > + OwnPtr<MessagePortChannel> channel = (*ports)[i]->disentangle(ec); > + ASSERT(!ec); // Can't generate exception here if passed above checks. One space before end of line comments. Want to do a patch to cpp_style.py? :) > > +PassOwnPtr<MessagePortArray> MessagePort::entanglePorts(ScriptExecutionContext& context, PassOwnPtr<MessagePortChannelArray> channels) > + MessagePortArray* result = new MessagePortArray(channels->size()); Personal nit: "result"
Note You need to log in before you can comment on or make changes to this bug.