Fix adopted and connected callback reactions

This commit is contained in:
Connor Brewster 2017-07-18 10:06:10 -06:00
parent 77efab8a9e
commit 9ecb931c5e
7 changed files with 16 additions and 92 deletions

View file

@ -1422,13 +1422,12 @@ impl Node {
for descendant in node.traverse_preorder() {
descendant.set_owner_doc(document);
}
for descendant in node.traverse_preorder() {
for descendant in node.traverse_preorder().filter_map(|d| d.as_custom_element()) {
// Step 3.2.
if let Some(element) = node.as_custom_element() {
ScriptThread::enqueue_callback_reaction(&*element,
CallbackReaction::Adopted(old_doc.clone(), Root::from_ref(document)));
}
ScriptThread::enqueue_callback_reaction(&*descendant,
CallbackReaction::Adopted(old_doc.clone(), Root::from_ref(document)));
}
for descendant in node.traverse_preorder() {
// Step 3.3.
vtable_for(&descendant).adopting_steps(&old_doc);
}
@ -1636,9 +1635,17 @@ impl Node {
for kid in new_nodes {
// Step 7.1.
parent.add_child(*kid, child);
// Step 7.2: insertion steps.
if let Some(element) = kid.as_custom_element() {
ScriptThread::enqueue_callback_reaction(&*element, CallbackReaction::Connected);
// Step 7.7.
for descendant in kid.traverse_preorder().filter_map(Root::downcast::<Element>) {
// Step 7.7.2.
if descendant.is_connected() {
// Step 7.7.2.1.
if descendant.get_custom_element_definition().is_some() {
ScriptThread::enqueue_callback_reaction(&*descendant, CallbackReaction::Connected);
}
// TODO: Step 7.7.2.2.
// Try to upgrade descendant.
}
}
}
if let SuppressObserver::Unsuppressed = suppress_observers {