diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-02-19 15:39:59 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-02-19 15:39:59 +0530 |
commit | 361bb24a4904eb8045779b7f79859dbd4970d02e (patch) | |
tree | efb722fe0edbf317c25869f28db9835eb9fabb99 /components | |
parent | ee158cc65f117f8fa10c4b706ff4009c579c7775 (diff) | |
parent | 347f3c15b2a7ba5191c92350b701b158f39baae2 (diff) | |
download | servo-361bb24a4904eb8045779b7f79859dbd4970d02e.tar.gz servo-361bb24a4904eb8045779b7f79859dbd4970d02e.zip |
Auto merge of #9610 - liviuba:Fix-9553, r=KiChjang
Bypass GetResponseXML to better match spec
Resolves https://github.com/servo/servo/issues/9553
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/9610)
<!-- Reviewable:end -->
Diffstat (limited to 'components')
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 140ad159792..355cd989e93 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -778,8 +778,8 @@ impl XMLHttpRequestMethods for XMLHttpRequest { }, // Step 2 XMLHttpRequestResponseType::Document => { - let op_doc = self.GetResponseXML(); - if let Ok(Some(doc)) = op_doc { + let op_doc = self.document_response(); + if let Some(doc) = op_doc { doc.to_jsval(cx, rval.handle_mut()); } else { // Substep 1 @@ -1126,19 +1126,28 @@ impl XMLHttpRequest { // https://xhr.spec.whatwg.org/#document-response fn document_response(&self) -> Option<Root<Document>> { + // Step 1 + let response = self.response_xml.get(); + if response.is_some() { + return self.response_xml.get(); + } + let mime_type = self.final_mime_type(); - //TODO: prescan the response to determine encoding if final charset is null + // TODO: prescan the response to determine encoding if final charset is null let charset = self.final_charset().unwrap_or(UTF_8); let temp_doc: Root<Document>; match mime_type { Some(Mime(mime::TopLevel::Text, mime::SubLevel::Html, _)) => { + // Step 5 if self.response_type.get() == XMLHttpRequestResponseType::_empty { return None; } + // Step 6 else { temp_doc = self.document_text_html(); } }, + // Step 7 Some(Mime(mime::TopLevel::Text, mime::SubLevel::Xml, _)) | Some(Mime(mime::TopLevel::Application, mime::SubLevel::Xml, _)) | None => { @@ -1152,10 +1161,14 @@ impl XMLHttpRequest { return None; } }, + // Step 4 _ => { return None; } } + // Step 9 temp_doc.set_encoding_name(DOMString::from(charset.name())); - Some(temp_doc) + // Step 13 + self.response_xml.set(Some(temp_doc.r())); + return self.response_xml.get(); } #[allow(unsafe_code)] |