aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTetsuharu OHZEKI <saneyuki.snyk@gmail.com>2014-06-11 03:03:07 +0900
committerTetsuharu OHZEKI <saneyuki.snyk@gmail.com>2014-06-13 20:36:27 +0900
commit28f8d16c87f7da49a3743585f3fb389027be04be (patch)
tree93429d0f58e2e3910cd279779ea2b279c073c204 /src
parent897e39dcf35ff27bc41ccb7990c5d82bb2adf15c (diff)
downloadservo-28f8d16c87f7da49a3743585f3fb389027be04be.tar.gz
servo-28f8d16c87f7da49a3743585f3fb389027be04be.zip
Fix the assertion failure with inserting node contains child which has id into the document
https://github.com/mozilla/servo/issues/2630
Diffstat (limited to 'src')
-rw-r--r--src/components/script/dom/node.rs11
-rw-r--r--src/test/content/test_document_getElementById.html12
2 files changed, 19 insertions, 4 deletions
diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs
index 7b095bc9c57..2e3e02d381b 100644
--- a/src/components/script/dom/node.rs
+++ b/src/components/script/dom/node.rs
@@ -1137,10 +1137,13 @@ impl Node {
// Step 8.
for node in nodes.mut_iter() {
parent.add_child(node, child);
- if parent.is_in_doc() {
- node.flags.deref().borrow_mut().insert(IsInDoc);
- } else {
- node.flags.deref().borrow_mut().remove(IsInDoc);
+ let is_in_doc = parent.is_in_doc();
+ for mut kid in node.traverse_preorder() {
+ if is_in_doc {
+ kid.flags.deref().borrow_mut().insert(IsInDoc);
+ } else {
+ kid.flags.deref().borrow_mut().remove(IsInDoc);
+ }
}
}
diff --git a/src/test/content/test_document_getElementById.html b/src/test/content/test_document_getElementById.html
index 382c07574a7..2617fb2e113 100644
--- a/src/test/content/test_document_getElementById.html
+++ b/src/test/content/test_document_getElementById.html
@@ -106,6 +106,18 @@
is(target2, null, "test 8-1, should return null after updated id via Attr.value");
}
+ // Test the assertion with inserting node with child having id into the document (mozilla#2630)
+ // This need not to port to WPF-test because this tests servo's internally flags.
+ {
+ let TEST_ID = "test-9";
+ let a = document.createElement("a");
+ let b = document.createElement("b");
+ a.appendChild(b).id = TEST_ID;
+ gBody.appendChild(a);
+ let result = document.getElementById(TEST_ID);
+ is(result, b, "test 9-0");
+ }
+
finish();
</script>
</body>