- From: Rafael Weinstein <rafaelw@google.com>
- Date: Tue, 5 Feb 2013 17:22:53 -0800
- To: Boris Zbarsky <bzbarsky@mit.edu>
- Cc: Erik Arvidsson <arv@chromium.org>, public-webapps <public-webapps@w3.org>, Dimitri Glazkov <dglazkov@google.com>, daniel <daniel@mozilla.com>
- Message-ID: <CABMdHiRwQ1C1e12nGm8OkNB1EdfdQp+hvai6jsgVFSvi2pbr7A@mail.gmail.com>
On Tue, Feb 5, 2013 at 3:25 PM, Boris Zbarsky <bzbarsky@mit.edu> wrote: > On 2/5/13 11:01 PM, Erik Arvidsson wrote: > >> On Tue, Feb 5, 2013 at 5:28 PM, Boris Zbarsky <bzbarsky@mit.edu> wrote: >> >>> So in particular this allows creation of "uninitialized" instances in >>> some >>> sense, yes? >>> >> >> Depends how much logic is put in the constructor vs @@create. For DOM >> Elements I think we want to put *all* the logic in create. >> > > OK, I can live with that as long as the only arguments are things like for > Image. We'll have to be pretty careful about how we define our Element > subclass constructors in the future, though... > > And there are knock-on effects on all other objects in WebIDL. See below. > > > This won't work right given how HTMLButtonElement is currently defined in >>> WebIDL. Need to fix that at the very least. >>> >> >> Yes, but for document.register I think we can get away without >> changing this. >> > > No, you can't. You really need to get WebIDL fixed here. > > > We might need to add no op call methods to these >> functions >> > > They already have [[Call]]. What they don't have is a custom > [[Construct]]. Which means that they end up invoking the [[Construct]] > defined in ES5 section 13.2.2, which in step 8 calls the [[Call]] and if > that returns an object (which the WebIDL [[Call]] does) throws away the > object that [[construct]] just created and returns the object [[Call]] > returned. > > And you can't no-op the [[Call]] because web pages, afaik, use things like: > > var myImage = Image(); > > and > > var xhr = XMLHttpRequest(); > > just like they use Date() and Object() and Array(). The above is > supported for DOM constructors in at least Gecko and Presto, though > apparently not Chrome or Safari; I don't have IE to test right now. But > the point is that right now those constructors are not particularly weird > in Gecko and Presto, and I'm not entirely happy making them _more_ weird. > > Maybe the fact that Chrome and Safari don't support this means that we can > in fact redefine the [[Construct]] to create the right sort of object and > then invoke [[Call]] which will actually initialize the object. But that > brings us back to being able to create partially-initialized objects for > all IDL interfaces, not just elements.... > > Perhaps we need to define an IDL annotation for interfaces that opt in to > this split between [[Call]] and [[Construct]] and then have elements opt in > to it? > > > but that seems like the right thing to do anyway. The WebIDL >> interface constructors are already strange as they are >> > > Not in Gecko and Presto as far as I can tell... Certainly not any > stranger than Date or Array. > > > and I doubt anyone would object to making them less strange. >> > > I have no problem with less strange, but you're proposing more strange. > Again, as far as I can tell. > > > What happens if the same function is registered for several different tag >>> names, in terms of what happens with the [[Construct]]? >>> >> >> I vote for throwing. We could allow the tag name to be used as an >> alias but I don't really understand the use case you have in mind >> here. >> > > I don't have a use case. What I have is an edge case that I can see > implementations doing random non-interoperable crap for if we don't define > it. > > Throwing sounds fine to me. > > > Define, please. How does one determine this, in a rendering engine >>> implementation? I certainly have no way to tell, in Gecko, when I'm >>> "entering script", offhand.... >>> >> >> I was told this is needed for mutation observers that are queued up >> during parse. I'll let Dimitri or Rafael chime in with details. >> > > Ah, OK. Defining this stuff to happen at end of microtask or whatever it > is that normally triggers mutation observers makes a lot more sense than > "before entering script". ;) > http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-incdata The first thing that happens upon encoutering </script> is performing a microtask check point. I think Arv is suggesting that running custom element constructors would be included in this work. > Thanks, > Boris > >
Received on Wednesday, 6 February 2013 01:23:25 UTC