diff options
author | bors-servo <release+servo@mozilla.com> | 2014-02-06 15:16:43 -0500 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-02-06 15:16:43 -0500 |
commit | ae6af1c0d11ee59451d38ccc9f61e40a9d15688c (patch) | |
tree | bfdd01e365c008f1a322f53fed8c1fa38f15037d /src | |
parent | 799e0ace786582f79b54d3652de5e84cd88bedbf (diff) | |
parent | ac8c659d2b770031c2d2dff020ca4c46e7df385f (diff) | |
download | servo-ae6af1c0d11ee59451d38ccc9f61e40a9d15688c.tar.gz servo-ae6af1c0d11ee59451d38ccc9f61e40a9d15688c.zip |
auto merge of #1622 : brunoabinader/servo/document-createprocessinginstruction, r=Ms2ger
PR #1620 adds ProcessingInstruction DOM interface.
Spec:
http://dom.spec.whatwg.org/#dom-document-createprocessinginstruction
This is a sub-task for #1428.
Diffstat (limited to 'src')
4 files changed, 39 insertions, 2 deletions
diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 7f2a38a5143..b9fd8d9c1d8 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -154,6 +154,7 @@ DOMInterfaces = { 'createComment', 'createDocumentFragment', 'createElement', + 'createProcessingInstruction', 'createTextNode', 'title', 'body', diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 84343959866..7dd41f686d7 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -18,6 +18,7 @@ use dom::htmldocument::HTMLDocument; use dom::mouseevent::MouseEvent; use dom::node::{AbstractNode, Node, ElementNodeTypeId, DocumentNodeTypeId}; use dom::text::Text; +use dom::processinginstruction::ProcessingInstruction; use dom::uievent::UIEvent; use dom::window::Window; use dom::htmltitleelement::HTMLTitleElement; @@ -276,6 +277,23 @@ impl Document { Comment::new(data, abstract_self) } + // http://dom.spec.whatwg.org/#dom-document-createprocessinginstruction + pub fn CreateProcessingInstruction(&self, abstract_self: AbstractDocument, target: DOMString, + data: DOMString) -> Fallible<AbstractNode> { + // Step 1. + if xml_name_type(target) == InvalidXMLName { + return Err(InvalidCharacter); + } + + // Step 2. + if data.contains("?>") { + return Err(InvalidCharacter); + } + + // Step 3. + Ok(ProcessingInstruction::new(target, data, abstract_self)) + } + pub fn CreateEvent(&self, interface: DOMString) -> Fallible<AbstractEvent> { match interface.as_slice() { "UIEvents" => Ok(UIEvent::new(self.window)), diff --git a/src/components/script/dom/webidls/Document.webidl b/src/components/script/dom/webidls/Document.webidl index 975fac355e2..a3b1c41648b 100644 --- a/src/components/script/dom/webidls/Document.webidl +++ b/src/components/script/dom/webidls/Document.webidl @@ -50,8 +50,8 @@ interface Document : Node { Text createTextNode(DOMString data); [Creator] Comment createComment(DOMString data); - /*[Creator, Throws] - ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);*/ + [Creator, Throws] + ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data); /*[Throws] Node importNode(Node node, optional boolean deep = true); diff --git a/src/test/html/content/test_document_createProcessingInstruction.html b/src/test/html/content/test_document_createProcessingInstruction.html new file mode 100644 index 00000000000..c313f34a4de --- /dev/null +++ b/src/test/html/content/test_document_createProcessingInstruction.html @@ -0,0 +1,18 @@ +<!DOCTYPE html> +<html> + <head> + <script src="harness.js"></script> + <script> + // test1: createProcessingInstruction + { + var pi = document.createProcessingInstruction("xml-stylesheet", "href=\"mycss.css\" type=\"text/css\""); + isnot(pi, null, "test1-0: createProcessingInstruction"); + is_a(pi, ProcessingInstruction, "test1-1: createProcessingInstruction"); + is(pi.target, "xml-stylesheet", "test1-2: createProcessingInstruction"); + is(pi.data, "href=\"mycss.css\" type=\"text/css\"", "test1-3: createProcessingInstruction"); + } + + finish(); + </script> + </head> +</html> |