diff options
author | Gaming4JC <g4jc@hyperbola.info> | 2020-01-25 09:05:21 -0500 |
---|---|---|
committer | Gaming4JC <g4jc@hyperbola.info> | 2020-01-26 15:50:52 -0500 |
commit | 0cea94242a555b7a8a2d956412da809a514814f7 (patch) | |
tree | c7522df90cbadd242936308a2818d7bd240b613f | |
parent | d84323905b149cda8063ef73cd92e852f36c96c9 (diff) | |
download | UXP-0cea94242a555b7a8a2d956412da809a514814f7.tar UXP-0cea94242a555b7a8a2d956412da809a514814f7.tar.gz UXP-0cea94242a555b7a8a2d956412da809a514814f7.tar.lz UXP-0cea94242a555b7a8a2d956412da809a514814f7.tar.xz UXP-0cea94242a555b7a8a2d956412da809a514814f7.zip |
Bug 1430034 - Fix attributeChangedCallback isn't fired with correct newValue when the attribute value is an empty string;
Tag UXP Issue #1344
-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 4fb18381f..47601aabb 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 bd467912b..5090bfbfb 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> |