[webkit-dev] Question about Constructors in WebKit JS Bindings

Drew Wilson atwilson at google.com
Tue Jun 23 16:08:08 PDT 2009


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 :)
Looking at the Workers code (since that happens to be where I'm
poking around):

JSWorkerConstructor::JSWorkerConstructor(ExecState* exec)
    :
DOMObject(JSWorkerConstructor::createStructure(exec->lexicalGlobalObject()->objectPrototype()))
{
    *putDirect(exec->propertyNames().prototype,
JSWorkerPrototype::self(exec, exec->lexicalGlobalObject()), None);*
    putDirect(exec->propertyNames().length, jsNumber(exec, 1),
ReadOnly|DontDelete|DontEnum);
}

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?

-atw

On Tue, Jun 23, 2009 at 3:44 PM, Adam Barth <abarth at webkit.org> wrote:

> I don't mean to pick on workers specifically.  We have lots of bugs in
> the bindings where we attach the __proto__ property of new objects to
> the wrong prototype chain.  My specific concern is that we should fix
> these bugs.  :)
>
> Adam
>
>
> On Tue, Jun 23, 2009 at 3:38 PM, Drew Wilson<atwilson at google.com> wrote:
> > BTW, Adam - can you elaborate your specific concerns?
> >
> > On Tue, Jun 23, 2009 at 3:37 PM, Drew Wilson <atwilson at google.com>
> wrote:
> >>
> >> Not sure. There's language in the WebIDL spec around prototype objects
> of
> >> interface objects, but I'm not sure how window.Worker.prototype is
> intended
> >> to relate to
> >>
> new Worker().prototype (if at all), based on my 10 minutes of scanning specs.
> >> -atw
> >>
> >> On Tue, Jun 23, 2009 at 3:26 PM, Adam Barth <abarth at webkit.org> wrote:
> >>>
> >>> 2009/6/23 Drew Wilson <atwilson at google.com>:
> >>> > On Tue, Jun 23, 2009 at 11:49 AM, Adam Barth <abarth at webkit.org>
> wrote:
> >>> >>
> >>> >> > I am not even sure all of these should have the same behavior,
> >>> >> > however. For instance, as I read the Web Workers spec, the lexical
> >>> >> > global
> >>> >> > object may be correct thing to use for the Worker constructor.
> >>> >>
> >>> >> I looked at the spec briefly.  What leads you to think that?  It's
> >>> >> probably a bug in the spec.
> >>> >
> >>> > Section 4.5 of the web workers spec reads:
> >>> >>
> >>> >> Given a script's global scope o when creating or obtaining a worker,
> >>> >> the list of relevant Document objects to add depends on the type of
> o. If o
> >>> >> is a WorkerGlobalScope object (i.e. if we are creating a nested
> worker),
> >>> >> then the relevant Documents are the Documents that are in o's own
> list of
> >>> >> the worker's Documents. Otherwise, o is a Window object, and the
> relevant
> >>> >> Document is just the Document that is the active document of the
> Window
> >>> >> object o.
> >>> >
> >>> > So it seems to imply that parent document for a worker is derived
> from
> >>> > the currently executing script's global scope. I'll ping IanH about
> this -
> >>> > it may not be what he intended.
> >>>
> >>> There's another question, which is where does the prototype chain of
> >>> the JS object you get out of the worker constructor point?  It might
> >>> not have anything to do with this Document calculation.
> >>>
> >>> Adam
> >>
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20090623/1e7f028a/attachment.html>


More information about the webkit-dev mailing list