diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-05-29 12:03:28 -0500 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-05-29 12:03:28 -0500 |
commit | bf4fc6f388676cdc31cebc742a52e9d8896575f5 (patch) | |
tree | 7cfdaa4f2469eb5d56537250e2c0ed78b1038efc | |
parent | ab1ba0239d0da0884d0f18c6d70c5d363ff8d9ab (diff) | |
parent | 7239d67353e8fed9f1845dc24c32b6081eeeef39 (diff) | |
download | servo-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.rs | 10 | ||||
-rw-r--r-- | tests/wpt/web-platform-tests/dom/nodes/Document-getElementById.html | 22 |
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 |