mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Auto merge of #10647 - ConnorGBrewster:parse_xml, r=jdm
Finish hooking up XML parser This is a work in progress PR for #10581. I just want to make sure I am headed in the right direction. cc @jdm <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10647) <!-- Reviewable:end -->
This commit is contained in:
commit
daa1a2a0a8
29 changed files with 393 additions and 96 deletions
|
@ -1510,23 +1510,22 @@ impl ScriptThread {
|
|||
headers.get().map(|&LastModified(HttpDate(ref tm))| dom_last_modified(tm))
|
||||
});
|
||||
|
||||
let content_type = match metadata.content_type {
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) => {
|
||||
Some(DOMString::from("text/xml"))
|
||||
let content_type = metadata.content_type.as_ref().and_then(|&ContentType(ref mimetype)| {
|
||||
match *mimetype {
|
||||
Mime(TopLevel::Application, SubLevel::Xml, _) |
|
||||
Mime(TopLevel::Application, SubLevel::Ext(_), _) |
|
||||
Mime(TopLevel::Text, SubLevel::Xml, _) |
|
||||
Mime(TopLevel::Text, SubLevel::Plain, _) => Some(DOMString::from(mimetype.to_string())),
|
||||
_ => None,
|
||||
}
|
||||
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Plain, _))) => {
|
||||
Some(DOMString::from("text/plain"))
|
||||
}
|
||||
|
||||
_ => None
|
||||
};
|
||||
});
|
||||
|
||||
let loader = DocumentLoader::new_with_thread(self.resource_thread.clone(),
|
||||
Some(page.pipeline()),
|
||||
Some(incomplete.url.clone()));
|
||||
|
||||
let is_html_document = match metadata.content_type {
|
||||
Some(ContentType(Mime(TopLevel::Application, SubLevel::Xml, _))) |
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) =>
|
||||
IsHTMLDocument::NonHTMLDocument,
|
||||
_ => IsHTMLDocument::HTMLDocument,
|
||||
|
@ -1587,19 +1586,26 @@ impl ScriptThread {
|
|||
|
||||
document.set_https_state(metadata.https_state);
|
||||
|
||||
match metadata.content_type {
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) => {
|
||||
parse_xml(document.r(),
|
||||
parse_input,
|
||||
final_url,
|
||||
xml::ParseContext::Owner(Some(incomplete.pipeline_id)));
|
||||
}
|
||||
_ => {
|
||||
parse_html(document.r(),
|
||||
parse_input,
|
||||
final_url,
|
||||
ParseContext::Owner(Some(incomplete.pipeline_id)));
|
||||
}
|
||||
let is_xml = match metadata.content_type {
|
||||
Some(ContentType(Mime(TopLevel::Application, SubLevel::Ext(ref sub_level), _)))
|
||||
if sub_level.ends_with("+xml") => true,
|
||||
|
||||
Some(ContentType(Mime(TopLevel::Application, SubLevel::Xml, _))) |
|
||||
Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) => true,
|
||||
|
||||
_ => false,
|
||||
};
|
||||
|
||||
if is_xml {
|
||||
parse_xml(document.r(),
|
||||
parse_input,
|
||||
final_url,
|
||||
xml::ParseContext::Owner(Some(incomplete.pipeline_id)));
|
||||
} else {
|
||||
parse_html(document.r(),
|
||||
parse_input,
|
||||
final_url,
|
||||
ParseContext::Owner(Some(incomplete.pipeline_id)));
|
||||
}
|
||||
|
||||
if incomplete.is_frozen {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue