diff options
-rw-r--r-- | dom/base/CustomElementRegistry.cpp | 2 | ||||
-rw-r--r-- | testing/web-platform/tests/custom-elements/attribute-changed-callback.html | 31 |
2 files changed, 32 insertions, 1 deletions
diff --git a/dom/base/CustomElementRegistry.cpp b/dom/base/CustomElementRegistry.cpp index 4fb18381fa..47601aabb0 100644 --- a/dom/base/CustomElementRegistry.cpp +++ b/dom/base/CustomElementRegistry.cpp @@ -909,7 +909,7 @@ CustomElementRegistry::Upgrade(Element* aElement, LifecycleCallbackArgs args = { nsDependentAtomString(attrName), NullString(), - (attrValue.IsEmpty() ? NullString() : attrValue), + attrValue, (namespaceURI.IsEmpty() ? NullString() : namespaceURI) }; nsContentUtils::EnqueueLifecycleCallback(nsIDocument::eAttributeChanged, diff --git a/testing/web-platform/tests/custom-elements/attribute-changed-callback.html b/testing/web-platform/tests/custom-elements/attribute-changed-callback.html index bd467912b9..5090bfbfbf 100644 --- a/testing/web-platform/tests/custom-elements/attribute-changed-callback.html +++ b/testing/web-platform/tests/custom-elements/attribute-changed-callback.html @@ -11,6 +11,7 @@ </head> <body> <div id="log"></div> +<parser-created-element title></parser-created-element> <script> var customElement = define_new_custom_element(['title', 'id', 'r']); @@ -218,6 +219,36 @@ test(function () { assert_attribute_log_entry(calls[0], {name: 'title', oldValue: null, newValue: 'hello', namespace: null}); }, 'attributedChangedCallback must not be enqueued when mutating inline style declaration if the style attribute is not observed'); +test(function () { + var calls = []; + class CustomElement extends HTMLElement { } + CustomElement.prototype.attributeChangedCallback = function (...args) { + calls.push(create_attribute_changed_callback_log(this, ...args)); + } + CustomElement.observedAttributes = ['title']; + customElements.define('parser-created-element', CustomElement); + assert_attribute_log_entry(calls[0], {name: 'title', oldValue: null, newValue: '', namespace: null}); +}, 'Upgrading a parser created element must enqueue and invoke attributeChangedCallback for an HTML attribute'); + +test(function () { + var calls = []; + class CustomElement extends HTMLElement { } + CustomElement.prototype.attributeChangedCallback = function (...args) { + calls.push(create_attribute_changed_callback_log(this, ...args)); + } + CustomElement.observedAttributes = ['title']; + customElements.define('cloned-element-with-attribute', CustomElement); + + var instance = document.createElement('cloned-element-with-attribute'); + assert_equals(calls.length, 0); + instance.title = ''; + assert_attribute_log_entry(calls[0], {name: 'title', oldValue: null, newValue: '', namespace: null}); + + calls = []; + var clone = instance.cloneNode(false); + assert_attribute_log_entry(calls[0], {name: 'title', oldValue: null, newValue: '', namespace: null}); +}, 'Upgrading a cloned element must enqueue and invoke attributeChangedCallback for an HTML attribute'); + </script> </body> </html> |