aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2014-02-06 15:16:43 -0500
committerbors-servo <release+servo@mozilla.com>2014-02-06 15:16:43 -0500
commitae6af1c0d11ee59451d38ccc9f61e40a9d15688c (patch)
treebfdd01e365c008f1a322f53fed8c1fa38f15037d /src
parent799e0ace786582f79b54d3652de5e84cd88bedbf (diff)
parentac8c659d2b770031c2d2dff020ca4c46e7df385f (diff)
downloadservo-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')
-rw-r--r--src/components/script/dom/bindings/codegen/Bindings.conf1
-rw-r--r--src/components/script/dom/document.rs18
-rw-r--r--src/components/script/dom/webidls/Document.webidl4
-rw-r--r--src/test/html/content/test_document_createProcessingInstruction.html18
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>