""inserted" and "removed" can probably be end of micro task, but attributeChanged definitely needs to be synchronous to model the behavior of <input type> where changing it from X to Y has an immediate effect on the APIs available (like stepUp)."
Actually, I disagree. Attribute changes need not be assessed syncronously, as long as they are evaluated before critical points, such as before paint (think requestAnimationFrame timing). Can you provide a common, real-world example of where queued timing would not work? Daniel J. Buchner Product Manager, Developer Ecosystem Mozilla Corporation On Mon, Mar 11, 2013 at 2:18 PM, Elliott Sprehn <espr...@gmail.com> wrote: > On Wed, Mar 6, 2013 at 5:36 PM, Boris Zbarsky <bzbar...@mit.edu> wrote: > >> On 3/6/13 5:05 PM, Dimitri Glazkov wrote: >> >>> * attributeChangedCallback -- synchronously called when an attribute >>> of an element is added, removed, or modified >>> >> >> Synchronously in what sense? Why are mutation observers not sufficient >> here? > > >> * insertedCallback -- asynchronously called when an element is added >>> to document tree (TBD: is this called when parser is constructing the >>> tree?) >>> >> >> Again, why is this not doable with mutation observers? > > > "inserted" and "removed" can probably be end of micro task, but > attributeChanged definitely needs to be synchronous to model the behavior > of <input type> where changing it from X to Y has an immediate effect on > the APIs available (like stepUp). > > MutationObservers are not sufficient because childList mutations are about > children, but you want to observe when *yourself* is added or removed from > the Document tree. There's also no "inserted into document" and "removed > from document" mutation records, and since ShadowRoot has no "host" > property there's also no way to walk up to the root to find out if you're > actually in the document. (Dimtiri should fix this... I hope). > > The ready callback should probably also be synchronous (but at least it > happens in script invocation of the new operator, or after tree building), > since you want your widget to be usable immediately. > > - E > >