W3C home > Mailing lists > Public > public-webapps@w3.org > January to March 2013

Re: document.register and ES6

From: Daniel Buchner <daniel@mozilla.com>
Date: Tue, 5 Feb 2013 17:31:29 -0800
Message-ID: <CAHZ6zJELyN0xYk+2TesJQdBDNGRsTW3Eo7Nwf7y2xsfYN0Atwg@mail.gmail.com>
To: Rafael Weinstein <rafaelw@google.com>
Cc: Boris Zbarsky <bzbarsky@mit.edu>, Erik Arvidsson <arv@chromium.org>, public-webapps <public-webapps@w3.org>, Dimitri Glazkov <dglazkov@google.com>
So does this...

"The first thing that happens upon encountering </script> is performing a
microtask check point.

I think Arv is suggesting that running custom element constructors would be
included in this work."

...imply that the user agent will ensure all known components/definitions
are strapped, and that elements are upgraded in a sync-ish fashion before
user code is run?

On Tue, Feb 5, 2013 at 5:22 PM, Rafael Weinstein <rafaelw@google.com> wrote:

>
>
> 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:32:26 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:49:57 GMT