An element is upgraded after being parsed with attributes already present in the markup. How does the upgrade algorithm handle `attributeChangedCallback` for those pre-existing observed attributes?
<x-el foo="a" bar="b"></x-el>
<script>
// defined AFTER the element already exists in the tree
class X extends HTMLElement {
static get observedAttributes() { return ['foo']; }
attributeChangedCallback(n,o,v){ console.log(n,o,v); }
}
customElements.define('x-el', X);
</script>