in resources/perf.webkit.org/public/v3/components/base.js [206:250]
static defineElement(name, elementInterface)
{
ComponentBase._componentByName.set(name, elementInterface);
ComponentBase._componentByClass.set(elementInterface, name);
const enqueueToRenderOnResize = elementInterface.enqueueToRenderOnResize;
if (!ComponentBase.useNativeCustomElements)
return;
class elementClass extends HTMLElement {
constructor()
{
super();
const currentlyConstructed = ComponentBase._currentlyConstructedByInterface;
const component = currentlyConstructed.get(elementInterface);
if (component)
return; // ComponentBase's constructor will take care of the rest.
currentlyConstructed.set(elementInterface, this);
new elementInterface();
currentlyConstructed.delete(elementInterface);
}
connectedCallback()
{
this.component().enqueueToRender();
if (enqueueToRenderOnResize)
ComponentBase._connectedComponentToRenderOnResize(this.component());
}
disconnectedCallback()
{
if (enqueueToRenderOnResize)
ComponentBase._disconnectedComponentToRenderOnResize(this.component());
}
}
const nameDescriptor = Object.getOwnPropertyDescriptor(elementClass, 'name');
nameDescriptor.value = `${elementInterface.name}Element`;
Object.defineProperty(elementClass, 'name', nameDescriptor);
customElements.define(name, elementClass);
}