So the API I'm proposing is the following:

[NoInterfaceObject] interface WorkerFactory {
   Worker createWorker(in DOMString scriptURL);
   Worker createSharedWorker(in DOMString name, in DOMString scriptURL);
};


interface Worker {
   boolean postMessage(in DOMString message);
   boolean postMessage(in DOMString message,
                       in MessagePort messagePort);

   // event handler attributes
            attribute EventListener onmessage;
            attribute EventListener onload;
            attribute EventListener onerror;
            attribute EventListener onunload;
};

interface WorkerParent {
   boolean postMessage(in DOMString message);
   boolean postMessage(in DOMString message,
                       in MessagePort messagePort);
};

[NoInterfaceObject] interface WorkerGlobalScope {
   // core worker features
   readonly attribute WorkerGlobalScope self;
   readonly attribute WorkerLocation location;
   readonly attribute DOMString name;
   readonly attribute boolean closing;
   readonly attribute WorkerParent parent;
   void close();

   // event handler attributes
            attribute EventListener onunload;
};

(We might want to add an onconnect property to WorkerGlobalScope, but it
doesn't seem strictly needed)

I think that it has the following advantages over the current draft spec:

* We don't expose users to MessagePort objects in the majority of
  scenarios.
* There is no permanent .port properties anywhere that would go dead if
  the port is passed somewhere.
* There is no need for pseudo properties anywhere (the port variable
  inside the WorkerGlobalScript)
* The current draft duplicates the onunload property on both the
  worker and its port. Not sure if this is needed or just a bug.
* All onX objects live on the same object rather than some living
  on the worker, some living on worker.port.

I'd be interested to hear what others think of this proposal.

/ Jonas

Reply via email to