diff options
-rw-r--r-- | components/script/dom/element.rs | 24 | ||||
-rw-r--r-- | tests/wpt/metadata/domparsing/innerhtml-03.xhtml.ini | 14 |
2 files changed, 22 insertions, 16 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index f6e5357df10..c30f27c8f69 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -120,6 +120,10 @@ use style::values::{CSSFloat, Either}; use style::values::{specified, computed}; use stylesheet_loader::StylesheetOwner; use task::TaskOnce; +use xml5ever::serialize as xmlSerialize; +use xml5ever::serialize::SerializeOpts as XmlSerializeOpts; +use xml5ever::serialize::TraversalScope as XmlTraversalScope; +use xml5ever::serialize::TraversalScope::ChildrenOnly as XmlChildrenOnly; // TODO: Update focus state when the top-level browsing context gains or loses system focus, // and when the element enters or leaves a browsing context container. @@ -1004,6 +1008,19 @@ impl Element { } } + pub fn xmlSerialize(&self, traversal_scope: XmlTraversalScope) -> Fallible<DOMString> { + let mut writer = vec![]; + match xmlSerialize::serialize(&mut writer, + &self.upcast::<Node>(), + XmlSerializeOpts { + traversal_scope: traversal_scope, + ..Default::default() + }) { + Ok(()) => Ok(DOMString::from(String::from_utf8(writer).unwrap())), + Err(_) => panic!("Cannot serialize element"), + } + } + pub fn root_element(&self) -> DomRoot<Element> { if self.node.is_in_doc() { self.upcast::<Node>() @@ -2059,11 +2076,14 @@ impl ElementMethods for Element { /// https://w3c.github.io/DOM-Parsing/#widl-Element-innerHTML fn GetInnerHTML(&self) -> Fallible<DOMString> { - // XXX TODO: XML case let qname = QualName::new(self.prefix().clone(), self.namespace().clone(), self.local_name().clone()); - self.serialize(ChildrenOnly(Some(qname))) + if document_from_node(self).is_html_document() { + return self.serialize(ChildrenOnly(Some(qname))); + } else { + return self.xmlSerialize(XmlChildrenOnly(Some(qname))); + } } /// https://w3c.github.io/DOM-Parsing/#widl-Element-innerHTML diff --git a/tests/wpt/metadata/domparsing/innerhtml-03.xhtml.ini b/tests/wpt/metadata/domparsing/innerhtml-03.xhtml.ini index f2b043ad4bf..cfe1e804e2c 100644 --- a/tests/wpt/metadata/domparsing/innerhtml-03.xhtml.ini +++ b/tests/wpt/metadata/domparsing/innerhtml-03.xhtml.ini @@ -1,21 +1,7 @@ [innerhtml-03.xhtml] type: testharness - [innerHTML in XHTML] - expected: FAIL - - [innerHTML in XHTML 1] - expected: FAIL - - [innerHTML in XHTML 2] - expected: FAIL - bug: https://github.com/servo/servo/issues/18776 - [innerHTML in XHTML 3] expected: FAIL [innerHTML in XHTML 4] expected: FAIL - - [innerHTML in XHTML 7] - expected: FAIL - |