Oh, certainly - I just started looking at the Worker constructor code, so I definitely have no sense of ownership there, so pick away. I was just trying to understand the issues well enough to understand what the Worker code is doing before I steal it :)<div>
<br></div><div>Looking at the Workers code (since that happens to be where I'm poking around):</div><div><br></div><div><div>JSWorkerConstructor::JSWorkerConstructor(ExecState* exec)</div><div> : DOMObject(JSWorkerConstructor::createStructure(exec->lexicalGlobalObject()->objectPrototype()))</div>
<div>{</div><div> <b>putDirect(exec->propertyNames().prototype, JSWorkerPrototype::self(exec, exec->lexicalGlobalObject()), None);</b></div><div> putDirect(exec->propertyNames().length, jsNumber(exec, 1), ReadOnly|DontDelete|DontEnum);</div>
<div>}</div><div><br></div><div>It looks like the constructor's .prototype is taken from the originating window (set at the time the constructor itself is created) - I haven't followed the construction code, but I'm guessing that results in the prototype property of new objects being attached to the chain from the original window. Is that incorrect behavior?</div>
<div><br></div><div>-atw<br><br><div class="gmail_quote">On Tue, Jun 23, 2009 at 3:44 PM, Adam Barth <span dir="ltr"><<a href="mailto:abarth@webkit.org">abarth@webkit.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I don't mean to pick on workers specifically. We have lots of bugs in<br>
the bindings where we attach the __proto__ property of new objects to<br>
the wrong prototype chain. My specific concern is that we should fix<br>
these bugs. :)<br>
<font color="#888888"><br>
Adam<br>
</font><div><div></div><div class="h5"><br>
<br>
On Tue, Jun 23, 2009 at 3:38 PM, Drew Wilson<<a href="mailto:atwilson@google.com">atwilson@google.com</a>> wrote:<br>
> BTW, Adam - can you elaborate your specific concerns?<br>
><br>
> On Tue, Jun 23, 2009 at 3:37 PM, Drew Wilson <<a href="mailto:atwilson@google.com">atwilson@google.com</a>> wrote:<br>
>><br>
>> Not sure. There's language in the WebIDL spec around prototype objects of<br>
>> interface objects, but I'm not sure how window.Worker.prototype is intended<br>
>> to relate to<br>
>> new Worker().prototype (if at all), based on my 10 minutes of scanning specs.<br>
>> -atw<br>
>><br>
>> On Tue, Jun 23, 2009 at 3:26 PM, Adam Barth <<a href="mailto:abarth@webkit.org">abarth@webkit.org</a>> wrote:<br>
>>><br>
>>> 2009/6/23 Drew Wilson <<a href="mailto:atwilson@google.com">atwilson@google.com</a>>:<br>
>>> > On Tue, Jun 23, 2009 at 11:49 AM, Adam Barth <<a href="mailto:abarth@webkit.org">abarth@webkit.org</a>> wrote:<br>
>>> >><br>
>>> >> > I am not even sure all of these should have the same behavior,<br>
>>> >> > however. For instance, as I read the Web Workers spec, the lexical<br>
>>> >> > global<br>
>>> >> > object may be correct thing to use for the Worker constructor.<br>
>>> >><br>
>>> >> I looked at the spec briefly. What leads you to think that? It's<br>
>>> >> probably a bug in the spec.<br>
>>> ><br>
>>> > Section 4.5 of the web workers spec reads:<br>
>>> >><br>
>>> >> Given a script's global scope o when creating or obtaining a worker,<br>
>>> >> the list of relevant Document objects to add depends on the type of o. If o<br>
>>> >> is a WorkerGlobalScope object (i.e. if we are creating a nested worker),<br>
>>> >> then the relevant Documents are the Documents that are in o's own list of<br>
>>> >> the worker's Documents. Otherwise, o is a Window object, and the relevant<br>
>>> >> Document is just the Document that is the active document of the Window<br>
>>> >> object o.<br>
>>> ><br>
>>> > So it seems to imply that parent document for a worker is derived from<br>
>>> > the currently executing script's global scope. I'll ping IanH about this -<br>
>>> > it may not be what he intended.<br>
>>><br>
>>> There's another question, which is where does the prototype chain of<br>
>>> the JS object you get out of the worker constructor point? It might<br>
>>> not have anything to do with this Document calculation.<br>
>>><br>
>>> Adam<br>
>><br>
><br>
><br>
</div></div></blockquote></div><br></div></div>