Fix namespaces of elements created in XML documents

This commit is contained in:
cu1t 2017-04-15 14:27:36 +07:00
parent 7ae9c96467
commit bef86cbf36
5 changed files with 18 additions and 15 deletions

View file

@ -2772,7 +2772,14 @@ impl DocumentMethods for Document {
if self.is_html_document { if self.is_html_document {
local_name.make_ascii_lowercase(); local_name.make_ascii_lowercase();
} }
let name = QualName::new(ns!(html), LocalName::from(local_name));
let ns = if self.is_html_document || self.content_type == "application/xhtml+xml" {
ns!(html)
} else {
ns!()
};
let name = QualName::new(ns, LocalName::from(local_name));
Ok(Element::create(name, None, self, ElementCreator::ScriptCreated)) Ok(Element::create(name, None, self, ElementCreator::ScriptCreated))
} }

View file

@ -0,0 +1,4 @@
[Document-constructor.html]
type: testharness
[new Document(): URL parsing]
expected: FAIL

View file

@ -1,8 +0,0 @@
[Node-properties.html]
type: testharness
[xmlElement.namespaceURI]
expected: FAIL
[detachedXmlElement.namespaceURI]
expected: FAIL

View file

@ -25384,7 +25384,7 @@
"testharness" "testharness"
], ],
"mozilla/document_head.html": [ "mozilla/document_head.html": [
"31892b141aba3b317502e38a4a38fcd8531cb8aa", "b861fe5a1159ba5fba44d3aee048cdb27d378be9",
"testharness" "testharness"
], ],
"mozilla/document_images_cache.html": [ "mozilla/document_images_cache.html": [

View file

@ -13,8 +13,8 @@
test(function() { test(function() {
var new_document = new Document(); var new_document = new Document();
new_document.appendChild(new_document.createElement("html")); new_document.appendChild(new_document.createElementNS('http://www.w3.org/1999/xhtml', "html"));
var new_head = new_document.createElement("head"); var new_head = new_document.createElementNS('http://www.w3.org/1999/xhtml', 'head');
assert_not_equals(new_head, null, "test2-0, append head to a new document"); assert_not_equals(new_head, null, "test2-0, append head to a new document");
assert_true(new_head instanceof HTMLHeadElement, "test2-1, append head to a new document: should be HTMLHeadElement"); assert_true(new_head instanceof HTMLHeadElement, "test2-1, append head to a new document: should be HTMLHeadElement");
@ -30,9 +30,9 @@
test(function() { test(function() {
var new_document = new Document(); var new_document = new Document();
var html = new_document.createElement("html"); var html = new_document.createElementNS('http://www.w3.org/1999/xhtml', "html");
var foo = new_document.createElement("foo"); var foo = new_document.createElementNS('http://www.w3.org/1999/xhtml', "foo");
var head = new_document.createElement("head"); var head = new_document.createElementNS('http://www.w3.org/1999/xhtml', "head");
new_document.appendChild(html); new_document.appendChild(html);
html.appendChild(foo); html.appendChild(foo);
foo.appendChild(head); foo.appendChild(head);