diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2015-12-03 12:27:19 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2015-12-03 12:27:19 +0530 |
commit | 6ec454b7f5926d84099930292ebdcbc8f6d5e89c (patch) | |
tree | 92701879c6f5900a03a351ca822c4e9b2ea9f740 /components/script/dom | |
parent | 01b4deb9d14926e5ad3ebe3e7f839affc4951a63 (diff) | |
parent | af7c0837f4218e769b74c729ee7ca643920eaccb (diff) | |
download | servo-6ec454b7f5926d84099930292ebdcbc8f6d5e89c.tar.gz servo-6ec454b7f5926d84099930292ebdcbc8f6d5e89c.zip |
Auto merge of #8739 - jitendra29:finalMimeAndCharsetHelper, r=eefriedman
M1504: Implement final charset support for text_response method
Following changes have been made:
* Added final_mime_type and final_charset helper methods to return the appropriate final mime/charset values
* Modified the text_response method to use the final_charset instead of directly using the response charset
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8739)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 24a93225d2b..24bd012f105 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -995,20 +995,9 @@ impl XMLHttpRequest { } } - //FIXME: add support for override_mime_type and override_charset + //FIXME: add support for XML encoding guess stuff using XML spec fn text_response(&self) -> String { - let mut encoding = UTF_8 as EncodingRef; - match self.response_headers.borrow().get() { - Some(&ContentType(mime::Mime(_, _, ref params))) => { - for &(ref name, ref value) in params { - if name == &mime::Attr::Charset { - encoding = encoding_from_whatwg_label(&value.to_string()).unwrap_or(encoding); - } - } - }, - None => {} - } - + let encoding = self.final_charset().unwrap_or(UTF_8); // According to Simon, decode() should never return an error, so unwrap()ing // the result should be fine. XXXManishearth have a closer look at this later @@ -1102,6 +1091,34 @@ impl XMLHttpRequest { } Ok(()) } + + fn final_charset(&self) -> Option<EncodingRef> { + if self.override_charset.borrow().is_some() { + self.override_charset.borrow().clone() + } else { + match self.response_headers.borrow().get() { + Some(&ContentType(ref mime)) => { + let value = mime.get_param(mime::Attr::Charset); + value.and_then(|value|{ + encoding_from_whatwg_label(value) + }) + } + None => { None } + } + } + } + + #[allow(dead_code)] + fn final_mime_type(&self) -> Option<Mime> { + if self.override_mime_type.borrow().is_some() { + self.override_mime_type.borrow().clone() + } else { + match self.response_headers.borrow().get() { + Some(&ContentType(ref mime)) => { Some(mime.clone()) }, + None => { None } + } + } + } } trait Extractable { |