diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 3024190100b..3e6d8dbe88f 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -26,6 +26,7 @@ DOMInterfaces = { 'Console': {}, 'Document': { 'needsAbstract': [ + 'adoptNode', 'anchors', 'applets', 'body', diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 8ece312e907..3172f2f93cb 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -311,6 +311,21 @@ impl Document { Ok(Node::clone(node, Some(abstract_self), clone_children)) } + // http://dom.spec.whatwg.org/#dom-document-adoptnode + pub fn AdoptNode(&self, abstract_self: &JS, node: &JS) -> Fallible> { + // Step 1. + if node.is_document() { + return Err(NotSupported); + } + + // Step 2. + let mut adoptee = node.clone(); + Node::adopt(&mut adoptee, abstract_self); + + // Step 3. + Ok(adoptee) + } + // http://dom.spec.whatwg.org/#dom-document-createevent pub fn CreateEvent(&self, interface: DOMString) -> Fallible> { match interface.as_slice() { diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index 1905b77e516..95c09d309f2 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -1016,7 +1016,7 @@ impl Node { } // http://dom.spec.whatwg.org/#concept-node-adopt - fn adopt(node: &mut JS, document: &JS) { + pub fn adopt(node: &mut JS, document: &JS) { // Step 1. match node.parent_node() { Some(ref mut parent) => Node::remove(node, parent, Unsuppressed), diff --git a/src/components/script/dom/webidls/Document.webidl b/src/components/script/dom/webidls/Document.webidl index b12c5525e92..a1090998801 100644 --- a/src/components/script/dom/webidls/Document.webidl +++ b/src/components/script/dom/webidls/Document.webidl @@ -38,6 +38,8 @@ interface Document : Node { [Throws] Node importNode(Node node, optional boolean deep = false); + [Throws] + Node adoptNode(Node node); [Creator, Throws] Event createEvent(DOMString interface_);