mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-31 11:37:30 +09:00
Bug 1430034 - Fix attributeChangedCallback isn't fired with correct newValue when the attribute value is an empty string;
Tag UXP Issue #1344
This commit is contained in:
parent
a6339bef90
commit
2cdd48f819
2 changed files with 32 additions and 1 deletions
|
|
@ -909,7 +909,7 @@ CustomElementRegistry::Upgrade(Element* aElement,
|
||||||
LifecycleCallbackArgs args = {
|
LifecycleCallbackArgs args = {
|
||||||
nsDependentAtomString(attrName),
|
nsDependentAtomString(attrName),
|
||||||
NullString(),
|
NullString(),
|
||||||
(attrValue.IsEmpty() ? NullString() : attrValue),
|
attrValue,
|
||||||
(namespaceURI.IsEmpty() ? NullString() : namespaceURI)
|
(namespaceURI.IsEmpty() ? NullString() : namespaceURI)
|
||||||
};
|
};
|
||||||
nsContentUtils::EnqueueLifecycleCallback(nsIDocument::eAttributeChanged,
|
nsContentUtils::EnqueueLifecycleCallback(nsIDocument::eAttributeChanged,
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="log"></div>
|
<div id="log"></div>
|
||||||
|
<parser-created-element title></parser-created-element>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
var customElement = define_new_custom_element(['title', 'id', 'r']);
|
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});
|
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');
|
}, '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>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue