aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-05-29 12:03:28 -0500
committerbors-servo <metajack+bors@gmail.com>2015-05-29 12:03:28 -0500
commitbf4fc6f388676cdc31cebc742a52e9d8896575f5 (patch)
tree7cfdaa4f2469eb5d56537250e2c0ed78b1038efc
parentab1ba0239d0da0884d0f18c6d70c5d363ff8d9ab (diff)
parent7239d67353e8fed9f1845dc24c32b6081eeeef39 (diff)
downloadservo-bf4fc6f388676cdc31cebc742a52e9d8896575f5.tar.gz
servo-bf4fc6f388676cdc31cebc742a52e9d8896575f5.zip
Auto merge of #5972 - pgonda:remove-children-from-doc, r=jdm
<!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/5972) <!-- Reviewable:end -->
-rw-r--r--components/script/dom/node.rs10
-rw-r--r--tests/wpt/web-platform-tests/dom/nodes/Document-getElementById.html22
2 files changed, 25 insertions, 7 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index a2a9e159f01..ddea136c9f3 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -309,6 +309,7 @@ impl<'a> PrivateNodeHelpers for JSRef<'a, Node> {
assert!(self.parent_node.get().is_none());
for node in self.traverse_preorder() {
let node = node.root();
+ node.r().set_flag(IS_IN_DOC, false);
vtable_for(&node.r()).unbind_from_tree(parent_in_doc);
}
self.layout_data.dispose();
@@ -1786,7 +1787,7 @@ impl Node {
}
// https://dom.spec.whatwg.org/#concept-node-remove
- fn remove(node: JSRef<Node>, parent: JSRef<Node>, suppress_observers: SuppressObserver) {
+ fn remove(node: JSRef<Node>, parent: JSRef<Node>, _suppress_observers: SuppressObserver) {
assert!(node.GetParentNode().map_or(false, |node_parent| node_parent == Temporary::from_rooted(parent)));
// Step 1-5: ranges.
@@ -1794,13 +1795,8 @@ impl Node {
// Step 8.
parent.remove_child(node);
- node.set_flag(IS_IN_DOC, false);
-
// Step 9.
- match suppress_observers {
- SuppressObserver::Suppressed => (),
- SuppressObserver::Unsuppressed => node.node_removed(parent.is_in_doc()),
- }
+ node.node_removed(parent.is_in_doc());
}
// https://dom.spec.whatwg.org/#concept-node-clone
diff --git a/tests/wpt/web-platform-tests/dom/nodes/Document-getElementById.html b/tests/wpt/web-platform-tests/dom/nodes/Document-getElementById.html
index 37c6f144343..1dec4c085bc 100644
--- a/tests/wpt/web-platform-tests/dom/nodes/Document-getElementById.html
+++ b/tests/wpt/web-platform-tests/dom/nodes/Document-getElementById.html
@@ -20,6 +20,13 @@
<input id="test5" type="submit" value="Submit" data-name="3rd">
</div>
+ <!-- test 15 -->
+ <div id="outer">
+ <div id="middle">
+ <div id="inner"></div>
+ </div>
+ </div>
+
<script>
var gBody = document.getElementsByTagName("body")[0];
@@ -316,6 +323,21 @@
assert_equals(document.getElementById(TEST_ID), b);
}, "Inserting an id by inserting its parent node");
+ test(function () {
+ var TEST_ID = "test15"
+ var outer = document.getElementById("outer");
+ var middle = document.getElementById("middle");
+ var inner = document.getElementById("inner");
+ outer.removeChild(middle);
+
+ var new_el = document.createElement("h1");
+ new_el.id = "heading";
+ inner.appendChild(new_el);
+ // the new element is not part of the document since
+ // "middle" element was removed previously
+ assert_equals(document.getElementById("heading"), null);
+ }, "Document.getElementById must not return nodes not present in document");
+
// TODO:
// id attribute in a namespace